URL 的请求协议几乎都是HTTP,它是一种无状态的请求响应,即每次的请求响应之
后,连接会立即断开或延时断开(保持一定的连接有效期),断开后,下一次请求再重新
建立。这里举一个简单的例子,对http://www.foo.com/发起一个GET 请求:
GET http://www.foo.com/ HTTP/1.1
Host: www.foo.com
Connection: keep-alive
Cache-Control: max-age=0
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.19 (KHTML, like
Gecko) Chrome/18.0.1025.3 Safari/535.19
Referer: http://www.baidu.com/
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
Cookie: SESSIONID=58AB420B1D8B800526ACCCAA83A827A3:FG=1
响应如下:
HTTP/1.1 200 OK
Date: Sun, 04 Mar 2012 22:48:31 GMT
Server: Apache/2.2.8 (Win32) PHP/5.2.6
Set-Cookie: PTOKEN=; expires=Mon, 01 Jan 1970 00:00:00 GMT; path=/;
domain=.foo.com; HttpOnly
Set-Cookie: USERID=c7888882e039b32fd7b4d3; expires=Tue, 01 Jan 2030
00:00:00 GMT; path=/; domain=.foo.com
X-Powered-By: PHP/5.2.6
Content-Length: 3635
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html;charset=gbk
<html>
...
</html>
请求与响应一般都分为头部与体部(它们之间以空行分隔)。对于请求体来说,一般
出现在POST 方法中,比如表单的键值对。响应体就是在浏览器中看到的内容,比如,
HTML/JSON/JavaScript/XML 等。这里的重点在这个头部,头部的每一行都有自己的含义,
key 与value 之间以冒号分隔,下面看看几个关键点。
请求头中的几个关键点如下。
GET http://www.foo.com/ HTTP/1.1
这一行必不可少,常见的请求方法有GET/POST,最后的“HTTP/1.1”表示1.1 版本
的HTTP 协议,更早的版本有1.0、0.9。
Host: www.foo.com
这一行也必不可少,表明请求的主机是什么。
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.19 (KHTML, like
Gecko) Chrome/18.0.1025.3 Safari/535.19
User-Agent 很重要,用于表明身份(我是谁)。从这里可以看到操作系统、浏览器、
浏览器内核及对应的版本号等信息。
Referer: http://www.baidu.com/
Referer 很重要,表明从哪里来,比如从http://www.baidu.com/页面点击过来。
Cookie: SESSIONID=58AB420B1D8B800526ACCCAA83A827A3:FG=1
前面说HTTP 是无状态的,那么每次在连接时,服务端如何知道你是上一次的那个?
这里通过Cookies 进行会话跟踪,第一次响应时设置的Cookies 在随后的每次请求中都会发
送出去。Cookies 还可以包括登录认证后的身份信息。
响应头中的几个关键点如下。
HTTP/1.1 200 OK
这一行肯定有,200 是状态码,OK 是状态描述。
Server: Apache/2.2.8 (Win32) PHP/5.2.6
上述语句透露了服务端的一些信息:Web 容器、操作系统、服务端语言及对应的版本。
X-Powered-By: PHP/5.2.6
这里也透露了服务端语言的信息。
Content-Length: 3635
响应体的长度。
Content-Type: text/html;charset=gbk
响应资源的类型与字符集。针对不同的资源类型会有不同的解析方式,这个会影响浏
览器对响应体里的资源解析方式,可能因此带来安全问题。字符集也会影响浏览器的解码
方式,同样可能带来安全问题。
Set-Cookie: PTOKEN=; expires=Mon, 01 Jan 1970 00:00:00 GMT; path=/;
domain=.foo.com; HttpOnly; Secure
Set-Cookie: USERID=c7888882e039b32fd7b4d3; expires=Tue, 01 Jan 2030
00:00:00 GMT; path=/; domain=.foo.com
每个 Set-Cookie 都设置一个Cookie(key=value 这样),随后是如下内容。
expires:过期时间,如果过期时间是过去,那就表明这个Cookie 要被删。
path:相对路径,只有这个路径下的资源可以访问这个Cookie。
domain:域名,有权限设置为更高一级的域名。
HttpOnly:标志(默认无,如果有的话,表明Cookie 存在于HTTP 层面,不能被客户
端脚本读取)。
Secure:标志(默认无,如果有的话,表明Cookie 仅通过HTTPS 协议进行安全传输)。
请求响应头部常见的一些字段都有必要了解,这是我们在研究Web 安全时对各种HTTP 数据包分析的必备知识。
相关推荐
HTTP-Request-Headers:http请求报文头
服务端是webservice接口,通过SOAP协议向服务器发送请求报文
网上下载的一个使用工具,查看请求报文,响应报文的开发工具。
可改变过源ip和源端口的DNS请求报文发送和响应报文发送
java发送http请求报文json
模拟TCP请求或简单的socket请求报文发送工具,免安装绿色版本
Oracle通信TNS协议中请求报文的解析.pdf
WebRequest发起Http_Post请求模拟登陆并cookie处理示例HTTP协议详解
06 车载诊断协议DoIP系列 —— DoIP APP车辆识别和声明请求报文
支持java端 生成soap-ui的自定义报文,功能和soap-ui软件相似
HTTP请求报文拦截与篡改源码1 源码,使用代理服务器方式实现。代码分析参见 http://www.cnblogs.com/jivi/archive/2013/03/10/2952829.html
主要介绍了spring-boot 使用Aop通知打印控制器请求报文和返回报文,非常不错,具有参考借鉴价值,需要的朋友可以参考下
Windows使用curl发送http请求,json报文。
•HTTP代理实现请求报文的拦截与篡改9--实现篡改功能后的演示+源码下载 http://blog.csdn.net/duhai/article/details/22936979
交通银行直连机全量请求报文
请求报文+应答报文示例.-1txt
Http请求模拟报文返回工具,使用配置模拟http响应报文,war包部署在tomcat中,启动tomcat即可访问url模拟响应
5G网优案例:传输IPV6分片报文Reserved字段校验不通过导致VONR呼叫失败
java http 发送xml报文(java发送xml报文实例+参数)java http 发送xml报文java http 发送xml报文(java发送xml报文实例+参数)
实际记录电力102规约的实际报文,包含链路初始化报文、请求ertu时间报文、请求电度量报文、点数据报文等,给规约初学者提供参考。