http协议解析

Posted 安全小小兵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了http协议解析相关的知识,希望对你有一定的参考价值。


一、 HTTP协议解析
1.1 发起HTTP请求的方式
( 1) 浏览器地址栏输入url请求;
( 2) 其他各类工具,如使用python的requests模块 发起 get请求(图1-1) 等;

1-1 requests模块发起get请求

1.2 HTTP协议详解

HTTP协议最新版本为1.1是一种无状态协议,HTTP协议遵循请求(Request)/应答(Response)模型,只能客户端发起,服务器进行响应。

1.2.1 HTTP请求 与响应

HTTP的请求由三部分组成,分别为请求报文首部、空行和请求正文。其中请求报文首部由请求行、请求首部、通用首部、实体首部等组成(图1-2-1)。请求行包括请求方法、URI、HTTP协议版本,请求报文首部和请求正文由空行隔开。http协议解析

1-2-1 HTTP请求

HTTP请求对应,HTTP响应也由三部分组成,分别为响应报文首部、空行、响应正文三部分组成(图1-2-2)。其中响应报文首部由响应行、响应首部、通用首部、实体首部等部分组成,响应行包括HTTP版本、状态码以及原因短语三部分,响应正文为服务器返回给客户端的数据,用空行和响应报文首部隔开。

http协议解析 图1-2-2 HTTP响应

1.2.2 HTTP请求方法

HTTP的请求方法非常多,其中GET、POST最为常见,此外还有HEAD、PUT、DELETECONNECT、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:服务器暂时不能处理

1.2.4 HTTP首部字段

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

资源的最后修改日期

 

1.3 HTTP 协议 HTTPS协议的区别

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端口

 

1.3.1 SSL协议/TLS协议

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的相关警告信息。

 

1.3.2 SSL协议工作流程

SSL协议工作流程大致可以分为以下步骤(图1-3-2):

 图1-3-2 ssl协议简要工作流程

step1:由客户端将其支持的SSL版本、支持的加密算法和密钥长度等信息发送给服务器;

step2:服务器接收到客户端的信息后,返回选择的SSL版本、对称密钥算法以及由CA中心私钥加密的证书,证书包含服务器的公钥;

step3:客户端接收到CA私钥加密的证书后,判断CA证书是否可信,如果不可信则中断通信,如果可信则可使用CA公钥解密获取服务器的公钥;

step4:客户端验证服务器身份后,产生一个随机的对称密钥,使用服务器的公钥对产生的对称密钥进行加密,发送给服务器;

step5:客户端和服务器互相发送报文确认使用生成的随机密钥对通信内容进行加密,握手过程至此结束;

step6:双方使用协商的密钥对通信的内容进行数据加密,同时附加消息认证码(MAC)对通信内容的完整性进行验证。


以上是关于http协议解析的主要内容,如果未能解决你的问题,请参考以下文章

http协议解析

SSL/TLS协议解析

http协议简单解析

HTTP协议解析

Python爬虫最为核心的HTTP协议解析,及自定义协议的分析!

应用层协议实现系列——HTTP服务器之http协议解析