サーバーからの「400 Bad Request」は、なぜ起きる?――郵便配達のルールから紐解くHTTPの基本
こんにちは!ネットワークの世界へようこそ。
インフラエンジニアの現場で避けて通れない「エラーコード」。その中でも、特に初学者が頭を抱えるのが「400 Bad Request」ではないでしょうか。
ブラウザでURLを叩いた瞬間、真っ白な画面に無機質な数字だけが返ってくる……。これを見ると「サーバーが壊れたのかな?」と不安になりますよね。でも、安心してください。400番台のエラーは、サーバーのせいではなく「リクエストの出し方」に問題があるという、いわば「お作法」のエラーなんです。
今日は、この「400 Bad Request」の正体を、身近な「郵便配達」に例えて解き明かしていきましょう。
—
そもそもHTTPのリクエストって何?
HTTP(HyperText Transfer Protocol)は、Webブラウザ(クライアント)とWebサーバーが会話するための「共通言語」です。
皆さんがブラウザでページを開くとき、裏側ではこんなやり取りが行われています。
1. リクエスト: 「〇〇のページを見せて!」(ブラウザ)
2. レスポンス: 「はい、どうぞ!」(サーバー)
このとき、ブラウザは「ただ見せて」と言うだけでなく、封筒に宛先やルールを書いた「リクエストメッセージ」を送りつけています。400 Bad Requestは、この「封筒の書き方」が間違っていて、サーバーが「ごめん、何書いてあるか全然読めないよ!」と困惑している状態を指します。
—
なぜ「400 Bad Request」が起きるのか?
郵便配達に例えるなら、以下のような状況です。
1. 宛先が支離滅裂(リクエストラインの構文エラー)
郵便物には「どこへ送るか」という住所(URL)が必要です。しかし、その住所が「〒123-4567 〇〇市……(謎の文字列)」のように、郵便局のルールから外れた書き方だと、配達員は届けられませんよね。
2. ルール違反のヘッダー(不正なヘッダー形式)
封筒には「差出人は誰か」「どんな形式で送るか」を書く欄があります。ここに、本来入れるべきではない特殊な記号が入っていたり、ルール外の書き方をすると、サーバーは「この封筒、イタズラかな?」と判断して受け取りを拒否します。
3. ホストヘッダーの欠如
大きなマンション(サーバー)には、たくさんの住人(Webサイト)が住んでいます。「〇〇さん宛」という部屋番号が書かれていないと、管理人さんはどの住人に渡せばいいか分かりませんよね。これが「ホストヘッダー(Host: example.com)」という情報がない状態です。
—
デバッグのヒント:どうやって調査するか?
もし皆さんが開発中に「400 Bad Request」に出くわしたら、まずは「リクエストの中身」を疑いましょう。
Chromeデベロッパーツールを使ってみよう
1. ブラウザで `F12` キー(または右クリックから「検証」)を押します。
2. Network(ネットワーク) タブを開きます。
3. エラーになったリクエストをクリックし、Headers(ヘッダー) を確認します。
ここで注目すべきは、以下のポイントです。
- Request URL: URLにスペースや日本語がそのまま入っていませんか?(URLエンコードが必要な場合があります)
- Request Headers: `Host` フィールドは正しく設定されていますか?
- Cookie: クッキーが長すぎて、サーバーが許容するサイズを超えていませんか?
サンプルコードで確認
例えば、Node.jsでリクエストを投げる際に、ヘッダーに余計な改行コード(`\r\n`)が混じってしまうと、サーバーは構文エラーとして400を返します。
// 不適切なリクエストの例
const options = {
hostname: ‘example.com’,
port: 80,
path: ‘/’,
method: ‘GET’,
headers: {
// もしここに「不正な文字」や「予期せぬ改行」が混じると
// サーバーは「400 Bad Request」を返します
‘User-Agent’: ‘Mozilla/5.0 \n <--- ここに改行が入ると危険!'
}
};
---
最後に:エラーは「対話」の第一歩
「400 Bad Request」は、決して怖いものではありません。むしろ、サーバーが「君の言っていること、ルール違反だよ!ちゃんと直してまた送ってね!」と親切に教えてくれているサインなのです。
プロのエンジニアも、最初は何度もこのエラーに躓きます。エラーが出たときは、「封筒の書き方は合っているかな?」「ルール違反な文字は混ざっていないかな?」と、一つずつ丁寧に紐解いてみてください。
ネットワークの世界は、こうやって一つずつ「お作法」を覚えていくことで、少しずつ、でも確実に自由自在に操れるようになっていきますよ。
次回は、サーバー側が「そもそもそのページはないよ」と答える「404 Not Found」について深掘りしていきましょう。それでは、また!
コメント