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

时间:2011-09-02 14:29:13

标签: php http

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

  

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

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

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

3 个答案:

答案 0 :(得分: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"

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

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标头函数在将响应发送到用户的浏览器之前为响应添加标头 在您的示例中,标题为:

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. 回复/请求正文
  6. PS。行始终以“\ r \ n”字节关闭(“空行”仅由这两个字节组成)。

答案 1 :(得分:2)

header() 在文件中添加标题。

所以如果你想设置Content-Type:

header("Content-type: text/javascript");

等等......

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

来自doc

  

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

答案 2 :(得分:0)

有响应标头和请求标头

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

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

所以你转到原始页面,位置标题告诉浏览器去其他地方。