报文格式
请求报文
1 | GET /somedir/page.html HTTP/1.1 |
第一行叫做请求行,其后继的行叫做首部行。首部行中,冒号左边的称为首部字段名,右边称为值。
请求行
- 方法字段
- GET:浏览器请求一个对象。
- POST:当用户提交表单时,HTTP客户常使用POST方法,表单中的值存放在实体体中。
- HEAD:类似于GET方法,当服务器收到一个HEAD请求时,将对用一个HTTP报文进行响应,但是不返回请求对象。
- PUT:用户上传对象到指定的Web服务器上的指定路径(目录)。
- DELETE:用户或应用程序删除Web服务器上的对象。
- URL字段:例子中的
/somedir/page.html
。 - 版本字段:例子中的
HTTP/1.1
。
- 方法字段
首部行
- Host:指明对象所在的主机。
- Connection: close告诉服务器不要使用持续连接,它要求服务器在发送完被请求的对象后就关闭这条连接。
- User-agent:指明用户代理,即向服务器发送请求的浏览器类型。这里的
Mozilla/5.0
就是Firefox浏览器。 - Accept-language:用户想得到的对象的语言,如这里的
Fr
即指法语版本。若服务器中没有这样的对象,那么服务器应当发送它的默认版本。 - If-modified-since:(条件GET方法)若服务器上的对象在此日期之后被修改,服务器才会传回新对象,否则服务器返回
304 Not Modified
。这个日期通常来源于之前请求时得到的响应报文中的Last-modified
首部行。 - cookie:本机对应本站点的cookie。
实体体(可以不存在)
如上所述,实体体通常含通过POST方法发送的表单信息。
一个HTTP请求报文的通用格式为:
1 | <方法> <URL> <版本>\r\n |
响应报文
下面这个报文可以是对上述请求报文例子的回应。
1 | HTTP/1.1 200 OK |
这个例子中,第1行称为状态行,第2-7行称为首部行,接下来是实体体。实体体部分是报文的主要部分,它包含了所请求的对象本身(表示为data data data data data ...
)。
状态行
协议版本字段(
HTTP/1.1
)状态码(
200
)常见的状态码:
状态码&短语 含义 200 OK 请求成功,信息在返回的响应报文中。 301 Moved Permanently 请求的对象已经被永久转移,新的URL定义在响应报文的Location首部行中。客户软件将自动获取新的URL。 304 Not Modified 告诉缓存器可以使用原有对象。 400 Bad Request 一个通用差错代码,指示该请求不能被服务器理解。 404 Not Found 被请求的文档不在服务器上。 505 HTTP Version Not Supported 服务器不支持请求报文使用的HTTP协议版本。 相应状态信息(
OK
)
首部行
- Connection: close告诉客户发送完报文后将关闭该TCP连接。
- Date:服务器产生并发送该响应报文的日期和时间。(不是对象创建或最后修改的时间,而是服务器从它的文件系统中检索到该对象,将该对象插入响应报文,并发送该响应报文的时间)
- Server:生成该报文的服务器信息。(与请求报文中的User-agent对应)
- Last-Modified:对象创建或最后修改的日期和时间。(对对象缓存很重要)
- Content-Length:被发送对象的字节数。
- Content-Type:对象类型。这里对象类型是HTML文本。(对象类型应该正式地由Content-Type首部行而不是用文件扩展名来指示)
- Set-cookie:设置cookie。
实体体(可以不存在)
含有对象内容。
参考资料
《计算机网络:自顶向下方法(原书第7版)》P64-75