[置顶] http协议初探------http request和response报文格式
2017-03-29 10:37
567 查看
搞web的程序猿,应该都知道http协议。http协议有三个版本。http 0.9版本,http 1.0版本,和现在一直在使用的http 1.1版本。RFC 2616 是http 1.1 版本的官方规范文档。另外《http 权威指南》也对http协议进行了很好的阐述。
http 协议是属于应用层协议,以可靠连接TCP套接字的基础上设计的应用协议。http1.1默认是开启长连接的。
http request部分报文结构
http 协议规定,http request部分报文分三部分。第一部分是请求行,第二部分是请求头,第三部分是请求实体。
以下为通过wireshark抓包后,整理的http 一次request发送的数据信息
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/29/b3cee27dc22e068e7ac2971c4f59f29c.png)
测试环境的http request包
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/29/ac23d8846c40faa35042ccc6bb7bdfc3.png)
淘宝某个js的http request包
http request中规定第一行为请求行,请求行中第一个单词为请求的方法。比如GET(请求服务端数据),post(更新数据到服务端),DELETE(删除服务端数据),PUT(新增数据到服务端) OPTION,TRACE等等。
第二个单词为请求的相对路径
第三个单词为http版本。目前有HTTP/1.1 HTTP/1.0 HTTP/0.9。目前几乎所有的浏览器和httpClient客户端都是HTTT/1.1。除非你的浏览器或者HttClient很老了(建议赶紧升级吧)。
最后以两个字节\r\n(13和10也就是回车+换行结束)做为请求行的标示结束。
注意http规定请求行中,第一个,第二个,第三个单词间必须要有一个空格
大家都知道,通过网络传输,传输的都是bit位(由Byte字节转换),服务端接受到http request部分后,读出来的数据也是Byte流。服务端是怎样截取Byte流的,比如什么时候header结束,http body开始。
通过两个连续的字节13和10(也就是\r\n)。表示http header结束,http body开始,可以查看上图
http header中通过两个字节13 10区分每个header。看上图每个http头部都是以\r\n结束。Header包含两部分,一个是headerName,一个是headerValue,headerName和headerValue间用一个“:”冒号和” ”一个空格分开,比如
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/29/3efddb4b3e5c99e62c5efce22d24e230.png)
http body的结束,是通过head中的Content-length指定的,以conten-length的大小,计算body的长度。(当然有些是以传输块指定的body,content-length无法指定,则会按相应的规则解析body中字节流,拿到每块的大小,然后再解析)
http response 部分报文结构
http response报文协议结构和http request报文协议结构几乎相同,第一部分为应答状态行,第二部分为应答头,第三部分为应答实体
以下为通过wireshare抓包后,一次http response返回结果,是上图,淘宝某js http request对应的response 部分。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/29/2e4661dae2cdf3c7df2848344b72e897.png)
http response报文规定第一行为响应状态行,第一个单词为http协议值,比如http/0.9 http/1.0 htpp/1.1 第二个单词为响应的状态码。比如 200表示服务端处理该请求成功,4XX开头是客户端发的http resquest有问题,5XX为服务端内部处理出错。3XX为页面转发
http response 头部字段和http response 实体部分也是通过两个连续的回车(13)换行(10)符进行分割的。
http response header之间和header内容中的结构和分割和http request header规则一样。
http response结束,也是通过http response header中的Content-length字段的值确认的(有时,服务端生成动态内容,body的大小无法计算,有时以header中的Transfer-Encoding为准,http协议规定有Transfer-Encoding,以Transfer-Encoding为准,没有Transfer-Encoding以Content-length为准)
![](http://dl2.iteye.com/upload/attachment/0110/7463/41d6ed70-0cb1-31d0-8bbf-882a096f5269-thumb.png)
大小: 12.1 KB
![](http://dl2.iteye.com/upload/attachment/0110/7465/c2c49eec-3420-3a17-9440-ea127b5ce8b5-thumb.png)
大小: 15.5 KB
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/29/28b696939996c7739b0898bad87ad322.png)
大小: 3.2 KB
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/29/67b7b37401f510e609c1189ebdd16093.png)
大小: 23.2 KB
查看图片附件
http 协议是属于应用层协议,以可靠连接TCP套接字的基础上设计的应用协议。http1.1默认是开启长连接的。
http request部分报文结构
http 协议规定,http request部分报文分三部分。第一部分是请求行,第二部分是请求头,第三部分是请求实体。
以下为通过wireshark抓包后,整理的http 一次request发送的数据信息
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/29/b3cee27dc22e068e7ac2971c4f59f29c.png)
测试环境的http request包
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/29/ac23d8846c40faa35042ccc6bb7bdfc3.png)
淘宝某个js的http request包
http request中规定第一行为请求行,请求行中第一个单词为请求的方法。比如GET(请求服务端数据),post(更新数据到服务端),DELETE(删除服务端数据),PUT(新增数据到服务端) OPTION,TRACE等等。
第二个单词为请求的相对路径
第三个单词为http版本。目前有HTTP/1.1 HTTP/1.0 HTTP/0.9。目前几乎所有的浏览器和httpClient客户端都是HTTT/1.1。除非你的浏览器或者HttClient很老了(建议赶紧升级吧)。
最后以两个字节\r\n(13和10也就是回车+换行结束)做为请求行的标示结束。
注意http规定请求行中,第一个,第二个,第三个单词间必须要有一个空格
大家都知道,通过网络传输,传输的都是bit位(由Byte字节转换),服务端接受到http request部分后,读出来的数据也是Byte流。服务端是怎样截取Byte流的,比如什么时候header结束,http body开始。
通过两个连续的字节13和10(也就是\r\n)。表示http header结束,http body开始,可以查看上图
http header中通过两个字节13 10区分每个header。看上图每个http头部都是以\r\n结束。Header包含两部分,一个是headerName,一个是headerValue,headerName和headerValue间用一个“:”冒号和” ”一个空格分开,比如
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/29/3efddb4b3e5c99e62c5efce22d24e230.png)
http body的结束,是通过head中的Content-length指定的,以conten-length的大小,计算body的长度。(当然有些是以传输块指定的body,content-length无法指定,则会按相应的规则解析body中字节流,拿到每块的大小,然后再解析)
http response 部分报文结构
http response报文协议结构和http request报文协议结构几乎相同,第一部分为应答状态行,第二部分为应答头,第三部分为应答实体
以下为通过wireshare抓包后,一次http response返回结果,是上图,淘宝某js http request对应的response 部分。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/29/2e4661dae2cdf3c7df2848344b72e897.png)
http response报文规定第一行为响应状态行,第一个单词为http协议值,比如http/0.9 http/1.0 htpp/1.1 第二个单词为响应的状态码。比如 200表示服务端处理该请求成功,4XX开头是客户端发的http resquest有问题,5XX为服务端内部处理出错。3XX为页面转发
http response 头部字段和http response 实体部分也是通过两个连续的回车(13)换行(10)符进行分割的。
http response header之间和header内容中的结构和分割和http request header规则一样。
http response结束,也是通过http response header中的Content-length字段的值确认的(有时,服务端生成动态内容,body的大小无法计算,有时以header中的Transfer-Encoding为准,http协议规定有Transfer-Encoding,以Transfer-Encoding为准,没有Transfer-Encoding以Content-length为准)
![](http://dl2.iteye.com/upload/attachment/0110/7463/41d6ed70-0cb1-31d0-8bbf-882a096f5269-thumb.png)
大小: 12.1 KB
![](http://dl2.iteye.com/upload/attachment/0110/7465/c2c49eec-3420-3a17-9440-ea127b5ce8b5-thumb.png)
大小: 15.5 KB
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/29/28b696939996c7739b0898bad87ad322.png)
大小: 3.2 KB
![](https://oscdn.geek-share.com/Uploads/Images/Content/201703/29/67b7b37401f510e609c1189ebdd16093.png)
大小: 23.2 KB
查看图片附件
相关文章推荐
- 自己动手学TCP/IP–http协议(http报文格式)
- Http协议对浏览器发出的Request格式以及对Web服务器发出的Response格式的规定。
- HTTP Request / Response 报文基本信息结构
- 怎么查看真实项目的http 请求的请求报文和响应报文,即request和response?只有这样,才能完全彻底明白一个http 请求整个过程,发送和接收的是什么东西。
- 自己动手学TCP/IP–http协议(http报文格式)
- @SuppressWarnings("unchecked")(解决标准的后台HttpServletRequest request, HttpServletResponse response)格式
- TCP/IP–http协议(http报文格式) .
- 自己动手学TCP/IP–http协议(http报文格式)
- HTTP协议 (三) 压缩 之前写过一个篇 【HTTP协议详解】 ,这次继续介绍HTTP协议中的压缩。 本文会使用Fiddler来查看HTTP request和Response, 如果不熟悉这个工
- XMLHttpRequest.responseXML.documentElement=null的问题
- HttpWebRequest 与 HttpWebResponse 的简单用法
- HttpWebRequest 和 HttpWebResponse 的应用
- HttpWebRequest,HttpWebResponse的用法和用途
- httpwebresponse 异步: request.BeginGetRequestStream 报错! 无法发送具有此谓词类型的内容正文。
- asp.net httprequest httpresponse
- Advanced Request and Response HTTP Header Viewer
- 查看http协议request和response的数据
- InternalServerError时 HttpWebRequest 的 GetResponse 方法处理策略
- httpWebRequest与httpWebResponse 类学习(校内网,开心网登录留言)
- 关于XMLHttpRequest对象的responseText属性