【入門編】HTTPステータスコード411(Length Required)の発生条件 – HTTPプロトコル・通信規格実践ガイド

なぜサーバーは「長さ」を教えてくれないと怒るのか?HTTPステータスコード「411 Length Required」の正体

エンジニアの皆さん、こんにちは。ネットワークの世界へようこそ!

Webサイトやアプリを作っていると、ブラウザやツールから「411 Length Required」というエラーが返ってきて、「えっ、何がダメなの?」と困惑した経験はありませんか?

一見すると難しそうなエラーコードですが、実はこれ、「郵便物のルール」を知れば一発で理解できる、とても人間味のあるお話なんです。今日は、この411エラーがなぜ発生するのか、その裏側にあるネットワークの「お約束」を紐解いていきましょう。

—

荷物を送る時の「重さ」と「サイズ」の関係

想像してみてください。あなたは今、誰かに大きな荷物を送ろうとしています。

郵便局の窓口へ行ったとき、もしあなたが「これ、届けといて!」と、中身がどれくらいあるのか分からない未封のダンボール箱をポンと置いたら、受付の人はどう思うでしょうか?

  • 「中身がどれくらいあるのか分からないと、トラックの荷台に載せられるか判断できないよ!」
  • 「途中で箱が壊れて中身がこぼれたらどうするの?」

ネットワークの世界、特にHTTP通信における「POST」や「PUT」といった「サーバーへデータを送るリクエスト」も、これと全く同じなんです。

サーバーにとっての「Content-Length」

サーバーは、あなたから送られてくるデータを受け取るために、あらかじめ「どれくらいのメモリ(作業スペース)」を確保しておくかを計算しなければなりません。

そこで登場するのが `Content-Length` というヘッダーです。これは、サーバーに対して「今から送るデータは、合計でこれくらいのサイズですよ」と事前に伝える「送り状」のようなものですね。

もし、この「送り状」がないまま大きな荷物を送りつけたら、サーバーは「準備ができていないよ!」と困ってしまいます。そこで発生するのが、この 「411 Length Required(長さが必要ですよ)」 というエラーなのです。

—

どんな時にこのエラーが出るの?

基本的には、データを送るメソッド(POSTやPUT)を使うときに発生します。

  • POST: 新しくデータを作成する(掲示板への書き込みなど)
  • PUT: 既存のデータを更新・保存する

これらは「中身(ペイロード)」を運ぶことが前提のメソッドです。ブラウザなどは自動的に「今回のデータは500バイトです」といった情報をヘッダーに付与してくれますが、プログラムを書いているときや、手動でパケットを送るツール(`curl`など)を使っていると、この情報を書き忘れてしまうことがあるんです。

—

実践:エラーを再現してみよう

皆さんが普段よく使う `curl` コマンドで、意図的にこのエラーを起こしてみましょう。

Content-Lengthをわざと外してリクエストを送るコマンド例
-H でヘッダーを細工できますが、あえて指定しないことで発生させます
curl -X POST http://example.com/api/data \
-d “ここにデータが入ります” \
-H “Transfer-Encoding: chunked” # これを外してリクエストを送ると、サーバー側が許容しない場合に411が返ります

もし、あなたが接続しているサーバーが「厳格なルール」を設けている場合、`Content-Length` が見当たらないリクエストを受け取ると、即座にこう返してきます。

HTTP/1.1 411 Length Required
Content-Type: text/html
Connection: close

—

どう解決すればいいの?

解決策は非常にシンプルです。リクエストを送る際に、中身のサイズをちゃんと申告してあげるだけです。

もしプログラムでリクエストを送るなら、ライブラリのドキュメントを確認して、ヘッダーに `Content-Length` を含めるように設定しましょう。

// Node.jsなどで送る際のイメージ
const options = {
method: ‘POST’,
headers: {
‘Content-Type’: ‘application/json’,
‘Content-Length’: Buffer.byteLength(data) // ここでしっかりサイズを計算して付与!
}
};

—

まとめ:ネットワークは「思いやり」の積み重ね

「411 Length Required」というエラーは、サーバーが「効率よく、安全に」あなたのデータを受け取ろうとした結果、どうしても必要な情報を求めて発した「お願い」なのです。

インフラやネットワークの世界では、このように「相手(サーバー)が準備するために必要な情報を、いかに正確に伝えるか」というコミュニケーションが日々行われています。

エラーが出たときは、「サーバーが困っているんだな。何が足りないんだろう?」と一歩立ち止まって考えてみてください。そうすれば、パケットの向こう側にいるサーバーの気持ちが、少しずつ見えてくるはずですよ!

それでは、今日のネットワーク探検はここまで。また次回お会いしましょう!

コメント

タイトルとURLをコピーしました