HTTPエラー400の原因と解決方法を徹底解説

## 初めに
この記事では、HTTPエラー400の原因と対策について詳しく説明しています。HTTPエラー400は、クライアントのリクエストに問題があり、サーバーがそのリクエストを拒否した際に発生します。特にAPIの使用時にリクエストが仕様に合っていない場合に頻繁に見られるエラーです。この記事を参考にして、400エラーを効率的に解決しましょう。

## Httpエラー400とは

HTTPエラー400は「Bad Request」というエラーで、クライアントからのリクエストに誤りがあったことを示すステータスコードです。クライアント側のリクエストに問題があることをサーバが判断し、そのリクエストを拒否したということを示しています。

400エラーが発生した場合、クライアント側ではリクエストの内容を見直し、正しい形式・データで送信する必要があります。サーバ側でもエラーハンドリングを行い、可能な限り明確なエラーメッセージを返すことが大切です。

この記事も合わせて読みたい：

http://apidog.com/jp/blog/what-is-api-status-code-and-its-designing/

## Httpエラー400の実質はAPIのエラー

HTTPエラー400はAPIのエラーと捉えることができます。API(Application Programming Interface)とは、ソフトウェアの機能やデータを他のソフトウェアから利用できるようにしたインターフェースのことです。

APIを利用する際には、特定のデータ形式やプロトコルに従ってリクエストを送信する必要があります。このとき、クライアント側のリクエストに何らかの誤りがあり、APIの仕様に沿っていない場合に400エラーが返されます。つまり、400エラーは「API側の要求仕様をクライアントが満たしていない」という意味合いを持っています。

- 必須パラメータが不足している
- 指定したデータ形式ではない
- 想定外の値がパラメータに入っている

など、API側が想定しているインターフェース仕様に対して、クライアントのリクエストが適合していないことが原因で発生します。

## ブラウザのHttpエラー400について

Chromeなどのブラウザを使って、Webサイトにアクセスした際に400エラーが発生して、そのサイトにアクセスすることができないケースもよくあります。これは一見だけすれば、APIには関係がないと思われていますが、実際にこれもWebサイト自体が内部的にAPIを利用している場合、APIのエラーが発生するからです。

![http-error-400-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3877124/9ef34c87-8b4d-c5d0-9472-303805382b81.png)

多くのWebサイトでは、表示するコンテンツや機能を実現するためにバックエンドのアプリケーションサーバーとAPIで通信しています。たとえば、次のようなウェブページがあります：

- 検索機能を実装するために検索APIを呼び出す
- 商品情報をDBから取得するためにデータAPIを利用する
- ユーザーの操作を処理するロジックがAPIサーバー上にある

ユーザーがWebサイト上で検索ボタンをクリックした時、ブラウザからサーバーへのリクエストは実際、検索APIに対するリクエストとなります。

この時にAPI側で400エラーが発生すれば、ページにはアクセスすることに失敗して、ユーザーに対してHTTP400エラーとして表示されることになります。

つまり、WebサイトとAPIは密接に結びついているため、利用者から見た場合にはWebサイトのエラーに見えても、実際はAPI側のエラーが原因であることがありえます。

## Httpエラー400が発生する原因は？

それでは、HTTPエラー400が発生する原因はなんですか？実際には、APIとのやり取りの中、何かAPI仕様に従っていないことがあれば、Httpエラー400が発生してしまうので、Httpエラー400が発生する原因とも様々な方面から考える必要があるのでしょう。次は、よくみられるHttpエラー400の原因を皆さんに紹介します。

### リクエストのsyntax(構文)が間違っている
リクエストを送信する時に、リクエストの構文がAPI仕様書に掲載されているものと完全に一致させる必要があります。そこで、次のような場合は、Httpエラー400が発生します。

- HTTPプロトコルのフォーマットに沿っていない場合
- リクエストラインやヘッダーに誤りがある場合

### 必須のパラメータが不足している
また、GETやPOSTリクエストで必要なパラメータが送信されていない場合は、Httpエラー400も起きます。

### 送信データのフォーマットが誤っている
一般的には、APIとやり取りする場合でも、ウェブサイトにアクセスする場合でも、データはAPIサーバーサイドへ送信され、レスポンスが取得されるという流れがあります。このような場合、次のように送信データのフォーマットが間違うと、Httpエラー400が発生します。

- 本文のデータ形式が予期されたフォーマット(JSON, XMLなど)と合致しない場合
- データ型が合致しない場合(文字列が期待される箇所に数値が送信されるなど)

### 送信データの内容が誤っている
Httpエラー400が発生する場合、送信データの内容が間違っているかどうかを確認する必要もあります。

- 特定のパラメータに対して、有効な値ではないデータが送信された場合
- 値のフォーマットが誤っている場合(日付、電話番号など)
- 
###  認証エラー
必要な認証情報が送信されていない、認証処理でエラーが起きる場合もよく見られます。

###  リクエストが大きすぎる
また、一般的には、APIのサーバーサイドではリクエストのデータサイズの規定があります。ということで、送信するデータ（本文やヘッダー）のサイズ・長さがサーバーの上限を超えた場合、レスポンスが正常に返されることができず、Httpエラー400が発生します。

## Httpエラー400の対策｜どのようにHttpエラー400を解決？

それでは、Httpエラー400が起きる場合、どのように対処すれば良いのでしょうか？ブラウザを使ってページにアクセスする時にこのHttpエラー400エラーが発生する場合、対策は次のようになります：

### ブラウザでHttpエラー400の対策
ブラウザで「Http error 400」エラーが発生して、正確にページを開けいない場合、次の対策でこのエラーを解消することができると思います。

**⒈送信されたURLの確認**：入力ミスがないようページのURLを確認します。特にURLの中で使用されている?と&の記号の使い方が間違わないように確認しておきましょう。

- ? (クエスチョンマーク)は、クエリ文字列の開始を示す記号として、URLのパス部分とクエリ文字列の境界を表しています。
例: http://example.com/search?keyword=cat

- その一方で、&記号はクエリ文字列内でパラメータを区切るために使用する記号になり、1つ目のパラメータと2つ目のパラメータの間に置かれています。
例: http://example.com/search?keyword=cat&page=2

**⒉ブラウザのキャッシュをクリア**：キャッシュファイルが破損していることもHttpエラー400の原因になりますので、ブラウザの閲覧履歴の消去機能を使って、ブラウザキャッシュを消去しましょう。

**⒊ブラウザのCookieを削除**：キャッシュをクリアしても、Httpエラー400が解消されない場合、同じく閲覧履歴の消去機能を使って、Cookieをも削除してみましょう。

**⒋サーバーのファイルアップロード制限**：ファイルをページにアップロードする場合、サーバーのファイルアップロード制限を超える場合、Httpエラー400が起きる可能性があります。そこで、ファイルを圧縮したり、より小さいファイルをアップロードすれば、エラーが解消されます。

**⒌ブラウザの拡張機能を無効**：一部のブラウザ拡張機能は、サイトのCookieに影響を出しています。どの拡張機能が影響しているかがわからない場合、すべての拡張機能を無効にしてから、このページに再アクセスすることがお勧めです。

### APIのHttpエラー400の対策
一般ユーザーとは異なり、開発者は、APIとのやり取り中に、Httpエラー400がよく発生します。Httpエラー400が発生すると、APIのリクエストを送信して、レスポンスが正常に返されません。400エラーを解決するには、主に以下のような対応を行うと良いでしょう。

**エラーメッセージを確認**
- 可能な限り詳細なエラーメッセージが返されている場合がある
- 必須パラメータ不足、データ型不一致などのヒントが得られる

**リクエストの内容を確認**
- HTTPリクエストのヘッダーやボディが仕様に沿っているか調べる
- パラメータ名、フォーマットなどをAPIの仕様書と照らし合わせる

**APIプロバイダーに相談**
- 自分で判断できないエラーの場合、API提供元に相談する
- 仕様書の間違いやバグの可能性もある

**クライアントアプリケーションの修正**
- 送信しているリクエストの作成部分を見直し、記述ミスがないか確認
- 無効なリクエストが送信されないよう、バリデーションを追加する

**テストを行う**
- 修正後は必ず動作確認とテストを行い、400が解消されることを確認する

## APIとのやり取り、APIのテストが簡単に行えるApidog

Httpエラー400を解消するために、APIから返されたエラーメッセージやAPI仕様書を参照して、リクエストの内容などを適正してリクエストを再送信するというAPIとのやり取りが不可欠です。また、修正後でも動作確認のためにAPIのテストが必要だと思います。そこで、使いやすいAPI管理ツールがあれば、作業をより楽にしたりすることができます。

ここで[Apidog](http://www.apidog.com/jp/?utm_source=opr&utm_medium=a2takuya)というAPI管理ツールを開発者の皆さんにお勧めしたいと思います。[Apidog](http://www.apidog.com/jp/?utm_source=opr&utm_medium=a2takuya)を使うことで、直感的なGUIでAPIリクエストを送信したり、APIをテストしたりすることができます。また、リクエストを再利用するために、リクエストを保存したり、リクエストとレスポンスの情報に基づいてAPIドキュメントを生成することもできますので、非常に便利です。

![apidog-request-400.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3877124/c37b4887-8a4f-23ce-9bfb-d6e4f7e03b93.png)

## まとめ

この記事では、HTTPエラー400について詳しく解説しています。HTTPエラー400はクライアントからのリクエストに何らかの誤りがあったことを示すステータスコードで、サーバー側がそのリクエストを拒否したことを意味します。

実際には、400エラーはAPI側のインターフェース仕様に対してクライアントのリクエストが適合していないことに起因していることが多く、APIのエラーと捉えることができます。Webサイトで発生する400エラーも、内部的にAPIを利用している場合はAPI側のエラーが関係しているケースがよくあります。

ブラウザでHTTPエラー400が発生しても、APIとのやり取り中にHTTPエラー400が発生しても、本文では適切な対策が見つけられると思いますので、ぜひ本文の内容を参照して、HTTPエラー400を解消してみましょう。

今回は以上になります！
最後まで見ていただきありがとうございました！
では、また次の記事で～！