,,http协议详解(超详细)

,,http协议详解(超详细)

HTTP(超文本传输协议)是一种传输协议,用于将超文本从WWW服务器传输到本地浏览器。

http协议学习系列

1.基础概念篇

1.1 介绍

是HTTP超文本传输协议的缩写。它的开发是万维网联盟和互联网工作组IETF(互联网工程任务组)合作的结果。(他们)最终发布了一系列RFC,RFC 1945定义了HTTP/1.0版本。最著名的是RFC 2616。RFC 2616定义了今天普遍使用的版本——HTTP 1.1。

HTTP(超文本传输协议)是一种传输协议,用于将超文本从WWW服务器传输到本地浏览器。可以让浏览器更高效,减少网络传输。它不仅能保证计算机正确、快速地传输超文本文档,还能决定先显示传输文档的哪一部分(如文本先于图形)。

HTTP是应用层协议,由请求和响应组成,是标准的客户机-服务器模型。HTTP是一种无状态协议。

1.2 在TCP/IP协议栈中的位置

HTTP通常通过TCP协议承载,有时通过TLS或SSL协议层。这时,它就成了我们常说的HTTPS。如下图所示:

HTTP的默认端口号为80,HTTPS的默认端口号为443。

1.3 HTTP的请求响应模型

HTTP协议总是客户端发起请求,服务器发回响应。见下图:

这就限制了HTTP协议的使用,无法实现在客户端没有发起请求的情况下,服务器向客户端推送消息。

HTTP是一个无状态协议,这个请求和同一个客户端的最后一个请求没有对应关系。

1.4 工作流程

一个HTTP操作称为一个事务,它的工作过程可以分为四个步骤:

1)首先,客户端和服务器需要建立连接。只要你点击一个超链接,HTTP的工作就开始了。

2)连接建立后,客户端以统一资源标识符(URL)和协议版本号的格式向服务器发送请求,后面是包括请求修饰符、客户端信息和可能内容的MIME信息。

3)服务器收到请求后,给出相应的响应信息,响应信息的格式是一个状态行,包括信息的协议版本号、成功或错误代码,后面是MIME信息,包括服务器信息、实体信息和可能的内容。

4)客户端接收服务器返回的信息,通过浏览器显示在用户的显示屏上,然后客户端断开与服务器的连接。

如果在上述过程的某个步骤中出现错误,错误信息将通过显示屏输出返回给客户端。对于用户来说,这些过程都是由HTTP自己完成的。用户只需用鼠标点击,等待信息显示。

1.5 使用Wireshark抓TCP、http包

打开Wireshark,选择工具栏上的“捕获”-“选项”。接口选择如图1所示:

图1设置捕获选项

一般读者只需要选择顶部的下拉框,选择合适的设备,然后点击“捕获过滤器”,这里选择的是“HTTP TCP端口(80)”。选择后,点击上图中的“开始”开始捕获数据包。

图2选择捕获过滤器

例如,在浏览器中打开http://image.baidu.com/,并抓取如图3所示的包:

图3抓住包裹

在上图中,可以清楚地看到客户端浏览器(ip 192.168.2.33)与服务器的交互过程:

1)No1:浏览器(192.168.2.33)向服务器(220.181.50.118)发送连接请求。这是TCP三次握手的第一步。从图中可以看出,它是SYN,seq:X (x=0)。

2)No2:服务器(220.181.50.118)响应浏览器(192.168.2.33)请求,请求确认,为SYN,ACK,seq:y(y (y为0),ack: x1 (1)。这是三次握手的第二步;

3)No3:浏览器(192.168.2.33)响应服务器(220.181.50.118)的确认,连接成功。Is: ACK,在这种情况下seq: x 1 (1)和ack: y 1 (1)。这是三次握手的第三步;

4)No4:浏览器(192.168.2.33)发送页面HTTP请求;

5)No5:服务器(220.181.50.118)确认;

6)No6:服务器(220.181.50.118)发送数据;

7)No7:客户端浏览器确认(192 . 168 . 2 . 33);

8)No14:客户端(192.168.2.33)发送图片HTTP请求;

9)No15:服务器(220.181.50.118)发送一个状态响应码200 OK。

……

1.6 头域

每个头域由域名、冒号(:)和域值组成。域名不区分大小写。域值前可以添加任意数量的空格字符,头域可以扩展成多行。在每行的开头,至少使用一个空格或制表符。

