报文组成部分
1)起始行 start line 2)首部 header 3)主体 body
报文语法
请求报文
<method> <request-URL> <version>
<headers>
<entity-body>
响应报文
<version> <status><reason-phrase>
<headers>
<entity-body>
method(方法)
客户端希望服务器对资源执行的动作。主要方法:
GET 从服务器获取一份文档。这是最常用的方法,通常用于请求服务器发送某个资源。
HEAD 只从服务器获取文档的首部。因为在服务器响应中只返回首部,不返回实体部分,所以就允许客户端在未获取实际资源的情况下,对资源的首部进行检查。使用HEAD,可以
1)在不获取资源的情况下了解资源的情况(比如判断类型);
2)通过查看响应中的状态码,看看某个对象是否存在;
3)通过查看首部,测试资源是否被修改了。
POST 向服务器发送需要处理的数据。通常用它来支持HTML的表单。表单中填好的数据通常会被发送给服务器,然后由服务器发送到其他的地方(如网关程序中)。
PUT 将请求的主体部分存储在服务器上。与GET从服务器读取文档相反,PUT方法会向服务器写入文档。
TRACE 对可能经过代理服务器传送到服务器上去的报文进行追踪。客户端发起一个请求时,这个请求可能要穿过防火墙,代理,网关或其他一些应用程序。每个中间节点都会修改原始的HTTP请求。TRACE方法允许客户端在最终将请求发送给服务器时,看看他变成什么样子。TRACE发放主要用于诊断,用于验证请求是否如愿穿过了请求/响应链。可以用来查看代理和其他应用程序对用户请求所产生的效果。
缺点:因为他假定中间应用程序对各种不同类型请求的处理是相同的。很多HTTP应用程序会根据方法的不同做出不同的事情,TRACE并不提供区分这些方法的机制。通常,中间应用程序会自行决定对TRACE请求的处理方式。
OPTIONS 决定可以在服务器上执行哪些方法。请求Web服务器告知其支持的各种功能。
DELETE 从服务器上删除一份文档。但是,客户端应用程序无法保证删除操作一定会被执行。因为HTTP规范允许服务器在不通知科幻段的情况下撤销请求。
扩展方法
HTTP被设计成字段可扩展的,这样新的特性就不会使老的软件失效了。它主要指的是没在HTTP/1.1规范中定义的方法。
Web发布扩展方法
1)LOCK 允许用户锁定资源。
2)MKCOL 允许用户创建资源
3)COPY 便于在服务器上复制资源
4)MOVE 在服务器上移动资源
request-URL(请求URL)
命名了所请求资源,或者URL路径组件的完整URL。
version(版本)
报文所使用的HTTP版本,其格式是
HTTP/<major>.<minor>
status-code(状态码)
这三位数字描述请求过程中发生的情况。
方法是用来告诉服务器做什么事情,状态码则告诉客户端发生了什么事情,位于响应的起始行中。
100-199 信息提示
200-299 成功
300-399 重定向
400-499 客户端错误
500-599 服务器错误
首部
方法和首部配合工作,共同决定了客户端和服务器能做什么事情.
可以讲首部分为五个重要类型
通用首部
提供了与报文相关的最基本的信息。对于请求首部和响应首部都是通用的。
Connection
Date
MIME-Version
Trailer
Transfer-Encoding
Via
请求首部
用于说明谁或什么在发送请求,请求源来自何处,或者客户端的喜欢及能力。服务器可以根据请求首部给出的客户端信息,试着为客户端提供更好的响应。
请求的信息性首部
Client-Ip
From
Host
…
Accept首部
为客户端提供了一种将其喜欢和能力告知服务器的方式,包括他想要什么,可以使用什么,以及最重要的,他们不想要什么。
响应首部
为客户端提供一些额外信息,比如谁在发送响应,响应者的功能,甚至与响应相关的特殊指令。
实体首部
提供了有关实体及其内容的大量信息,从有关对象类型的信息,到能够对资源使用的各种有效的请求方法。
有些不全,我会在抽时间截取真实的报文,再来结合书来说说。