HTTPヘッダー値の最大値?


326

HTTPヘッダーの許容最大許容サイズはありますか?もしそうなら、それは何ですか?そうでない場合、これはサーバー固有のものですか、または任意のサイズのヘッダーを許可するために受け入れられている標準ですか?

回答:


316

いいえ、HTTPは制限を定義していません。ただし、ほとんどのWebサーバーは、受け入れるヘッダーのサイズを制限しています。たとえば、Apacheではデフォルトの制限は8KB ですが、IISでは16Kです。413 Entity Too Largeヘッダーサイズがその制限を超えると、サーバーはエラーを返します。

関連質問:ユーザーエージェント文字列はどのくらい大きくできますか?


10
この回答は、サーバーが許容する最大ヘッダーサイズを示しています。しかし、Webサーバー(Apacheなど)が送信できる最大ヘッダーサイズはどれくらいですか?
パチェリエ

@Pacerier:これは、Apacheの場合は8175バイトですが、まだ検索中です。また、どのようなバックエンドからでもこのような制限に達した場合に役立つエラーメッセージが表示されることを期待しないでください。
ハクレ2013年

2
@hakre:IIRC、行全体で8K、ヘッダー行全体(ヘッダーの名前、空白、ヘッダーのペイロード)を数えます。
vartec 2013年

ヘッダーのカスタム最大サイズを定義する方法はありますか?
Sudip Bolakhe

おそらく、IISはSPNegoおよびKerberosプロトコルの要件のために16kに開放されており、それらは「Windows認証」によく使用されます。
Ronan Kerdudou

220

vartecが前述したように、HTTP仕様は制限を定義していませんが、多くのサーバーはデフォルトで制限を定義しています。つまり、実際には、下限は8Kです。ほとんどのサーバーでは、この制限はリクエスト行とすべてのヘッダーフィールド合計に適用されます(Cookieを短くしてください)。

nginxがデフォルトでシステムページサイズを使用することは注目に値します。これは、ほとんどのシステムで4Kです。この小さなプログラムで確認できます:

pagesize.c:

#include <unistd.h>
#include <stdio.h>

int main() {
    int pageSize = getpagesize();
    printf("Page size on your system = %i bytes\n", pageSize);
    return 0;
}

でコンパイルしてgcc -o pagesize pagesize.c実行し./pagesizeます。Linodeの私のubuntuサーバーは忠実に答えを4kと通知しています。


6
apache2の場合、URLの長さは各HTTPヘッダー行によって個別に制御されLimitRequestLineLimitRequestFieldSize適用されます。「...の合計」ではなく
Yves Martin

1
Cookieの個別の合計サイズ制限は4093バイトです。 stackoverflow.com/questions/640938/...
ジェフ・ロウリー

25
ページサイズを取得するためのコードを記述する必要はありません。端末から:getconf PAGESIZE
Ponytech

6
これはおそらく、この回答が書かれてから変更された可能性がありますが、リンクされたnginxページが回答と一致しません。nginxページは、デフォルトのバッファーサイズが8kであり、リクエストがデフォルトで4つのバッファーを使用できることを示しています(バッファーサイズ自体が、リクエスト行と各ヘッダーのサイズを制限します)。したがって、これはnginxが16〜32kの間のどこかを許可していることを示唆しています(1つの行を2つのバッファーに分割できないと想定しているため、バッファーがいっぱいにならない場合があります)。
リリーバラード

同じままであるApache 2.4の値を追加する:httpd.apache.org/docs/2.4/mod/core.html#limitrequestfieldsize:Apache 2.0、2.2,2.4:8K
Med Ali Difallah

5

セクション2.5で説明されているように、HTTPは、各ヘッダーフィールドの長さまたはヘッダーセクション全体の長さに対して事前定義の制限を設けていません。個々のヘッダーフィールドの長さに関するさまざまなアドホック制限が実際に見られますが、多くの場合、特定のフィールドセマンティクスによって異なります。

HTTPヘッダー値はサーバーの実装によって制限されます。Http仕様はヘッダーサイズを制限しません。

処理したいサイズより大きいリクエストヘッダーフィールドまたはフィールドセットを受信するサーバーは、適切な4xx(クライアントエラー)ステータスコードで応答する必要があります。このようなヘッダーフィールドを無視すると、密輸攻撃を要求するサーバーの脆弱性が増加します(セクション9.5)。

413 Entity Too Largeこれが発生すると、ほとんどのサーバーが4xxエラーまたは適切な4xxエラーを返します。

クライアントは、フィールドのセマンティクスがメッセージのフレーミングまたは応答のセマンティクスを変更せずにドロップされた値を安全に無視できるようなものである場合、クライアントが処理したいより大きい受信ヘッダーフィールドを破棄または切り捨てることができます。

上限のないHTTPヘッダーサイズは、サーバーを攻撃にさらしたままにし、オーガニックトラフィックを処理する能力を低下させる可能性があります。

ソース


2

最も人気のあるWebサーバーの制限は次のとおりです

  • Apache-8K
  • Nginx-4K〜8K
  • IIS-8K〜16K
  • Tomcat-8K-48K

1

また、多くのヘッダーの場合の502/400の理由は、サイズに関係なく多数のヘッダーが原因である場合があることもわかりました。ドキュメントから

tune.http.maxhdrリクエストのヘッダーの最大数を設定します。リクエストにこの値(最初の行を含む)より大きい数のヘッダーが含まれている場合、「400 Bad Request」ステータスコードで拒否されます。同様に、大きすぎる応答は「502 Bad Gateway」でブロックされます。広く展開されているApacheサーバーが同じ制限を使用していることを考えると、デフォルト値は101で、これはすべての用途に十分です。この制限をさらに押して、バグのあるアプリケーションが修正されるまでに一時的に動作するようにすると便利です。新しいヘッダーはセッションごとに32ビットのメモリを消費するので、この制限を高くしすぎないように注意してください。

https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#3.2-tune.http.maxhdr

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.