web-dev-qa-db-ja.com

HTTP取得リクエストの形式

私はHTTPサーバーを書いています(自分自身を教育することだけを目的としています)。

典型的なGETリクエストは次のようです。

GET /?a=1&b=2 HTTP/1.1 
Host: localhost    
User-Agent: my browser details
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8    
Accept-Language: en-gb,en;q=0.5    
Accept-Encoding: gzip, deflate    
Connection: keep-alive

送信されている変数を確認できるのは最初の行だけです。変数とその内容を取得するための正規表現を作成するのは簡単ですが、もっと簡単な方法があるかどうか疑問に思っています。 url?first_variable=first_value&second_variable=second_valueのアイデアはプロトコルの一部であり、何らかの形で特別であると常に思っていたので、私は尋ねます。しかし、私が見る限り、これは当てはまらず、url$first_variable-first_value?second_variable-second_valueなどを実行することもできます。

7
rlms

あなたが参照しているのは、 RL仕様セクション3.4 で定義され、 セクション3.2 で許可されているURLのクエリ部分です。 HTTP仕様

ただし、要求されたURLでパラメーターを渡すことは、HTTP要求でパラメーターを送信する唯一の方法ではありません。もう1つのオプションは、HTML4.01仕様の セクション17.13.4 で定義されているように、POSTリクエストでapplication/x-www-form-urlencodedまたはmultipart/form-dataコンテンツタイプを使用することです。 セクション4.10.22 HTML5仕様の例:

POST / HTTP/1.1 
Host: localhost    
User-Agent: my browser details
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8    
Accept-Language: en-gb,en;q=0.5    
Accept-Encoding: gzip, deflate    
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 7

a=1&b=2
POST / HTTP/1.1 
Host: localhost    
User-Agent: my browser details
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8    
Accept-Language: en-gb,en;q=0.5    
Accept-Encoding: gzip, deflate    
Connection: keep-alive
Content-Type: multipart/form-data; boundary=myboundary

--myboundary
Content-Disposition: form-data; name="a"

1
--myboundary
Content-Disposition: form-data; name="b"

2
--myboundary--
4
Remy Lebeau