当你想要在浏览器中浏览一个URL时,你会键入一个URL。浏览器将URL放入HTTP请求中,如下所示:
GET /path/to/resource.php?var=data1&othervar=data2 HTTP/1.1
Host: example.com
Connection: keep-alive
"empty line"
然后,一个 Web 服务器会给你这样的回答:
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 函数在将响应发送到用户浏览器之前会向其添加一个头部。
在您的示例中,头部是:
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请求是这样进行的:
- 请求/响应行(POST或GET后跟请求的URL和HTTP版本,响应中HTTP版本后跟响应代码和响应字符串),并以\r\n结尾。
- 请求/响应头(header-name: header_value\r\n)。
- 空行(\r\n)。
- 响应/请求主体。
PS. 行始终由"\r\n"字节关闭(“空行”只由这两个字节组成)。