解读HTTPHTTP工作原理及请求-响应全过程
解读HTTPHTTP工作原理及请求-响应全过程
HTTP的发展历程可以追溯到1990年,当时由蒂姆·伯纳斯-李(Tim Berners-Lee)提出。随着全球网络的迅速发展,为了更好地满足用户需求,万维网联盟(World Wide Web Consortium)成立,并组织了Internet工程任务组(IETF)的相关小组,致力于进一步完善和发布HTTP协议的不断更新版本。
最初的HTTP协议版本为HTTP/0.9,其功能较为简单,主要用于传输超文本信息。随着互联网的普及和应用场景的不断扩展,HTTP协议经历了多次重要的更新和演进,逐步向更加高效和安全的方向发展。其中,HTTP/1.0和HTTP/1.1版本带来了一系列改进,如持久连接、虚拟主机、缓存机制等,从而提升了协议的性能和稳定性。
随着互联网技术的不断创新和发展,为了应对日益增长的网络负载和提高用户体验,HTTP/2协议应运而生。HTTP/2采用了多路复用技术、头部压缩和服务器推送等新特性,进一步提升了网络性能,实现了更快的页面加载速度和更低的延迟。
在HTTP/2的基础上,HTTP/3协议推出,引入了基于UDP的传输协议QUIC(Quick UDP Internet Connections)。QUIC协议通过减少握手次数和降低网络延迟,进一步提高了网络连接的速度和稳定性,为用户提供了更加流畅的网络体验。
HTTP工作原理
HTTP是基于客户端/服务端(C/S)的架构模型。在HTTP请求及响应过程中,通常包括以下五个步骤:首先,客户端与服务器建立TCP连接;其次,客户端发送HTTP请求,该请求由请求行、请求头部、空行和请求数据四部分组成;随后,服务器接受请求并返回HTTP响应,该响应包含状态行、响应头部、空行和响应正文四部分;然后,TCP连接被释放;最后,客户端浏览器解析响应报文并显示,按照状态行、响应头部、响应正文的顺序进行解析,如正文数据为HTML,则客户端根据HTML的语法对其进行格式化,并在浏览器窗口中显示。
HTTP特点描述
无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求后就断开连接。媒体独立:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器通过头部字段指定适合的MIME Type内容类型。无状态:无状态是指协议对于事务处理没有记忆能力,这样做利于更快地处理大量事务,确保协议的可伸缩性。
客户端请求消息
客户端发送的HTTP请求消息包括由请求行、请求头部、空行和请求数据四个部分组成,下图给出了请求报文的一般格式。
客户端请求消息:请求行
请求行由请求方法字段、URI字段和HTTP协议版本字段3个字段组成。
请求方法:HTTP使用的请求方法,比如常见的GET/POST等。HTTP客户程序(例如浏览器),向服务器发送请求的时候必须指明请求类型。
URI:URI是一个统一资源标识符,它标识了请求所针对的资源。
协议版本:协议版本旨在允许发送方指示消息的格式和理解后续HTTP通信的能力
HTTP请求方法
根据HTTP标准,HTTP请求可以使用多种请求方法。HTTP1.0定义了三种请求方法:GET、POST和HEAD方法。HTTP1.1新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE和CONNECT方法。
客户端请求消息:请求头部
请求头部允许客户端向服务器传递关于请求的附加信息。这些字段充当请求修饰符,其语义相当于编程语言方法调用中的参数。
请求头部字段
客户端请求消息:请求数据
空行:它的作用是通过一个空行,告诉服务器请求头部到此为止。
请求数据:若方法字段是GET,则此项为空,没有数据。若方法字段是POST,则通常来说此处放置的是要提交的数据。
服务器响应消息
HTTP响应消息由四个部分组成,分别是:状态行、响应头部、空行和响应正文。
服务器响应消息:状态行
响应消息的第一行是状态行,由协议版本、状态码和原因短语组成,每个元素由空格字符分隔。
协议版本:协议版本旨在允许发送方指示消息的格式及其理解后续HTTP通信的能力。
状态码:一个3位整数结果码,用于向客户端返回操作结果。
原因短语:旨在对状态码进行简短的文本描述,帮助理解。
状态码
HTTP状态码(HTTP Status Code)是服务器响应状态的3位数字码,用于向客户端返回操作结果。
服务器响应消息:响应头部
响应头部允许服务器传递关于响应的附加信息,这些头部字段提供了关于服务器的相关信息以及URI所标识资源的信息。
响应头部常见字段
服务器响应消息:响应正文
空行:它的作用是通过一个空行,告诉客户端响应头部到此为止。
响应正文:响应的消息体,如果客户端请求的数据类型是纯数据则返回纯数据。如果请求的是HTML页面,则返回HTML代码。
客户端请求消息:报文示例
客户端向服务器发送含有用户名密码的请求消息,进行登录认证。
服务器响应消息:报文示例
服务器向客户端返回响应消息,认证成功。