“方法”是面向对象技术中使用的专门名词。所谓“方法”就是对所请求的对象进行的操作,因此这些方法实际上也就是一些命令。因此,请求报文的类型是由它所采用的方法决定的。
HTTP 请求报文的一些方法
2.URL
“URL”是所请求的资源的 URL。
3.版本
“版本”是 HTTP 的版本。
4.一个请求报文的例子:
6.2 响应报文
响应报文的开始行是状态行。
状态行包括三项内容,即 HTTP 的版本,状态码,以及解释状态码的简单短语。
状态码都是三位数字 :
1xx 表示通知信息的,如请求收到了或正在进行处理。
2xx 表示成功,如接受或知道了。
3xx 表示重定向,表示要完成请求还必须采取进一步的行动。
4xx 表示客户的差错,如请求中有错误的语法或不能完成。
5xx 表示服务器的差错,如服务器失效无法完成请求。
一个响应报文的例子:
6.3 使用WireShark实例分析下面是一个用wireShark获取的http协议包:
可以看到这是post方法、url:/pcsuiteprofile/api/updateinfo?u=38e37ccd&len=24
版本:HTTP/1.1 \r\n:回车换行
首部字段:Host、Accept、Content-Type、Content-Length等等。
展开Post,具体分析,如图:
选中post,下边的16进制中显示的是:50 4f 53 54正好是POST四个字母对应的16进制ASCII,可以自行去对比ASCII。
如果你不会用wireShark,可以看下这篇文章:,只看一就够用了。
七、使用 Cookie 的状态管理HTTP 是无状态协议,它不对之前发生过的请求和响应的状态进行管理。也就是说,无法根据之前的状态进行本次的请求处理。
Cookie 技术通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。
Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端保存 Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出去。
服务器端发现客户端发送过来的 Cookie 后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务 器上的记录,最后得到之前的状态信息。
1. 没有 Cookie 信信息状态下的请求
上图展示了发生 Cookie 交互的情景,HTTP 请求报文和响应报文的内容如下。
1. 请求报文(没有 Cookie 信息的状态)
1
2
3
GET/reader/HTTP/1.1
Host:hackr.jp
*首部字段内没有Cookie的相关信息
2. 响应报文(服务器端生成 Cookie 信息)
1 2 3 4 5
HTTP/1.1200OK Date:Thu,12Jul201207:12:20GMT Server:Apache <Set-Cookie:sid=1342077140226724;path=/;expires=Wed,10-Oct-1207:12:20GMT> Content-Type:text/plain;charset=UTF-8
3. 请求报文(自动发送保存着的 Cookie 信息)
1
2
3
GET/image/HTTP/1.1
Host:hackr.jp
Cookie:sid=1342077140226724
有关请求报文和响应报文内Cookie 对应的首部字段,请参考之后的章节。
八、特点HTTP协议永远都是客户端发起请求,服务器回送响应。这样就限制了使用HTTP协议,无法实现在客户端没有发起请求的时候,服务器将消息推送给客户端。