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请求报文头详解 #### 一、引言 HTTP(HyperText Transfer Protocol)作为互联网上应用最为广泛的一种网络协议,在Web开发中扮演着极其重要的角色。掌握HTTP的工作原理及其实现细节对于提高Web应用的性能至...
该协议定义了多种类型的报文,包括链路请求报文、链路复位报文、总召唤报文等。下面将对IEC101规约报文进行详细分析。 1. 链路请求报文: 链路请求报文用于主站向从站发起链路请求。该报文的控制域中包括DIR、PRM...
ICMP 报文的前 32 位是三个长度固定的字段: 1. 类型字段(Type):8 位,用于标识 ICMP 报文的类型。 2. 代码字段(Code):8 位,用于详细说明某种 ICMP 报文的类型。 3. 校验和字段(Checksum):16 位,计算...
Type=8代表请求报文,Type=0代表应答报文。 2. **时间戳请求与应答(Timestamp Request & Timestamp Reply)**:用于测量两个主机间往返时间,Type=13为请求,Type=14为应答。 3. **地址掩码请求与应答(Address ...
OSPF报文格式是开放最短路径优先协议的报文结构,包括不同类型的消息,如Hello、数据库描述、链路状态请求、链路状态更新和链路状态确认等。 传输层中,TCP报文格式是面向连接的传输层协议,它负责提供可靠的、面向...
3. **控制字段(CTL)**:用于指示报文类型和其他控制信息,例如请求确认或无条件发送等。控制字段也是8位。 4. **长度字段(LEN)**:指明后续数据字段的长度,通常为8位。 5. **用户数据字段(DATA)**:包含...
请求报文的首部字段通常包含了请求修饰符、客户机信息和内容信息等。请求报文的首部字段分为通用首部、请求首部、实体首部等类别。 响应报文的状态行包含了HTTP版本、状态码和状态短语。状态码是一个三位数的代码,...
回送请求报文的Type字段值为128,Code字段的值为0,而回送应答报文的Type字段的值为129,Code字段的值为0。 ICMPv6协议在IPv6网络中扮演着非常重要的角色,对于网络故障诊断和网络性能优化具有重要意义。了解ICMPv6...
4) -l Size 指定发送的回送请求报文中“数据”字段的长度(以字节表示),默认值为 32。 5) -f 指定发送的回送请求报文带有“不要拆分”标志(所在的 IP 数据报头部 DF 标志位设为 1)。 6) -i TTL 指定发送回送请求...
常用的可选项是最大段长度,用来指明本端所能接收的最大长度的报文段。 三次握手 三次握手是 TCP 报文分析的核心内容,它是通过三个报文段来建立连接的过程。第一次握手是客户端向服务器发送 SYN 报文,服务器响应...
为了确保回送请求报文和回送应答报文的一一对应关系,ICMP报文中包含了以下字段: - **类型(Type)**:标识ICMP报文的类型,如8表示Echo Request,0表示Echo Reply。 - **代码(Code)**:进一步细化类型字段的...
具体阐述了请求报文的构成要素(包括请求行、请求头、请求实体),以及不同类型(GET, POST)请求的特点。重点解析了各种常见的HTTP方法的应用场景,特别是GET和POST两种最为常用的方法。对于GET请求,其参数直接...
例如,回送请求或回答报文可以用来测试目的主机是否可达,时间戳请求或回答报文可以用来获取准确的网络时间,而地址掩码请求或回答报文则可以用来查询子网掩码。 ICMP报文封装在IP数据报文中传输,它与IP一样,都是...
接下来是业务类型字段(BIT,Bitmap),它是一个二进制位图,用来标记消息体中各个数据元素(Data Elements,DEs)是否存在。每个位对应一个特定的DE,如果DE有值,相应的位就会被设置为1。 ISO8583的消息体包含了...
以太网帧是最常用的链路层协议之一,其报文格式如下: - **前导码**:由56位的101010…101010模式组成,用于接收同步。 - **目标MAC地址**:6字节,标识接收方的MAC地址。 - **源MAC地址**:6字节,标识发送方的MAC...
此外,控制字段还包含一些其他信息,如远程传输请求位(RTR)和错误标志位,但这些在标准CAN中并不常用。 3. **数据字段**:这部分包含实际的数据,根据DLC的值,可以有0到8个字节。数据字段的内容取决于发送节点的...
代理进程在发送 get-response 报文时也要返回此请求标识符。 * 差错状态(error status)由代理进程回答时填入 0~5 中的一个数字,见下表的描述。 trap 首部: * 企业(enterprise)填入 trap 报文的网络设备的...
HTTP请求报文由请求行、请求头部、空行和请求包体4个部分组成,如下图所示:HTTP请求报文由请求行、请求头部、空行和请求包体4个部分组成下面对请求报文格式进行简单的分析:请求行:请求行由方法字段、URL字段和...
* 请求头:从请求报文第二行开始到第一个空行为止的内容,包含了关于 HTTP 请求的重要字段,例如 Accept、Accept-Language、Host 等。 * 请求正文:第一个空行开始以后的所有内容,用于传输数据,例如表单数据、文件...