コンテンツ

    サーバー応答 449 Retry With

    HTTP ステータスコード 449 の定義

    HTTP ステータスコード 449 (Retry With) は、サーバーがクライアントから追加の情報を要求する特定の状況で使用されるコードです。このコードは公式の HTTP 標準の一部ではありませんが、一部の API で遭遇することがあります。

    449 - Retry With

    ステータスコードの意味と目的

    449 ステータスコードは、クライアントに対して再送信を促すために使用されます。このコードは、サーバーがリクエストを完了するために必要な情報が不足している場合に返されます。

    449 ステータスコードが返される状況

    • クライアントの認証が必要な場合
    • 必須のパラメータが不足している場合
    • データのバリデーションエラーが発生した場合

    ステータスコード 449 の使用例

    例 1: 認証が必要な場合

    ユーザーがログインしていない状態で保護されたリソースにアクセスしようとした場合、サーバーは 449 ステータスコードを返すことがあります。

    リクエスト:
    GET /protected/resource HTTP/1.1
    Host: example.com
    
    レスポンス:
    HTTP/1.1 449 Retry With
    WWW-Authenticate: Basic realm="Access to the staging site"
    

    例 2: 必須のパラメータが不足している場合

    API が特定のパラメータを必要としているが、クライアントがそれを送信していない場合、サーバーは同様に 449 ステータスコードを返すことがあります。

    リクエスト:
    POST /api/resource HTTP/1.1
    Host: example.com
    Content-Type: application/json
    
    {
        "name": "Sample"
    }
    
    レスポンス:
    HTTP/1.1 449 Retry With
    Content-Type: application/json
    
    {"error": "Missing required parameter: 'id'"}
    

    例 3: データのバリデーションエラー

    クライアントから送信されたデータがバリデーションを通過しない場合、サーバーは 449 ステータスコードで応答することがあります。

    リクエスト:
    POST /api/users HTTP/1.1
    Host: example.com
    Content-Type: application/json
    
    {
        "email": "invalid-email"
    }
    
    レスポンス:
    HTTP/1.1 449 Retry With
    Content-Type: application/json
    
    {"error": "Invalid email format"}
    

    異なるプログラミング言語でのステータスコード 449 のエラー修正

    JavaScript (Node.js)

    const axios = require('axios');
    
    axios.post('/api/resource', { name: 'Sample' })
        .then(response => {
            console.log(response.data);
        })
        .catch(error => {
            if (error.response.status === 449) {
                // 必要なデータを追加して再送信
                const requiredData = { id: '123' };
                axios.post('/api/resource', { ...requiredData, name: 'Sample' });
            }
        });
    

    Python (requests)

    import requests
    
    response = requests.post('https://example.com/api/resource', json={'name': 'Sample'})
    
    if response.status_code == 449:
        # 必要なパラメータを追加して再送信
        response = requests.post('https://example.com/api/resource', json={'id': '123', 'name': 'Sample'})
    

    PHP (cURL)

    $ch = curl_init('https://example.com/api/resource');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(['name' => 'Sample']));
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
    
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    
    if ($httpCode == 449) {
        // データを変更して再送信
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(['id' => '123', 'name' => 'Sample']));
        $response = curl_exec($ch);
    }
    curl_close($ch);
    

    ステータスコード 449 に関する推奨事項

    クライアントアプリケーションで 449 ステータスコードを正しく処理することが重要です。エラーが発生した場合は、その情報を適切に記録し、モニタリングすることが推奨されます。以下のポイントに注意してください。

    • エラーメッセージをユーザーにわかりやすく表示する
    • 再送信する際に必要なデータを確実に送信する
    • エラーの発生をログに記録して、将来のデバッグに役立てる
    状況 説明 対応策
    認証が必要 ユーザーが認証されていない 認証情報を追加して再送信
    必須パラメータ不足 API に必要なパラメータが欠けている 欠けているパラメータを追加して再送信
    バリデーションエラー 送信されたデータが不正 データを修正して再送信