ウェブサイトの閲覧は、HTTPリクエストを送信し、サーバーが目的のリソースをブラウザに返すことで初めて可能になります。しかし、このリクエストを送信する過程で、何かしらも問題が生じると、今回ご紹介するHTTPステータスコード「411 Length Required」が表示されます。
「HTTP 411 Length Required」エラーは、サーバーがcontent-lengthヘッダーを要求しているにもかかわらず、リクエストでそれが指定されていない場合に起こります。したがって、解決方法は至ってシンプル。content-lengthヘッダーを設定すればいいのです。
「HTTP 411 Length Required」エラーの解決方法について、動画での解説もご用意しています
今回は、「HTTP 411 Length Required」エラーの原因と見つけ方、そして解決策を順にご紹介します。
「HTTP 411 Length Required」エラーとは
ユーザーがリンクをクリックしたり、URLを検索したりすると、その都度ブラウザからウェブサイトのサーバーにリクエストが送信されます。その後、サーバーはリクエストを処理し、要求されたデータを送信することで応答します。
通常目にすることはありませんが、サーバーは、要求されたデータと併せてHTTPヘッダーでステータスコードも送信します。リクエスト中に何か問題が発生すると、ブラウザ上にHTTPステータスコードが表示されます。
例えば、一般的なHTTPステータスコードに「400 Bad Request」があります。これは、一般的なクライアント側のエラーで、URLに誤りがあると発生します。
HTTPステータスコードは、以下の5つに分類されています。
HTTPステータスコードについて分かったところで、次は「411 Length Required」の原因について見ていきましょう。このエラーは、あまり一般的ではないため、遭遇すると困惑してしまう方も多いでしょう。
「411 Length Required」エラーは、content-lengthヘッダーがないためにリクエストが拒否されたことを意味します。サーバーがcontent-lengthヘッダーを要求している場合は、この情報なしにサイトにアクセスすることはできません。
「HTTP 411 Length Required」エラーの原因
クライアントとサーバーは、HTTPリクエストとレスポンスにHTTPヘッダーを設定することができます。「411 Length Required」のエラーコードは、クライアントエラーを示しており、リクエストヘッダーに問題があるということになります。
リクエストヘッダーを使用して、リクエストに関するコンテキストを設定し、サーバーがそのレスポンスを調整できるようにします。リクエストヘッダーには、以下のような情報を含めることができます。
- 送信元IPアドレスとポート番号
- コンテンツタイプ
- ブラウザの種類(ユーザーエージェント)
- リクエストされたURL
また、HTTPヘッダーは、entity-bodyのサイズも定義することができます。content-lengthの値を指定(10進数のオクテット数で識別)することで、サーバーに想定されるリクエストのサイズを伝えます。
例えば、ウェブページのデータの長さ(content-length)を確認するには、要素を右クリックし「検証」を選択します。「Network」の下に、レスポンスヘッダーに関する情報が表示されます。
通常、ほとんどのHTTPリクエストには、リクエストボディとcontent-lengthヘッダーの両方があります。しかしクライアントによっては、content-lengthを定義しないことも可能で、これはチャンク形式の転送エンコードに有用です。
「411 Length Required」のHTTPステータスコードを受け取った場合、サーバーがcontent-lengthヘッダーを要求していることを意味するため、リクエストの続行には、この値の定義が必要になる可能性があります。
「HTTP 411 Length Required」エラーの見つけ方
先にも触れた通り、「HTTP 411 Length Required」エラーは、クライアントエラーであるため、自分のサイトでこのエラーが発生しているかどうかがわからないことがあります。これを確かめるには、サイトのHTTPリクエストを監視します。
Kinstaアカウントをお持ちの場合は、MyKinstaでサイトのログをチェックし、直接HTTPリクエストの失敗を確認することができます。
まずは、MyKinstaにログインし、「サイト」に移動して、対象のウェブサイトを選択します。なお、リクエストの確認は稼働しているサイトでのみ可能なため、ローカル環境は選択しないようにしてください。
すると、基本情報が確認できる「情報」画面がページが表示されます。左側メニューから「ログ」をクリックしてください。
「ログビューア」に、サイトのエラーログが表示されます。ドロップダウンメニューから「access.log」を選択しましょう。
すると、サイトへのすべてのリクエスト(日付、時間、送信されたバイト数、ユーザーエージェント)が表示されます。また、各リクエストのHTTPステータスコードも確認可能です。
正常に処理されている場合、HTTPステータスコードは200になります。「411 Length Required」エラーが発生しているかを確かめるには、検索バーで「411」を検索してみてください。
「HTTP 411 Length Required」エラーを解決するには(4つの方法)
「HTTP 411 Length Required」エラーの有無は、サイトのログで確認することができますが、これはクライアントエラーであることを念頭に置いてください。
つまり、他の400番台のエラーと同様、ユーザー側の設定の誤りによって引き起こされるため、HTTPリクエストの編集が必要になります。以下、4つの解決方法を見ていきましょう。
1. 要求されたURLを確認する
まずは、400番台のエラーを修正する一般的な方法から試してみましょう。リクエストの情報を見直すことで、ブラウザが適切な認識を行えているかを確かめることができます。
400番台のエラーの場合、いずれのエラーであっても要求されたURLを見直すのが効果的です。サイトにアクセスするためにURLを手動で入力した場合は、タイプミスを確認するため、URLを再入力(コピー&ペースト推奨)してみてください。
URLに誤りがなく、エラーが表示されている場合は、キーワードと一緒に検索エンジンに入力してみるのも手です。例えば「site:kinsta.com speed up WooCommerce」と検索すると、WooCommerceストアの高速化に関するKinstaの記事がヒットします。
これが最も基本的なトラブルシューティングです。これで解決されない場合は、次のステップに移りましょう。
2. Content-Lengthヘッダーを設定する
「HTTP 411 Length Required」エラーに遭遇した場合、メッセージが示している通り、content-lengthヘッダーを設定するのが確実です。このエラーメッセージは、リクエストを処理するために渡すデータの長さ(Content Length)が必要であることを意味しているため、直接的な解決策になります。
例えば、example.comにPOSTリクエストを送信する場合は、以下の通りです。
curl --verbose -X POST https://example.com
content-lengthヘッダーの値は、リクエストに含まれるバイト数になります。このバイトは、2つの16進数で表され、桁数を2で割ることでコンテンツの長さを定義します。
例えば、「48656c6c6f21」は、16進数で12桁。この値を2で割ると、バイト単位に変換することができ、コンテンツの長さは6バイト(12÷2=6)ということになります。
このリクエストは、以下のようになります。
curl --verbose -X POST -H 'Content-Length: 6' https://example.com
Content-lengthを設定すると、411エラーは解消され、正しく処理されたことを示す200が返されるはずです。
3. ブラウザキャッシュをクリアする
content-lengthヘッダーを設定することで大抵の場合は解決しますが、万が一それでもエラーが続く場合には、他にも策はあります。
ウェブサイトに初めてアクセスすると、ブラウザによって特定のデータが保存されます。content-lengthヘッダーを設定してもエラーが消えない場合は、このキャッシュが原因になっている可能性があります。したがって、ブラウザキャッシュをクリアしてみてください。
Google Chromeの場合は、右上の縦三点リーダーをクリックし、「その他のツール」>「閲覧履歴データの削除」に移動します。
ポップアップ画面でが表示され、閲覧履歴、Cookie、キャッシュデータを管理することができます。「キャッシュされた画像とファイル」と、その他クリアしたいものがあれば選択し、「データを削除」をクリックします。
Safariの場合、ツールバーから「Safari」>「履歴を消去」を選択します。
次のポップアップ画面で、すべての履歴を削除するか、直近1時間のデータを削除するか、などの期間を選択することができます。選択後、「履歴を消去」をクリックして完了です。
Mozilla Firefoxでキャッシュをクリアする場合は、右上にあるハンバーガーアイコン(横線3本)を選択し、「履歴」を選択します。
次に「最近の履歴を消去」をクリックします。
「キャッシュ」とその他クリアしたいものがあれば選択し、「OK」をクリックします。
これで、「HTTP 411 Length Required」エラーが解決したかどうか、再度サイトにアクセスしてみてください。
4. 最近の更新または拡張機能を無効にする
もう1つの解決策は、ブラウザの拡張機能を無効にするというもの。時折、特定の拡張機能がブラウザに干渉し、リクエストを認識しなくなることがあります。最近インストールした拡張機能があれば、削除してみてください。
Chromeでは、先ほどのブラウザキャッシュのクリアと同様、メニューバーから「その他のツール」を選択し、今度は「拡張機能」をクリックします。
拡張機能の一覧から対象の拡張機能を削除します。または、右下のスライダーをクリックして無効化することも可能です。
また、ソフトウェアの更新がこのエラーを引き起こすこともあります。Windowsの更新プログラムを削除するには、設定アプリで「更新とセキュリティ」>「Windows Update」に移動します。
macOSの場合は、これより複雑な操作になり、更新をロールバックするには、更新前のTime Machineバックアップが必要です。このバックアップを使ってデータを復元してください。
なお、古いソフトウェアバージョンに戻すことで、重要な機能やバグ修正を失う可能性があるため、この方法はあくまで最終手段として実行してください。
まとめ
サーバーがHTTPリクエストを拒否すると、HTTPステータスコード「411 Length Required」が返されます。あまり一般的に見られないため、途方に暮れてしまう方も多いはずです。これは、content-lengthヘッダーを設定していないことで、サーバーから情報を引き出せないことを意味します。このエラーの解決策は、案外シンプルです。
411エラーを解決する方法は、以下の通り。
- 要求されたURLを確認する
- content-lengthヘッダーを設定する
- ブラウザキャッシュをクリアする
- 最近の更新や拡張機能を無効にする
訪問者がサイトにアクセスできる状態を保つためには、パフォーマンス監視を行うことが重要です。Kinstaのホスティングプランなら、業界トップクラスのAPMツールを無料で利用することができます。APMツールで外部からのリクエストを確認すれば、HTTPエラーの解決も簡単です。