HTTP请求URL是不是HTTP请求报头的一部分


Is the HTTP request URL not part of the HTTP request header?

摘自维基百科的一篇文章:

与只有URL和头的GET请求方法相反发送到服务器,POST请求还包括消息体。

基于此,看起来URL是从头中单独发送的,但如果是这样的话,为什么我们在PHP中使用header()方法来设置要重定向到的URL ?

header("Location: http://google.com");

当你想从浏览器浏览一个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"

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

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"

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

Location: http://google.com

在"空行"(即只包含'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
总之,HTTP请求是这样发出的:
  1. 请求/响应行(POST或GET后接url和http版本的请求,http版本后接响应代码和响应字符串的响应)以'r'n
  2. 结尾
  3. 请求/响应标头(header-name: header_value'r'n)
  4. 空行('r'n)
  5. /请求的响应体

p。行总是以"'r'n"字节结束("空行"仅由这两个字节组成)。

header() 在文件中添加头文件

所以如果你想设置Content-Type:
header("Content-type: text/javascript");

等等…

Location只是另一个头,您可以设置和/或更改php header()函数

From the doc:

第二个特例是"Location:"标头。它不仅将这个报头发送回浏览器,而且还将一个REDIRECT(302)状态码返回给浏览器,除非已经设置了201或3xx状态码。

有响应头和请求头

http://en.wikipedia.org/wiki/List_of_HTTP_header_fields

在PHP中设置location头作为对请求的响应。浏览器查看响应并采取相应的行动。

所以你回到原来的页面位置头告诉浏览器去别的地方