HTTP请求URL不是HTTP请求标头的一部分吗?

Ema*_*sev 6 php http

以下是维基百科文章的摘录:

与仅将URL和标头发送到服务器的GET请求方法相比,POST请求还包括消息正文.

基于此,看起来URL与标题分开发送,但如果是这样,为什么我们使用header()PHP中的方法设置重定向到的URL?

header("Location: http://google.com");
Run Code Online (Sandbox Code Playgroud)

CaN*_*aRk 11

如果要从浏览器浏览URL,请键入URL.浏览器将URL放在HTTP REQUEST中,如下所示:

GET /path/to/resource.php?var=data1&othervar=data2 HTTP/1.1
Host: example.com
Connection: keep-alive
"empty line"
Run Code Online (Sandbox Code Playgroud)

然后网络服务器给你一个这样的答案:

HTTP/1.0 200 OK
Date: Fri, 02 Sep 2011 14:37:36 GMT
Server: Apache
Cache-Control: private, s-maxage=0, max-age=0, must-revalidate
Content-Encoding: gzip
Vary: Accept-Encoding
Content-Length: 149
Content-Type: text/javascript; charset=utf-8
Connection: keep-alive
"empty line"
"149 bytes of Response data"
Run Code Online (Sandbox Code Playgroud)

像"Header-Name:header_value\r \n"这样的每一行都是一个标题.
PHP标头函数在将响应发送到用户的浏览器之前为响应添加标头.
在您的示例中,标头是:

Location: http://google.com
Run Code Online (Sandbox Code Playgroud)

它在"空行"之前的最后一个标题之后添加(这是一行只包含\ r \n).
POST请求与GET请求不同,因为在"空行"之后有一个请求体:

POST /path/to/resource.php HTTP/1.1
Host: example.com
Connection: keep-alive
Content-Length: "number of bytes in the body"
"empty line"
variable=data&othervar=data2
Run Code Online (Sandbox Code Playgroud)

总之,HTTP请求是这样的:

  1. 请求/响应行(POST或GET随后URL和版本请求,HTTP版本随后响应代码和用于响应响应字符串)与\ r \n结束
  2. 请求/响应头(header-name:header_value\r \n)
  3. 空行(\ r \n)
  4. 响应/请求正文

PS.行总是由"\ r \n"字节关闭("空行"仅由这两个字节组成).

  • 不是真的,"GET ... HTTP/1.1"和"POST ... HTTP/1.1"是REQUEST ROW,其后是请求标头. (2认同)