HTTP get请求的格式

rlm*_*lms 7 get http 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
Run Code Online (Sandbox Code Playgroud)

我能看到发送变量的唯一地方是第一行.编写一个正则表达式以获取变量及其内容是很容易的,但我想知道是否有更简单的方法.我问,因为我一直认为这个概念url?first_variable=first_value&second_variable=second_value是协议的一部分,并且在某种程度上是特殊的.但是,据我所知,情况并非如此,我也可以做同样的url$first_variable-first_value?second_variable-second_value事情.

Rem*_*eau 5

什么你指的是一个URL的查询部分,如在定义部分3.4所述的URL规范,并且通过允许第3.2节所述的HTTP规范

但是,在请求的 URL 中传递参数并不是在 HTTP 请求中发送参数的唯一方法。另一种选择是在请求中使用application/x-www-form-urlencodedmultipart/form-data内容类型POST,如HTML 4.01 规范的第 17.13.4和 HTML5 规范的第 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
Run Code Online (Sandbox Code Playgroud)

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--
Run Code Online (Sandbox Code Playgroud)

  • 所以只是澄清一下,使用`?`、`=` 和`&` 背后_没有_任何技术意义,但它们在URL 规范中,这就是为什么它们是标准的原因? (2认同)