「400 エラー」とは?原因や解決方法、意図的に発生させる方法を解説
Webサイトを閲覧していると、ときどきエラーに出くわします。
そこでは画面にエラーメッセージが表示されていることが多いのですが、メッセージの種類は多様なため、把握しきれない人も多いのではないでしょうか。
Webサイトのエラーメッセージのひとつに
「400 エラー(400 Bad Request)」
というものがあります。
これは、送信したリクエストに何らかの問題がある際に表示されるもので、遭遇する頻度が比較的高いものです。
多くはこちら側に理由がある場合が多いので、エラーの内容を知っておくことで、遭遇しても対処できるようになります。
この記事では、400エラーが何か、その原因と対処法を解説します。
合わせて、Webサイト製作をする人のために、意図的に発生させる方法も紹介します。
400 エラーとは
「400 エラー」とは、何を指すものなのでしょうか。
ここでは、この表示の意味と例、そして「400番台エラー」について解説します。
400 Bad Request
正式には「400 Bad Request」と呼ばれるこの現象は、主に閲覧する側のミスによって起こるものです。
送信したリクエストに何らかの不具合があるため、リクエストが完了されないときにこの現象は起こってしまいます。
リクエストとは、サイトを閲覧する人が、サーバーに対して行う要求のことです。
例えば、URLそのものも1つのリクエストです。
「このURLに該当するページの内容をください」
というリクエストになっているのです。
このリクエストが不正な際に出るのも「400 Bad Request」の原因です。
(具体的な原因は後述します)
基本的には処理の前段階で発生するため、クライアント側で対処する必要があります。
原因はさまざまですが、入力内容が間違っている、キャッシュが破損している、送信したいものの容量が大きすぎるなどが主な原因です。
400 エラーの表示例
起こっている問題がどのように表示されるのかは、使用するブラウザによって異なります。
多くのブラウザでは、エラー発生時に「This page isn’t working」「HTTP ERROR 400」など、起こっているトラブルの種類を伝えるメッセージが表示されます。
しかしiPhoneの標準ブラウザであるsafariやFirefoxでは、白い画面が表示されるだけで、どのようなエラーが発生しているのかを教えてくれません。
その場合は、起こっているトラブルの内容をこちら側で見極める必要があります。
このように、同じ現象であっても使用している環境が異なれば、表示されるものも違ってきます。
そのほかの400番台エラー
400エラー(Bad Request)は「400番台エラー」というもののうちのひとつで、正確には「HTTPステータスコード」と呼びます。
このカテゴリーは、基本的にクライアント側のリクエストに要因があるときに発生するエラーの総称です。
このカテゴリーでもっとも遭遇するのは、リクエストしたWebページが存在しないときに発生する「404 Not Found」でしょう。
そのほか、ページへのアクセス権がない
「401 Unauthorized」
や、アクセスが禁止されている
「403 Forbidden」
サーバーが混雑していて時間内に処理が完了しなかった
「408 Request Timeout」
などが有名です。
400 エラーの原因
この現象が起こってしまう原因はさまざまですが、多くはクライアント側のリクエストが理由となります。
ここでは、この現象の原因としてよくあるものを、いくつか紹介します。
URLの構文ミス
指定したURLになんらかの誤りがある場合、400エラーが生じます。
存在しないURLを入力した場合は異なった表示がされますが、URLの構文にミスがあると、リクエストが処理されません。
特にURLのエンコードミスが原因であることが多く、「%%」や「{}」といった、コードの重複や本来使用されない文字がURLに含まれていると、この現象に遭遇します。
ブラウザキャッシュやCookieの破損
アクセスしたサイトの情報を一時的に保存したものをブラウザキャッシュと呼びます。
この情報が破損している場合にも問題が起こってしまいます。
同じく、アクセスデータなどを記録したCookieの期限が切れていたり破損していたりするときにも、正常に画面が表示されません。
例えば、あるWebサイトにログインしていて、しばらく時間が経ったあとに再度サイトを閲覧しようとしたときに遭遇します。
これはログイン権限を保存したCookieの期限が切れたことが原因で、ログインをやり直すことで解決します。
データサイズが大きすぎる
サイズの大きいものを送信しようとしたときにも、同じことが生じます。
開発側で設けられた制限を超えた容量のファイルをアップロードすると、処理が完了しません。
この場合は、分割や圧縮などでサイズを小さくすることで解決可能です。
DNSキャッシュの不一致
DNSキャッシュで記録された情報が、何らかの理由で設定されている情報と一致しないと、400エラーが起こります。
DNSキャッシュとは、Webサイトを初めて閲覧したとき、IPアドレスとドメイン名を一時的に保存することで、短時間の連続した問い合わせを回避する仕組みです。
このときの検索処理はローカルに保存されますが、それが本来設定された情報との不一致を起こすことがあります。このトラブルは、こうした要因でも発生します。
サーバーエラー
400エラーは基本的にクライアント側のトラブルですが、ごくまれに、サーバー側のトラブルによって起こることもあります。
込み合っていたり、設定に間違いがあったりといった理由でメッセージが表示されます。
サーバー側の問題で生じているものかどうかを確かめるのには、別のブラウザやデバイスでアクセスすることが有効です。
別の環境を用いてアクセスしてもおなじ結果が表示される場合はこうしたことが原因の可能性が高く、残念ながらこちらの側からは解決できません。
400 エラーの解決方法
このトラブルに遭遇した場合、どのように解消すればよいのでしょうか。
ここでは、ユーザー側でおこなえる方法を解説します。
URLが正しいか確認する
この現象の原因として、URLの間違いはとても多いです。
とくに手入力した場合は入力ミスが発生しやすく、問題が起こってしまいます。
まずは入力した内容が正しいかを確認することが大切です。
ポイントとしては、区切りがスラッシュか、似ている記号を取り違えていないか、必要ない文字や記号が入力されていないかなど、チェックします。
特に、日本語のURLの場合は、URLエンコードされている場合
「あ」→「%E3%81%82」
このような変換がされています。
結果、非常に長いURLとなっている可能性があるので、しっかりと誤字脱字が無いかをチェックしましょう。
ブラウザキャッシュ・Cookieを削除する
何らかの理由で、ブラウザに保存されているキャッシュが破損していることがあります。
その場合は、こちらを削除することで400エラーの解消が見込まれます。
やり方としては、ブラウザの設定画面から情報を削除することができます。
それでも解決しないときは、Cookieが破損している可能性があるため、Cookieの削除を試してみましょう。
こちらについても、そのほかの情報と同じように削除が可能です。
ファイルサイズを小さいものに変更する
この問題は、サーバー側で設定されたファイル制限を超えた容量のデータを送信したときにも発生します。
この場合は、送信するファイルサイズを小さいものに変更することで解決可能です。
アップロードできる容量の制限は環境によって異なるため、送信したいファイルのサイズが制限内かどうかを確認することが大切です。
DNSキャッシュを削除する
URLが正しく、先ほど紹介した方法を試してみても解消されず、他の端末では同じことが起こらないときには、DNSキャッシュが破損してる可能性があります。
これがが原因で問題が起こっている場合は、DNSキャッシュを削除することで解決できます。
ローカルに保存されたDNSデータが破損していたり期限がきれていたりすると、DNSデータの不一致を起こし、正常に処理がおこなわれません。
DNSキャッシュの削除方法は環境によって異なり、OSの設定画面やコマンドプロンプトから削除する必要があり、こうした操作に慣れていない人には少し難しいかもしれません。
しかし、この解決方法はさまざまな場所に影響を与えるため、実行するときは十分に注意してください。
400 エラーを意図的に発生させる方法
Webサイト製作をしている人の中には、設定を確かめるために、わざと起こしたいという人もいます。
なので最後に、この現象を意図的に起こす方法を解説します。
さまざまな方法がありますが、ここでは主要な方法を紹介します。
URLエンコードを不正なものに改変
URLエンコードを不正なものに改変することで、意図的に発生させる事ができます。
例えば、URLエンコードの「%」は単独で用いるものですが、これを「%%」と続けて書くか、「%」自体を表す「25」を付けて記述すると、エンコードが正常に処理されません。
HTTPリクエストを長大にする
HTTPリクエストを長大にすることでも、この現象を起こさせることが可能です。
WindowsのツールであるIISでは、ヘッダーの上限が14k byteとなっていますが、これを超えたものを送信すると、正常な処理がおこなわれません。
不正なRiquest Lineを送信
HTTPリクエストの冒頭、Riquest Lineの文法が間違っているときにも、同じトラブルが発生します。
Riquest Lineは「メソッド・URL・バージョン」の順で記載します。
この順番が間違っているか、いずれかの要素が欠けている状態で送信することで、意図的に起こすことができます。
安全なWEB開発はAMELAに
今回は「400 Bad Request」について見てきました。
エラーは正しく理解し、正しい対処をすることが重要になります。
WEBサイトの設計においても、これらのエラーに対して、オリジナルのデザインを入れるなどの対応をすることで、ユーザーエクスペリエンスが向上する可能性があります。
AMELAでは業務用のシステムだけではなく、マーケティングにつながるWEBサイトの開発も承っています。
単にサイトを作るだけなら、今の時代無料で作ることが可能です。
しかし、それをデータとして蓄積し、分析をするとなると、しっかりとした開発が必要です。
「本当はサイトを活用して、こういうことがしたい」
そういうビジネスに関する理想をお伝えいただければ、最適な提案をさせていただきます。