サーバー応答 449 Retry With
HTTP ステータスコード 449 の定義
HTTP ステータスコード 449 (Retry With) は、サーバーがクライアントから追加の情報を要求する特定の状況で使用されるコードです。このコードは公式の HTTP 標準の一部ではありませんが、一部の API で遭遇することがあります。
ステータスコードの意味と目的
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 に必要なパラメータが欠けている | 欠けているパラメータを追加して再送信 |
バリデーションエラー | 送信されたデータが不正 | データを修正して再送信 |