未分類

400エラーは誤ったクライアント要求によるサーバー処理の失敗!

Webアクセスにおける400エラーはクライアント要求に問題があり処理できない状態のこと。クライアントエラーのうち400番台のどのエラーにも当てはまらないケースなので、原因の特定がしにくいのすが、本記事を参考に問題を解決してください。

400エラーはクライアント要求に問題があり処理できない状態

Webサイトを閲覧したり、Webアプリを動かしているときは、ユーザー側のデバイスではWebブラウザなどのクライアントソフトとWebサーバが、インターネット上で、HTTPという通信規約でやり取りを行ってデータを送受信しています。

基本的には、クライアントからデータ送信の要求(リクエスト)を行い、Webサーバは、それに対応する応答(レスポンス)データを作成して返却します。このやり取りの成否はHTTPステータスコードで通知されます。

400エラーは、このやり取りがエラーであるHTTPステータスコードのひとつで、具体的には、クライアントのリクエストに問題があってWebサーバが正常にレスポンスを返せないことを示すものです。400エラーはBad Requestといわれます。

クライアントエラーのうち400番台のどのエラーにも当てはまらないケース

上記で説明したHTTPステータスコードが400番台のエラーは、クライアントからの要求に対して正常な応答を返すことができない場合にエラー理由を示すために返されます。具体的には以下のようなエラーがあります。

  • 401 Unauthorized:リクエストに含まれるやパスワードの誤り
  • 403 Forbidden:アクセス権がないものにリクエストを送信
  • 404 Not Found:リクエストされたページが存在しない
  • 408 Request Timeout:リクエストが既定の時間内に処理できない

そして、400エラーは、上記以外のリクエストに関する原因で正常にレスポンスを返せないときに返却されるエラーコードなのです。

400エラー 「Bad Request」の原因

400エラー(Bad Request)はクライアントからのリクエストに誤りがあるために、サーバーが正常なレスポンスを返せないというエラーでした。以下では、リクエストの主な誤りとなる原因について説明します。

URL文字列の構文エラー

クライアントからWebサーバーに送るリクエストにはURLやURLパラメターを指定します。URLやURLパラメタには構文(書き方)規則があり、この構文規則に従って入力することが必要です。構文規則に違反する記述の場合は400エラーが返されます。

例えば、URLの記述に利用できる文字セットは決まっており、既定の文字セットに含まれない文字を入力するとエラーになります。具体的には"{”などは使えません。

構文規則通りに記述しない場合も400エラーとなります。具体的には、空白の文字コードは%20ですが、この前後に余計な文字が付属していた場合は400エラーとなります。

ブラウザキャッシュやクッキーの破損

Webアクセスでは処理を高速化するためキャッシュやクッキーが利用されています。キャッシュやクッキーは、以前に行ったリクエスト・レスポンスのないようなその際に使用する個人情報をデバイスのメモリやファイルに記憶しておき、毎回サーバーに問い合わせに行かなくても処理できるようにするものです。クッキーは

このキャッシュやクッキーが破損などで正常に読み込めない場合も400エラーが発せします。

DNSルックアップキャッシュ

Webサーバにアクセスするには、いわばWebの住所ともいえるURLやドメイン名をWebサーバのネット上の識別子であるIPアドレスに変換する必要があります。

DNSサーバはこの返還処理を行うためのサーバで、リクエストを発出する都度アクセスされます。このDNS処理を高速化するためDNSデータをデバイスのローカルキャッシュに保存しておき、何度もDNSサーバに問い合わせなくても済むようにしています。

このDNSキャッシュに名前の不一致などの不具合があると、400エラーが返されます。

ファイルサイズがサーバーの制限を超過

クライアントからWebサーバーにファイルを送り出すことをファイルのアップロードと呼びます。アップオードできるファイルのサイズにはサーバによって上限が決まっており、この上限を超えるファイルをアップロードしようとすると400エラーが発生する場合もあり得ます。

一般的なサーバー異常

クライアントからWebサーバにアクセスしている際にサーバーに何らかの異常が発生して正常なレスポンスが得られない場合も400エラーが発生可能性があります。

なお、サーバー以上の場合は、クライアント側ではサーバの復旧を待つしか手がありません。

400エラー 「Bad Request」の解決方法

400番台のエラーは400エラー以外はエラー要因ごとに番号が付いていますので、その要因を手掛かりにエラー原因を絞り込むことも可能です。しかし、400エラーの場合は、エラー画面からはエラーに関する何の情報も得られません。FirefoxとSafariでは、空白のエラー画面しか表示されないため、400エラーであることもわからないかもしれません。

以下では、上記で説明した400エラー発生原因ごとにその解決方法を説明します。

送信されたURLの確認

まずは、400エラー発生時にクライアントからサーバに送出したURLに間違いがないかを確認してみましょう。確認すべき項目には以下のようなものがあります。

  • URLに不要な文字や使用が許可されていない文字が含まれていないか
  • スラッシュ(/)や特殊文字のエンコードに間違いがないか
  • アクセスしたいドメイン名やページに間違いがないか