在数据包捕获的图片中,当No14打开时,可以看到如图4所示:

图4 http请求消息

响应消息如图5所示:

图5 http状态响应信息

1.6.1 host头域

主机头字段指定所请求资源的互联网主机和端口号,并且必须指示所请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统将返回400状态代码。

图5中主机的行为:

1.6.2 Referer头域

Referer头字段允许客户端指定请求uri的源资源地址,这可以允许服务器生成可用于登录、优化缓存等的回退链表。它还允许出于维护目的而追踪被废除的或错误的连接。如果请求的uri没有自己的uri地址,则无法发送引用。如果指定了部分uri地址,它应该是相对地址。

在图4中,Referer行的内容是:

1.6.3 User-Agent头域

用户代理头字段的内容包含请求用户的信息。

在图4中,用户代理行的内容是:

1.6.4 Cache-Control头域

Cache-Control指定请求和响应所遵循的缓存机制。在请求消息或响应消息中设置Cache-Control不会修改其他消息处理中的缓存处理。所请求的高速缓存指令包括无高速缓存、无存储、最大寿命、最大失效、最小新鲜、仅当高速缓存时,并且响应消息中的指令包括公共、私有、无高速缓存、无存储、无转换、必须重新验证、代理重新验证、最大。

图5中的报头字段是:

1.6.5 Date头域

日期头字段指示消息发送的时间,时间的描述格式由rfc822定义。例如,日期:2001年12月31日星期一04:25:57GMT。当日期描述的时间代表世界标准时,在转换当地时间时,需要知道用户的时区。

在图5中,这个头字段如下图所示:

1.7 HTTP的几个重要概念

1.7.1连接:Connection

传输层的实际循环,它建立在相互通信的两个应用程序之间。

在http1.1中,请求和响应头中都可能有一个连接头。这个头表示客户端和服务器通信时如何处理长链接。

在http1.1中,默认情况下,客户端和服务器都支持长链接。如果客户端使用http1.1协议,但不想使用长链接,则需要指明connection的值为close在标题中;如果服务器端也不想支持长链接,也应该在响应中明确说明connection的值是close。无论是请求还是响应的头包含值为close的连接,都表明当天处理完请求后,当前使用的tcp链接将被断开。当客户端将来发出新请求时,它必须创建一个新的tcp链接。

1.7.2消息:Message

HTTP通信的基本单位,由结构化的八位字节序列组成,通过连接传输。

1.7.3请求:Request

从客户端到服务器的请求消息包括应用于资源的方法、资源的标识符和协议的版本号。

1.7.4响应:Response

从服务器返回的消息包括HTTP协议的版本号、请求的状态(如“成功”或“未找到”)以及文档的MIME类型。

1.7.5资源:Resource

由URI标识的网络数据对象或服务。

1.7.6实体:Entity

来自服务资源的数据或反射的特殊表示,可以包含在请求或响应消息中。实体包括标题信息和实体本身的内容。

1.7.7客户机:Client

为发送请求而建立连接的应用程序。

1.7.8用户代理:UserAgent

初始化请求客户端。它们是浏览器、编辑器或其他用户工具。

1.7.9服务器:Server

接受连接并向请求返回信息的应用程序。

1.7.10源服务器:Originserver

是一种服务器,可以在其上驻留或创建给定的资源。

1.7.11代理:Proxy

一种中间程序,可以充当服务器或客户端,为其他客户端创建请求。该请求在内部或通过可能的翻译被传输到其他服务器。在发送请求消息之前,代理必须解释它并在可能的情况下重写它。

代理通常用作客户端通过防火墙的入口,也可以用作帮助应用程序来处理用户代理通过协议无法完成的请求。

1.7.12网关:Gateway

作为其他服务器的中介的服务器。与代理不同,网关接受请求,就好像它是所请求资源的源服务器一样;发出请求的客户端没有意识到它正在与网关打交道。

网关经常作为服务器穿越防火墙的网关,也可以作为协议翻译器访问存储在非HTTP系统中的资源。

1.7.13通道:Tunnel

是一个中间程序,充当两个连接的中继。一旦激活,该通道就被认为不属于HTTP通信,尽管该通道可能由HTTP请求初始化。当中继连接的两端都关闭时,通道消失。当门户必须存在或中介无法解释中继通信时,通常使用通道。

1.7.14缓存:Cache

反应信息的本地存储。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: