http协议解析
Posted 安全小小兵
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了http协议解析相关的知识,希望对你有一定的参考价值。
图1-1 requests模块发起get请求
HTTP协议最新版本为1.1,它是一种无状态协议,HTTP协议遵循请求(Request)/应答(Response)模型,只能由客户端发起,服务器进行响应。
HTTP的请求由三部分组成,分别为请求报文首部、空行和请求正文。其中请求报文首部由请求行、请求首部、通用首部、实体首部等组成(图1-2-1)。请求行包括请求方法、URI、HTTP协议版本,请求报文首部和请求正文由空行隔开。
图1-2-1 HTTP请求
与HTTP请求对应,HTTP响应也由三部分组成,分别为响应报文首部、空行、响应正文三部分组成(图1-2-2)。其中响应报文首部由响应行、响应首部、通用首部、实体首部等部分组成,响应行包括HTTP版本、状态码以及原因短语三部分,响应正文为服务器返回给客户端的数据,用空行和响应报文首部隔开。
图1-2-2 HTTP响应
HTTP的请求方法非常多,其中GET、POST最为常见,此外还有HEAD、PUT、DELETE、CONNECT、OPTIONS等方法(表1-2-1)。
表1-2-1 HTTP请求方法 |
|
请求方法 |
用法 |
GET |
获取请求页面的指定信息(参数跟随在url后,在浏览器端可以看到参数),请求返回Web容器解析后的html代码。 |
POST |
用于向服务器发送大量数据(内容单独作为一部分,不与url拼接,浏览器端看不到请求的内容,更安全)。 |
HEAD |
用于测试超文本链接的有效性、可访问性等,不返回消息主体。 |
PUT |
用于请求服务器把附带的实体内容存储在请求的资源下,如果资源已存在则进行替换,如果资源部存在则创建这个资源。 |
DELETE |
用于请求源服务器删除请求的指定资源。 |
OPTIONS |
用于获取访问程序URI资源可使用的功能(请求方法)。 |
TRACE |
追踪路径。 |
CONNECT |
要求用隧道协议连接代理。 |
1.2.3 HTTP状态码
当客户端发出HTTP请求后,服务器端将向客户端发送响应消息,响应行中最重要的就是HTTP状态码(表1-2-2),用来表示这次请求的状态,不同的状态码代表不同的含义,其中状态码第1位的值代表响应的类别。
表1-2-2 HTTP状态码 |
||
状态码 |
含义 |
示例 |
1xx |
服务器信息提示,表示请求被成功接收,将继续处理 |
|
2xx |
服务器处理成功,服务器成功处理了请求 |
200:客户端请求处理成功 204:无实体内容返回 206:响应客户端范围请求 |
3xx |
访问资源重定向,告知浏览器其访问资源新的位置 |
301:永久性重定向 302:临时性重定向 303:GET请求指定URI |
4xx |
客户端请求错误,服务器无法处理请求 |
400:请求内容语法错误 401:请求未经授权 403:服务器拒绝提供服务 404:请求资源不存在 |
5xx |
服务器内部错误,不能正常处理客户端的有效请求 |
500:服务器内部错误 503:服务器暂时不能处理 |
HTTP首部字段根据实际用途被分为4种类型:通用首部字段(General Header Fields)、请求首部字段(Request Header Fields)、响应首部字段(Response Header Fields)、实体首部字段(Entity Header Fields)。
(1)通用首部字段
请求报文和响应报文都会使用的首部(表1-2-3)。
表1-2-3 HTTP通用首部字段 |
|
首部字段名 |
说明 |
Cache-Control |
控制缓存的行为 |
Connection |
逐跳首部、连接的管理 |
Date |
创建报文的日期时间 |
Pragma |
报文指令 |
Trailer |
报文末端的首部一览 |
Transfer-Encoding |
指定报文主体的传输编码方式 |
Upgrade |
升级为其他协议 |
Via |
代理服务器的相关信息 |
Warning |
错误通知 |
(2)请求首部字段
从客户端向服务端发送请求报文时使用的首部,补充了请求的附加内容、客户端信息、响应内容相关优先级等信息(表1-2-4)。
表1-2-4 HTTP请求首部字段 |
|
首部字段名 |
说明 |
Host |
用于指定请求资源的主机和端口 |
User-Agent |
用于将客户端的操作系统、浏览器或其他属性告知服务器 |
Referer |
Referer包含一个url,该url即访问当前页面的原始链接 |
Cookie |
是一段用于表示请求者身份的文本 |
Range |
用于表示请求的内容的范围,如bytes=500~999表示获取请求内容的第501到1000字节。 |
x-forward-for |
XXF头,代表请求端的IP |
Accept |
用于表示客户端希望接收的文件类型,如Accept: text/html |
Accept-Charset |
用于指定客户端接收的字符集(默认为任何字符集),如Accept-Charset:iso-8859-1,gb2312 |
Accept-Encoding |
优先的内容编码 |
Accept-Language |
优先的语言(自然语言) |
Proxy-Authorization |
代理服务器要求客户端的认证信息 |
Authorization |
Web认证信息 |
(3)响应首部字段
从服务器端向客户端发送请求报文时使用的首部,补充了请求的附加内容、客户端内容、客户端信息、响应内容相关优先级等信息(表1-2-5)。
表1-2-5 HTTP响应首部字段 |
|
首部字段名 |
说明 |
Server |
用于表示服务器使用的Web服务器名称,如Server:Apache/1.3.6(Unix) |
Set-Cookie |
用于向客户端设置Cookie |
Last-Modified |
用于告知客户端资源的最后修改时间 |
Location |
用于告知客户端资源重定向的页面 |
Refresh |
用于告知客户端定时刷新 |
Accept-Ranges |
是否接受字节范围请求 |
Age |
推算资源创建经过时间 |
Proxy-Authenticate |
代理服务器对客户端的认证信息 |
WWW-Authenticate |
服务器对客户端的认证信息 |
(4)实体首部字段
针对请求报文和响应报文的实体部分使用的首部,补充了资源内容更新时间等与实体有关的信息(表1-2-6)。
表1-2-6 HTTP实体首部字段 |
|
首部字段名 |
说明 |
Allow |
资源可支持的HTTP方法 |
Content-Encoding |
实体主机适用的编码方式 |
Content-Language |
实体主体的自然语言 |
Content-Length |
实体主体的大小(byte) |
Content-Location |
替代对应资源的URI |
Content-MD5 |
实体主体的报文摘要 |
Content-Range |
实体主体的位置范围 |
Content-Type |
实体主体的媒体类型 |
Expires |
实体主体过期的日期 |
Last-Modified |
资源的最后修改日期 |
HTTPS协议在HTTP协议的基础上引入了SSL(Secure Socket Layer,安全套接层)或 TLS(Transport Layer Security,安全层传输协议),即HTTPS = HTTP + SSL/TLS,HTTP协议与HTTPS协议两者间具有较大差异(表1-3)。
表1-3 HTTP与HTTPS的区别 |
||
HTTP协议 |
HTTPS协议 |
|
区别1 |
无通信内容保护,易被窃取 |
SSL协议对HTTP通信内容进行加密 |
区别2 |
无通信方身份验证,易遭伪装 |
SSL协议使用证书认证通信方身份 |
区别3 |
无报文完整性验证,易被篡改 |
SSL协议提供报文摘要验证功能 |
区别4 |
默认使用80端口 |
默认使用443端口 |
SSL协议是一个结合使用了对称加密、公钥密码体制、hash函数等技术的安全协议。后续在SSL3.0的基础上,发展制定了TLS协议(当前更安全的是TLS1.2),有时会将两者统称为SSL协议。
以SSL协议为例(图1-3-1),SSL协议介于TCP/IP模型的应用层和传输层之间,由SSL握手协议、SSL修改密文协议、SSL告警协议和SSL记录协议四部分组成。
图1-3-1 SSL协议栈
(1)SSL记录协议:提供最基本的安全服务,发送方将传输的数据流分割成片段,并对每个片段进行加密后传输,接收方对接收到的数据流进行解密和验证等;
(2)SSL握手协议:用于客户端与服务端之间协商通信过程中使用的加密算法、密钥等信息。
(3)SSL修改密文协议:用于通知另一方后续的通信内容将使用新的密钥进行保护。
(4)SSL告警协议:用于传递SSL的相关警告信息。
SSL协议工作流程大致可以分为以下步骤(图1-3-2):
图1-3-2 ssl协议简要工作流程
step1:由客户端将其支持的SSL版本、支持的加密算法和密钥长度等信息发送给服务器;
step2:服务器接收到客户端的信息后,返回选择的SSL版本、对称密钥算法以及由CA中心私钥加密的证书,证书包含服务器的公钥;
step3:客户端接收到CA私钥加密的证书后,判断CA证书是否可信,如果不可信则中断通信,如果可信则可使用CA公钥解密获取服务器的公钥;
step4:客户端验证服务器身份后,产生一个随机的对称密钥,使用服务器的公钥对产生的对称密钥进行加密,发送给服务器;
step5:客户端和服务器互相发送报文确认使用生成的随机密钥对通信内容进行加密,握手过程至此结束;
step6:双方使用协商的密钥对通信的内容进行数据加密,同时附加消息认证码(MAC)对通信内容的完整性进行验证。
以上是关于http协议解析的主要内容,如果未能解决你的问题,请参考以下文章