など

ブラウザーキャッシュのクリア

デバイスに保存されているキャッシュデータが破損などしている場合は400エラーの原因となります。

キャッシュデータには、HTMLファイル、JavaScriptファイル、各種のテキストや設定ファイル、CSSファイル、画像・動画・音声といい多メディアデータ、XMLやJSONで利用しているデータファイルなどさまざまなものがあります。

ブラウザのキャッシュデータをクリアして、サーバから最新のデータをダウンロードしてみましょう。

なお、キャッシュをクリアする手順はブラウザごとに異なっていますが、履歴のクリアから行うことが多いようです。

ブラウザークッキーのクリア

Webサイトにアクセスる場合には、クッキーもデバイス側に保存されます。これにより、毎回IDやパスワードを入力しなくてもサイトにアクセスできるのです。一方、クッキーが破損していたり期限切れで古くなっている場合は、サーバにアクセスできず400エラーとなることがあります。

この場合は、クッキーを削除して、再度IDやパスワードを入力するなどのログイン操作から始めてみましょう。

ファイルサイズの最適化

アップロードするファイルサイズがサーバで規定する上限を超えている場合は400エラーが発生します。この場合は、ファイルサイズの最適化を行ってファイルサイズを圧縮してからアップロードを試してみてください。

ファイルサイズの最適化(圧縮)には、多くの無料のソフトが公開されていますので、それらを利用するとよいでしょう。また、Webサイトを作成・更新する場合は、ファイルサイズの圧縮を行う習慣をつけておくと、自分のサイトにアクセスるユーザーに親切です。

DNSキャッシュのクリア

デバイスに保存しているDNSキャッシュが破損したり古くなって矛盾が生じている場合も400エラーが発生します。この場合は、DNSキャッシュをクリアしてから再度リクエスト送出してみましょう。

なお、DNSキャッシュをクリアする手順は、WindowsやMacの設定操作などを参照してください。

ブラウザー拡張機能の無効化

ブラウザーには操作に便利なように各種の拡張機能が装備されており、各自で自分に合った拡張機能を有効にすることができます。しかし、この拡張機能が原因で400エラーが発生することがあります。たとえば、拡張機能によってクッキーが正常に動作しないことが考えられます。

この場合は、いったん拡張機能を無効にしてからリクエストを送出してみてください。正常レスポンスが変ええてくるようであれば、以降は、拡張機能の使用を見合わせましょう。

要求(リクエスト)と応答(レスポンス)とWEBサイト

WordPressなどのツールの普及により、プログラミング初心者であっても、ホームページの開設やブログを書くことができるようになっています。しかし、ホームページやブログをより見栄えよくしSEOを高めるにはWebプログラミングの知識が必要となります。ここでは、Webプログラミングの基本的な用語や知識を説明します。

サーバーとクライアント

従来は、自分のパソコンなどにプログラム本体をインストールし、パソコンなどのローカル環境の中でプログラムを実行していました。

しかし、クラウドが普及した現在では、クラウド側でプログラムが実行され、PCやスマホなどのブラウザでプログラムへの指示や結果の受信を行うというWebプログラミングが一般的となっています。

Webプログラミングモデルでは、クラウド側でプログラムを実行しているコンピュータをサーバ、PCやスマホなど手元で操作するための機器をクライアントと呼びます。

要求(リクエスト)と応答(レスポンス)

Webサイトの画面を表示するには、クライアントからWebサイトのURLをサーバに送って、サーバから画面に相当するHTMLファイルをダウンロードします。

このようにクライアントからサーバにリクエスト(要求)を出し、サーバはクライアントにレスポンス(応答)を返すことの繰り返しでプログラムが実行されているのです。

パラメーターとはサーバーに受け渡すデータ

クライアントからの要求を伝えるための手段としてパラメーターというものがあります。これは、リクエストの中にパラメーターを指定することで、例えばダウンロードしたいデータのIDを指示したり、データベースの登録するデータを指定したりするのです。

リクエストの種類

クライアントからの要求をリクエストと呼びますが、リクエストを送る方法にはGETとPOSTの2種類があります。

GETメソッド

GETメソッドは、URLの末尾に上記で説明したパラメーターを追記してサーバに送る方法です。URLとパラメーターは?で区切られ、パラメタはパラメタ名とパラメタの値を「=」で対としたパラメタセットを「&」で複数記述できます。

POSTメソッド

ユーザーやパスワードなどの個人情報をサーバに送る場合、GETメソッドを使うとそれらの値が丸見えになってしまうリスクがあります。これを避けるため、パラメタはURLに表示されない送信方法としてPOSTメソッドがあるのです。

なお、フォーム再送信の確認画面を表示したくない場合はPOSTメソッドは不向きです。

まとめ

WebアクセスやWebアプリの実行はクライアントとサーバ間でリクエストとレスポンスの繰り返しで処理が進んでいます。

リクエストに問題がある場合、400エラーが発生してしまいます。400エラーが発生した場合は、原因を特定し、解決法を適用することが必要ですが、本記事も参考にしてみてください。