HTTP get请求的格式

时间:2014-01-17 21:11:15

标签: http get http-headers

我正在编写一个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或其他事情。

1 个答案:

答案 0 :(得分:4)

您所指的是网址的查询部分,如section 3.4URL specification中所定义,section 3.2HTTP specification允许。

在请求的URL中传递参数不是在HTTP请求中发送参数的唯一方法。另一个选项是在application/x-www-form-urlencoded请求中使用multipart/form-dataPOST内容类型,该请求由HTML 4.01规范的section 17.13.4和HTML5的section 4.10.22定义规范,例如:

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--