[2] 要求行は、 要求メッセージの最初の行 (開始行) であり、要求メソッドと要求対象とプロトコルの版を表すものです。
[4] 要求行は、メソッド、 SP、要求対象、SP、 HTTPの版、CRLF を順に連ねたものです。 >>3
[504] ただし HTTP/0.9 では、メソッド、SP、要求対象、CRLF です >>10。 (HTTPの版がありません。)
[6] 要求対象は、要求を適用する対象資源を識別します >>3。
[5] メソッドは、対象資源に対する要求メソッドを示します >>3。
[11] HTTP/0.9 ではメソッドは GET
のみとなっています >>10。
それ以外の版では、任意の要求メソッドを指定できます。
[7] HTTPの版は、送信者が対応している最大のプロトコルの版を表します。 送信者はこの版に従い要求メッセージを生成することとなります。
[402] 要求行の長さに上限はありません >>3。しかし後述の通り、 受信者が任意の長さの要求行を処理する義務はありません。 送信者はむやみに長い要求行を送っていいわけではありません。
[8] 受信者は普通要求行を空白によって各部分に分割することで構文解析します >>3。仕様に適合するメッセージにおいては、メソッド、 要求対象、HTTPの版のいずれにも空白は含まれません。 しかし実際には空白を送信してくる利用者エージェントもあります >>3。 メソッドやHTTPの版には決して空白が含まれませんから、 前後を除去して残った部分を要求対象とすれば、曖昧無く解釈はできます。
[9] 非妥当な要求行を受け取った場合には、
400
を返すか、
301
で適切に符号化した要求対象にリダイレクトするかのいずれかにより応答するべきです。
リダイレクトなしで自動修正して処理するべきではありません。 >>3
[506] 構文上 SP の箇所は、空白1つ以上を区切りとみなして構文解析して構いません。 また、最初と CRLF 前の空白は無視して構いません。ここで空白は、 SP、HTAB、VT、FF、CR のことをいいます。 >>505
[17] Apache は 0x09 や 0x0C も空白として扱います。 nginx は 0x20 だけ空白とします。
[507] 改行については、メッセージの項を参照してください。
[503] 実際上要求行の長さには色々な制限が課されていますが、 最低でも8000オクテットの要求行には対応するべきです >>3。
[403] 実装しているどのメソッドよりも長いメソッド名を受信した鯖は、
501
を返すべきです >>3。
[502] 構文解析したい URI の長さを超える要求対象を受信した鯖は、
414
を返さなければなりません >>3。
[16] nginx も Apache も、先頭の 8192 バイトに要求行
(末尾の改行まで) が含まれないと、 414
応答を返します。
Apache は HTTP/1.1、nginx は HTTP/0.9 で返します。
[18] ChromeDriver はプロトコルの版が HTTP/1.1
でなければ、
直ちに接続を閉じます。 HTTP/1.0
や
HTTP/1.2
であってはなりません。 (古い版の ChromeDriver
はプロトコルの版を検査しておらず、何を指定しても HTTP/1.1
とみなしていたようです。)
[508] draft-aranda-dispatch-q4s-02 - The Quality for Service Protocol ( ( 版)) <http://tools.ietf.org/html/draft-aranda-dispatch-q4s-02#page-17>
POST
の payload body による引数の指定など代替策を用意しているでしょうが、 HTTP 仕様その他で一般的に機械的に適用できる対策はありません。)