⌚ 2021/6/21 (Mon) 🔄 2024/3/20 (Wed)
http status code 400(Bad Request)が返信された時のチェックポイント
最近、業務で作成したシステムとWebAPIを連携させるテストを行っていますが、 その際に地味につまずいたポイントとその解決方法を、ここで共有しようと思います。
つまずいたこと
複数パラメータ付きのGETリクエストを投げた場合に400エラーが返ってくる
HTTPステータスコード400(Bad Request)は、どのようなエラーかというと、
主にクライアントからのリクエストに問題があり、サーバがリクエストを処理できない場合に、発生するエラーです。
より、具体的に説明すると、400番台のコードに定義されている、どのエラーにも当てはまらない場合に返却されます。
サーバ側の実装次第では、サーバ側の問題である場合もあります。
様々な原因で発生するエラーですが、以下に確認すべきポイントを列挙します。
チェックポイント
- ・ブラウザのキャッシュが破損している
- キャッシュクリアする。
Chromeの場合 メニュー>設定>自動入力>プライバシーとセキュリティ>閲覧履歴データの削除>キャッシュされた画像とファイル>データを削除
- ・ブラウザのCookieが有効期限切れ、または破損している
- Cookieを削除する。
Chromeの場合 メニュー>設定>自動入力>プライバシーとセキュリティ>閲覧履歴データの削除>Cookieと他のサイトデータ>データを削除
- ・URLの入力ミス
- 正しいURLを入力しているか確認する。
- ・URLの日本語パラメータがエンコードされていない
- サーバが処理できない文字を含んでいる場合、エンコードする。(あ → %E3%81%82)
- ・URLエンコードが正しくない
- あ → %%E3%81%82(余分な%がある)になっているなど、エンコードにミスがないか確認する。
- ・URLに含まれる&がエスケープされていない
- 複数パラメータをつけてリクエストする場合、URLに含まれる&をエスケープする。(& → \&)
私の場合、以下のようにcurlコマンドでリクエストした結果、ステータスコード400が返却されてしまいました。
リクエスト : curl http://www.sun-m.co.jp/sample/xxx?username=Admin&word=xxx
レスポンス : {
"timestamp" : "20XX-XX-XX XX:XX:XX",
"status" : 400,
"error" : "Bad Request",
"message" : ""
"path" : "http://www.sun-m.co.jp/sample/xxx"
}
まとめ
今回ステータスコード400が返却された原因は、複数パラメータをつなげるための&を、エスケープしていなかったことでした。
下記のように書くことでリクエストに成功しました。
リクエスト:curl http://www.sun-m.co.jp/sample/xxx?username=Admin\&word=xxx
参考にしたブログによると、
複数パラメータを利用している場合URLの&がシェルの&(バックグラウンドプロセス)と競合してしまい、違うコマンドとして認識されてしまう。
とのことです。
以上、http status code 400(Bad Request)が返ってきた場合の対処方法の紹介でした。
最後まで読んでいただきまして、ありがとうございました。
参考
参考サイト:https://hkdnet.hatenablog.com/entry/2015/09/19/133415