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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。