HTTP协议分析

http协议介绍

目录:

一、http协议版本

二、http文档的生成方式

三、http协议的报文

四、http请求方法

五、http状态码分析

一、http协议(版本)

1、http:Hyper Text Transfer Protocol超文本传输协议,是互联网应用最广泛的一种网络协议,主要用于web服务,通过计算机处理文本消息,格式为HTML(Hyper Text Mark Language)超文本标记语言实现

2、http协议的版本:

(1)、http0.9:仅与用户传输html文档

(2)、http1.0:

1)引入了MIME(Multipurpose Internet Mail Extensions)机制,多用途互联网邮件扩展,主要作用是可以发送多媒体(如视频、音频)等信息。

2)引入了keep-alive机制,实现持久连接的功能

3)引入支持缓存功能。

(3)、http1.1:

支持更多的请求方法,更加精细的缓存机制

(4)、http2.0:

提供了HTTP语义优化的传输,(语义化:就是正确的标签做正确的事情,能够便于开发者阅读和写出更优雅的代码的同时让网络爬虫更好的解析)。

小结:

目前常用的版本就是http1.0和http1.1

二、http文档的生成方式

1、静态:事先就编辑并定义完成的。

 

(1)、web服务器通过内核注册socket

(2)、客户端通过浏览器,向web服务器发起request请求

(3)、web服务器收到请求信息,如果资源存在本地,http服务向系统内核申请调用

(4)、内核通过本地磁盘提取数据,并将数据发送给http服务

(5)、http将用户请求的资源通过response(响应报文),最终响应给客户端。

2、动态:通过编译语言编写的程序后输出html格式的结果

 

(1)、web服务器通过内核注册socket

(2)客户端通过浏览器向web服务器发送request请求信息

(3)、服务器收到请求信息,如果用户请求的是动态内容,那么此时http服务会调用后端的解析器,由动态语言去处理用户的请求

(4)、如果需要请求数据的时候,会向内核申请调用,从而向磁盘中获取用户指定的数据,通过解释器运行,运行的结果通常会生成html格式的文件,然后构建成响应报文,最终发送给客户端。

三:http协议的报文

1、request Message:请求报文

由客户端向服务器端发送请求,不同的网站用于请求不同的资源

请求报文格式解释:

请求行:请求方法字段(method)+请求URL(request-URL)+版本信息(version)

请求首部:由关键字+关键字的值组成。请求首部的作用就是通过客户端将请求的相关内容告知服务器端

空白行:用于通知服务器端以下的内容将不会再出现请求首部的信息

请求实体:指请求的内容的所有信息

2、response message(响应报文)

起始行:称为状态行,用于服务器端响应客户端请求的状态信息,由版本号(version)+状态码(status)+原因短语(reason-phrase),例如“ HTTP/1.1 200 OK”

响应首部:响应的就是请求的信息

空白行:通知客户端空行下无首部信息

响应实体:装载了要返回客户端的数据。

四、http请求方法:

(1)、GET:用于客户端请求指定资源的信息,并返回指定资源的实体

(2)、HEAD:只返回响应首部的信息

(3)、POST:基于HTML表单向服务器提交数据,服务器通常需要存储此数据,通常存放在mysql的关系型数据库中。

(4)、PUT:与GET相反,是向服务器发送资源的,服务器通常需要存储此资源。

(5)、DELETE:请求服务器端删除URL指定的资源

(6)、MOVE:请求服务器将指定的页面移至另一个网络地址

(7)、OPTIONS:探测服务器端对请求的URL所支持使用的请求方法

(8)、TRACE:跟一次请求中间所经历的代理服务器,防火墙或网关等。

HTTP的状态码:

1XX:信息性状态码,用于指定客户端相应的某些操作

2XX:成功状态码

3XX:重定向的状态码:有时会返回的是一个新地址,而非结果

4XX:客户端类错误,如请求的资源不存在,或者没有权限访问请求资源

5XX:服务器类的错误信息。

介绍常用的状态码说明

200:服务器成功返回网页。

201:CREATED上传文件成功后显示

301:永久重定向,返回一个新地址,并告诉客户端所请求的地址将永久移动到新地址中去

302:临时重定向,临时放到某个地方,会在响应报文中使用“Location”指定

304:Not Modified,资源没有做任何修改,(用于缓存信息的校验值与服务器对比)

403:Forbidden 请求呗拒绝

404:Not Found请求的资源不存在

405:Method Not Allowed,请求方法不被允许,不支持

500:Internal Server Error,服务器内部错误

502:Bad Gateway,代理服务器从上游服务器收到一条伪响应,上一层服务器返回了一个无法理解的报文,所以代理服务器就会表示错误。

503:Service Unavailable,服务暂时不可用。

HTTP首部介绍

通用首部

请求首部

响应首部

实体首部

扩展首部

通用首部

Connection:定义C/S之间关于请求、响应的有关选项

在http1.0 的时候,如果他想使用持久连接,那么他所设置的选项即为

Connection:keep-alive

Cache-Control:缓存控制,实现更精细的缓存控制方式。在http 1.1上比较常见

请求首部

Client-IP :客户端 IP地址

Host :请求的主机,这在实现基于主机名的虚拟主机时很有用

Referer :指明了请求当前资源原始资源的URL,使用referer是可以防盗链

User-Agent:用户代理,一般而言是浏览器

Accept首部:指客户端可以接受哪些编码的类型

Accept:服务端能够发送的媒体的类型

Accetp-Charset:接收的字符集

Accept-Encoding:编码格式

Accept-Lanage:所能接受的语言编码格式

条件式请求首部:(在http1.1中才会用到)

当发送请求时,先问问对方是否满足条件,如果满足条件就请求,不满足就不请求

跟安全相关的请求:

Authorization

Cookie

响应首部

Age:资源响应给你之后可以使用的时长

Server:向客户端说明自己用到的程序名称和版本

协商类的首部:

Vary:首部列表,服务器会根据此列表挑选最适合的版本发给客户端

跟安全相关:

WWW-Authentication

Set-Cookie

实体首部

Location:指明资源的新位置,实现302响应码时通常会用到

Allow:允许对此资源使用的请求方法

内容相关的首部

Content-Encoding

Content-Language

Content-Length

Content-Location:内容所在的位置

Content-Type

缓存相关:

ETag:扩展标签/标记

Expires:过期时间

Last-Modified:最后修改时间

HTTP最常见的请求头如下:

Accept:浏览器可接受的MIME类型;

Accept-Charset:浏览器可接受的字符集;

Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。

Accept-Language:浏览器所希望的语言种类

Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中;

Connection:表示 是否需要持久连接。值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。

Content-Length:表示请求消息正文的长度;

Cookie:这是最重要的请求头信息之一;

Cookie相关的HTTP扩展头

1)Cookie:客户端将服务器设置的Cookie返回到服务器;

2)Set-Cookie:服务器向客户端设置Cookie;

3)Cookie2 (RFC2965)):客户端指示服务器支持Cookie的版本;

4)Set-Cookie2 (RFC2965):服务器向客户端设置Cookie

 

Cookie的流程:

服务器在响应消息中用Set-Cookie头将Cookie的内容回送给客户端,客户端在新的请求中将相同的内容携带在Cookie头中发送给服务器。从而实现会话的保持。

流程如下图所示:

Host:初始URL中的主机和端口;

If-Modified-Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答;

Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。

User-Agent:浏览器类型

HTTP最常见的响应头

HTTP最常见的响应头如下所示:

Allow:服务器支持哪些请求方法(如GET、POST等);

Content-Encoding: 文档的编码(Encode)方法。

Content-Length: 表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。

Content-Type: 表 示后面的文档属于什么MIME类型。

Accept-Ranges: bytes  该响应头表明服务器支持Range请求,以及服务器所支持的单位是字节(这也是唯一可用的单位).我们还能知道:服务器支持断点续传,以及支持同时下载文件的多个部分,也就是说下载工具可以利用范围请求加速下载该文件.Accept-Ranges: none 响应头表示服务器不支持范围请求.

Date:当前的GMT时间。

Expires:指明应该在什么时候认为文档已经过期,从而不再缓存它。

Last-Modified: 文档的最后改动时间。

Location:表示客户应当到哪里去提取文档。

Refresh:表示浏览器应该在多少时间之后刷新文档,以秒计。

HTTP最常见的实体头

实体头用作实体内容的元信息,描述了实体内容的属性,包括实体信息类型,长度,压缩方法,最后一次修改时间,数据有效性等。

Allow:GET,POST

Content-Encoding:文档的编码(Encode)方法,例如:gzip,

Content-Language:内容的语言类型,例如:zh-cn;

Content-Length:表示内容长度,eg:80,可参考“2.5响应头”;

Content-Location:表示客户应当到哪里去提取文档,例如:https://www.dfdf.org/dfdf.html

Content-MD5:MD5 实体的一种MD5摘要,用作校验和。发送方和接受方都计算MD5摘要,接受方将其计算的值与此头标中传递的值进行比较。

Content-Type:标明发送或者接收的实体的MIME类型。Eg:text/html; charset=GB2312       主类型/子类型;