http 请求和响应报文分析
一》http 请求报文主要包括三个部分: 1. 请求行; 2. 请求头; 3; 请求体;
1, 请求行一般包括三个部分: 请求方式; 请求 url ; http 协议版本.
请求方法: 大部分浏览器使用 post 和 get 方法; 其他还有: delete,put,head,options...
请求 url: 为请求的 url 地址, 它和报文头的 host 属性组成完整的请求 url;
http 协议版本: 指协议名称和版本号;
请求头: 是 http 的报文头, 包含了若干属性, 属性格式为:"属性" :"属性值", 服务端依次获取客户端信息;
请求体: 是 http 的报文体, 它可以将页面表单中的组件值已 value=name||value=name; 的键值对形式编码成一格式化串, 它承载多个请求的参;
其二请求 url 也可以通过浏览器地址栏的数据格式传递请求的参数;
引用
HttpWatch http://www.httpwatch.com/download/ 是强大的网页数据分析工具, 安装后将集成到 Internet Explorer 工具栏中. 它不用代理服务器或一些复杂的网络监控工具, 就能抓取请求及响应的完整信息, 包括 Cookies, 消息头, 查询参数, 响应报文等, 是 web 应用开发人员的必备工具.
二》HTTP 请求报文头属性
1 什么是报文头属性? 请求 http 报文和响应 http 报文都有若干个 报文属性, 他们是为协助客户端和服务端交易的一些附属信息.
2 常见的一些 http 请求报文头的属性?
Accept
请求报文通过一个 "accept" 报文头属性告诉服务端或客户端接受什么类型的响应.
例如: Accept:text/plain; 告诉服务端, 俺客户端能够接收的响应类型仅为纯文本数据啊, 你丫的不要发图片什么视频的过过来啊, 那样我会歇菜的 ;{Accept 的属性的值可以为一个或者多个 MIME 类型的值; 常见的 mime 类型:
客户端的 cookie 就是通过如下的报文头属性传递给服务端的哦:
cookie:Set-Cookie: NAME=VALUE;Expires=DATE;Path=PATH;=DOMAIN_NAME;
通过 http 请求报文头的 cookie 属性的键值的方式关联起来; 也可以通过重写 URL 的方式将会话的 ID 附带在每个 url 后面
Referer
表示这个请求是从哪个 urL 过来的. 例如用百度搜索一个商家的广告的页面, 这个请求的报文头就是 htttp://www.baidu.com.{网页的监控的分布情况的报表和图表, 其用原理就是通过这个 Referer 和其他的一些 http 报文头工作的}
其它请求报文头属性
参见:
三》http 响应报文
http 响应是有四部分组成, 分别是: 状态行 响应头, 空格 响应数据;
http 响应和请求的格式十分的相近
响应报文的开始是状态行, 包括三项内容: http 版本, 状态吗 , 解释状态码的简单的短语
在响应报文中唯一真正的区别在于第一行中用状态信息代替了请求的信息. 状态行 (status line) 通过提供一个状态码来说明所请求的资源情况.
状态行的格式如下:
http-version status-code reason-Phrase crlf;
1.http-version 表示服务器 http 协议的版本;
2, status-code 表示服务器发回的响应状态码;
3 ,reason-phrase 表示状态吗的文本描述
状态吗有三位数字, 第一个数字定义了响应的类别, 且有五钟可能的取值:
1xx: 指示信息 - 表示请求已接收, 继续处理.
2xx: 成功 - 表示请求已被成功的接收. 理解. 接受
3xx; 重定向 - 要完成请求必须更进一步的操作{一般表示请求资源的得路径变化和数据异常}
4xx: 客户端错误 - 请求的语法错误或者请求无法实现
5xx: 服务端错误 - 服务器不能实现合法请求.
http 常见问题
http 协议是无状态的, 它和 connection:keep-alive 是有区别的;
无状态是指协议对于事物处理没有记忆的功能, 服务器不是知道客户端是什么状态. 从另一方面讲, 打开一个服务器上的网页和你之前打开这个服务器上的网页没有任何的联系. http 是一个无状态面向连接的协议, 无状态不代表 http 不能保持 tcp 连接, 更不能代表 http 使用的是 udp 协议.
从 http/1.1 起, 默认都开启了 keep-alive,, 保持连接性, 简单的说, 当一个网页打开完成后, 客户端和服务端用于传输 http 数据的 tcp 不会关闭, 如果客户端再次访问这个服务器上的网页, 会继续使用这一条已建立的连接. kep-alive 不会永远保持连接, 他有一个保持时间, 可以在不同的服务器软件中设定这个时间.
TCP (打电话)是长连接 稳定 TCP 连接的建立需要三次握手
UDP (写信)无连接 不稳定 用户数据报协议, 是一个面向无连接的协议. 采用该协议不需要两个应用程序先建立连接. UDP 协议不提供差错恢复, 不能提供数据重传, 因此该协议传输数据安全性差
HTTP 是短连接
常用的 HTTP 请求方法
GET 参数追加在 URL 后 长度受限制 不安全
POST 参数在请求报文的请求数据部分 参数长度比 GET 长 安全
一, get 请求
当客户端想从服务器读取文档时, 点击网页上的超链接或者在浏览器输入框内输入地址按回车时, 都是发送的 get 请求, 服务器根据请求的地址从资源文件中找到客户
想要的资源文件, 放在响应报文中的相应数据部分送给客户端{使用 get 请求需要将请求参数放在 URL 之后, 以? 分割, 多个参数用 & 连接; 这种请求对 URL 的长度有限制, 一般只能识别 1024 个字符, 并且会把参数值直接暴露在 URL 中, 所以不适合大量传输数据, 和私密传输数据}
二, post 请求
对于上面提到的不适合使用 GET 方式的情况, 可以考虑使用 POST 方式, 因为使用 POST 方法可以允许客户端给服务器提供信息较多. POST 方法将请求参数封装在 HTTP 请求数据中, 以名称 / 值的形式出现, 可以传输大量数据, 这样 POST 方式对传送的数据大小没有限制, 而且也不会显示在 URL 中. 如果使用 POST 方式的话, 格式如下:
- POST /search HTTP/1.1
- Accept: image/gif, image/x-xbitmap
- Connection: Keep-Alive
- .......
- username=zhangsan&password=123
可以看到, POST 方式请求行中不包含数据字符串, 这些数据保存在 "请求内容" 部分, 各数据之间也是使用 "&" 符号隔开. POST 方式大多用于页面的表单中. 因为 POST 也能完成 GET 的功能, 因此多数人在设计表单的时候一律都使用 POST 方式, 其实这是一个误区. GET 方式也有自己的特点和优势, 我们应该根据不同的情况来选择是使用 GET 还是使用 POST.
来源: http://www.bubuko.com/infodetail-2976649.html