初识 HTTP 协议

154 阅读6分钟

一、HTTP协议概述

HTTP是HyperText Transfer Protocol(超文本传输协议)的缩写,用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。HTTP是一个应用层协议,通常建立在传输层协议TCP之上。现在常用的HTTPS是HTTP在TCP协议建立后再进行SSL/TSL安全套接层连接的基础上建立的。

二、HTTP协议的工作原理

HTTP协议基于请求-响应模型工作。客户端(通常是浏览器)向服务器发送请求数据,服务器对数据进行处理,并根据请求做出响应。一次请求需要对应一次响应。

  1. 请求报文:客户端的HTTP报文称为请求报文,由请求行、请求头部、空行(如果有的话)和请求数据(如果有的话)组成。

    • 请求行:描述客户端的请求方式(如GET、POST等)、请求资源的名称(即URI)以及使用的HTTP协议版本号。
    • 请求头部:用于描述客户端请求的Host、客户端的环境信息(如浏览器类型、字符集、压缩格式等)以及其他可能的自定义头字段。
    • 空行:用于分隔请求头部和请求数据(如果有的话)。
    • 请求数据:作为请求的有效载荷数据被传输,通常用于POST、PUT等请求方法中。
  2. 响应报文:服务器端的HTTP报文称为响应报文,由状态行、响应头部、空行(如果有的话)和响应数据(如果有的话)组成。

    • 状态行:描述服务器对请求的处理结果,包括HTTP协议版本号、状态码以及原因短语。
    • 响应头部:用于描述服务器的基本信息(如服务器型号)、数据的描述(如内容类型、内容长度、压缩格式等)以及告诉客户端如何处理数据的其他信息。
    • 空行:用于分隔响应头部和响应数据(如果有的话)。
    • 响应数据:服务器向客户端回送的数据,通常由HTML资源等组成。

三、HTTP协议的主要特点

  1. 灵活可拓展:HTTP协议允许自定义头字段以实现特定功能。
  2. 可靠传输:HTTP协议建立在TCP协议之上,因此具有TCP协议的可靠传输特性。
  3. 无状态连接:HTTP协议本身不对请求和响应之间的通信状态进行保存。这意味着每次请求都是独立的,服务器不会记住之前客户端的请求信息。这种设计简化了协议的实现,提高了处理效率,但也可能导致一些需要保持状态的场景变得复杂(如用户登录状态保持)。为了解决这个问题,可以使用Cookie技术或会话机制。
  4. 请求-应答模式:HTTP协议采用请求-应答模式进行通信。客户端发送请求后,服务器必须返回响应。这种模式使得客户端可以主动发起请求并获取所需的数据或服务。

四、HTTP协议的状态码

HTTP状态码用于表示服务器对客户端请求的处理结果。状态码分为五类,从1xx到5xx,分别表示不同的处理状态:

  1. 1xx:表示目前是协议处理的中间状态,还需要后续操作。这类状态码属于提示信息,实际能够用到的时候很少。
  2. 2xx:表示成功状态。其中200 OK是最常见的成功状态码,表示服务器如客户端所期望的那样返回了处理结果。
  3. 3xx:表示重定向状态,资源位置发生变动,需要重新请求。其中301 Moved Permanently表示永久重定向,302 Found表示临时重定向。
  4. 4xx:表示客户端请求报文有误。其中400 Bad Request是一个通用的错误码,表示请求报文有错误但具体原因不明确;403 Forbidden表示服务器禁止访问资源;404 Not Found表示资源在本服务器上未找到。
  5. 5xx:表示服务器端发生错误。其中500 Internal Server Error是一个通用的错误码,表示服务器内部发生错误但具体原因不明确;501 Not Implemented表示客户端请求的功能还不支持;502 Bad Gateway表示服务器作为网关或代理时访问后端服务器时发生了错误;503 Service Unavailable表示服务器当前很忙暂时无法响应服务。

五、HTTPS协议

HTTPS是运行在SSL/TLS协议上的HTTP协议,相当于“HTTP+SSL/TLS+TCP/IP”。HTTPS协议通过加密传输数据来保证数据的安全性,防止数据在传输过程中被窃取或篡改。SSL/TLS协议提供了数据传输的加密、完整性校验以及身份认证等功能。

六、HTTP/1.1与HTTP/2的区别

  1. 持久连接:HTTP/1.1协议默认所有的连接都是持久连接,允许客户端与web服务器建立连接后,在请求得到一次响应后,仍然会等待下一次请求,直到一段时间后没有请求发送,连接才会断开。而HTTP/1.0协议中,每次请求都需要建立一个新的TCP连接,在请求得到响应后连接即断开。持久连接减少了TCP连接的重复建立和断开造成的额外开销,提高了web页面的响应速度。
  2. 管线化:HTTP/1.1协议支持管线化方式发送请求,即在一个TCP连接上可以连续发送多个请求而不需要等待每个请求的响应。而HTTP/1.0协议不支持管线化。
  3. 头部压缩:HTTP/2协议对请求和响应的头部进行了压缩处理,减少了头部数据的传输量,提高了传输效率。而HTTP/1.1协议没有头部压缩功能。
  4. 二进制传输:HTTP/2协议采用了二进制传输方式,将请求和响应封装成帧(frame)进行传输。这种传输方式使得HTTP/2协议能够更高效地处理数据交换和流控制等问题。而HTTP/1.1协议采用文本传输方式,传输效率相对较低。