HTTP


HTTP(超文本传输协议,HyperText Transfer Protocol)是一种用于分布式、协作式、超媒体信息系统的应用层协议。

HTTP 是万维网(WWW)的数据通信的基础,设计目的是确保客户端与服务器之间的通信,是互联网上最常用的协议之一。

HTTP 是一个基于 TCP/IP 通信协议来传递数据的(HTML 文件、图片文件、查询结果等)。

设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法,通过 HTTP 或者 HTTPS 协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。


HTTP 的请求-响应

HTTP 的基本工作原理是客户端(通常是 web 浏览器)向服务器发送请求,服务器接收到请求后,返回相应的资源。这些资源可以是网页、图像、音频文件、视频等。

HTTP 使用了客户端-服务器模型,其中客户端发送请求,服务器返回响应。

HTTP 的请求-响应模型通常由以下几个步骤组成:

  • 建立连接:客户端与服务器之间建立连接。在传统的 HTTP 中,这是基于 TCP/IP 协议的。最近的 HTTP/2 和 HTTP/3 则使用了更先进的传输层协议,例如基于 TCP 的二进制协议(HTTP/2)或基于 UDP 的 QUIC 协议(HTTP/3)。

  • 发送请求:客户端向服务器发送请求,请求中包含要访问的资源的 URL、请求方法(GET、POST、PUT、DELETE 等)、请求头(例如,Accept、User-Agent)以及可选的请求体(对于 POST 或 PUT 请求)。

  • 处理请求:服务器接收到请求后,根据请求中的信息找到相应的资源,执行相应的处理操作。这可能涉及从数据库中检索数据、生成动态内容或者简单地返回静态文件。

  • 发送响应:服务器将处理后的结果封装在响应中,并将其发送回客户端。响应包含状态码(用于指示请求的成功或失败)、响应头(例如,Content-Type、Content-Length)以及可选的响应体(例如,HTML 页面、图像数据)。

  • 关闭连接:在完成请求-响应周期后,客户端和服务器之间的连接可以被关闭,除非使用了持久连接(如 HTTP/1.1 中的 keep-alive)。


HTTP 方法

HTTP 方法指定了客户端可以对服务器上的资源执行哪些动作。

主要的HTTP方法有:

  • GET:请求从服务器获取指定资源。这是最常用的方法,用于访问页面。

  • POST:请求服务器接受并处理请求体中的数据,通常用于表单提交。

  • PUT:请求服务器存储一个资源,并用请求体中的内容替换目标资源的所有内容。

  • DELETE:请求服务器删除指定的资源。

  • HEAD:与 GET 类似,但不获取资源的内容,只获取响应头信息。


HTTP 状态码

HTTP状态码是服务器对客户端请求的响应。

状态码分为五类:

  • 1xx(信息性状态码):表示接收的请求正在处理。

  • 2xx(成功状态码):表示请求正常处理完毕。

  • 3xx(重定向状态码):需要后续操作才能完成这一请求。

  • 4xx(客户端错误状态码):表示请求包含语法错误或无法完成。

HTTP状态码列表:

状态码

状态码英文名称

中文描述

200

OK

请求成功。一般用于GET与POST请求

204

No Content

无内容。服务器成功处理,但未返回内容

206

Partial Content

部分内容。服务器成功处理了部分GET请求

301

Moved Permanently

永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替

302

Found

临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI

304

Not Modified

未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源

307

Temporary Redirect

临时重定向。与302类似。使用GET请求重定向

400

Bad Request

客户端请求的语法错误,服务器无法理解

401

Unauthorized

请求要求用户的身份认证

403

Forbidden

服务器理解请求客户端的请求,但是拒绝执行此请求

404

Not Found

服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面

408

Request Time-out

服务器等待客户端发送的请求时间过长,超时

500

Internal Server Error

服务器内部错误,无法完成请求

501

Not Implemented

服务器不支持请求的功能,无法完成请求

503

Service Unavailable

由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中


HTTP 版本

HTTP 有多个版本,目前广泛使用的是 HTTP/1.1 和 HTTP/2,以及正在逐步推广的 HTTP/3。

  • HTTP/1.1:支持持久连接,允许多个请求/响应通过同一个 TCP 连接传输,减少了建立和关闭连接的消耗。

  • HTTP/2:基于二进制分帧,支持多路复用,允许同时通过单一的 HTTP/2 连接发起多重的、独立的、双向的交流。

  • HTTP/3:基于 QUIC 协议,旨在减少网络延迟,提高传输速度和安全性。

安全性


HTTP 本身是不安全的,因为传输的数据未经加密,可能会被窃听或篡改。为了解决这个问题,引入了 HTTPS(下一章节会详细说明),即在 HTTP 上加入 SSL/TLS 协议,为数据传输提供了加密和身份验证。

HTTP/HTTPS 简介

HTTP(超文本传输协议,Hypertext Transfer Protocol)是一种用于从网络传输超文本到本地浏览器的传输协议。它定义了客户端与服务器之间请求和响应的格式。HTTP 工作在 TCP/IP 模型之上,通常使用端口 80

HTTPS(超文本传输安全协议,Hypertext Transfer Protocol Secure)是 HTTP 的安全版本,它在 HTTP 下增加了 SSL/TLS 协议,提供了数据加密、完整性校验和身份验证。HTTPS 通常使用端口 443

HTTP

HTTP 协议是 Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网( WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。

HTTP 是一个基于 TCP/IP 通信协议来传递数据(HTML 文件、图片文件、查询结果等)。

HTTPS

HTTPS 协议是 HyperText Transfer Protocol Secure(超文本传输安全协议)的缩写,是一种通过计算机网络进行安全通信的传输协议。

HTTP 本身是不安全的,因为传输的数据未经加密,可能会被窃听或篡改,为了解决这个问题,引入了 HTTPS,即在 HTTP 上加入 SSL/TLS 协议,为数据传输提供了加密和身份验证。

HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包,HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换资料的隐私与完整性。

HTTP 的 URL 是由 http:// 起始与默认使用端口 80,而 HTTPS 的 URL 则是由 https:// 起始与默认使用端口443


HTTP 工作原理

HTTP 协议工作于客户端-服务端架构上。

HTTP 工作过程通常如下:

  1. 客户端发起请求:用户通过客户端(如浏览器)输入 URL,客户端向服务器发起一个 HTTP 请求。

  2. 服务器处理请求:服务器接收到请求后,根据请求的类型(如GET、POST等)和请求的资源,进行相应的处理。

  3. 服务器返回响应:服务器将处理结果包装成HTTP响应消息,发送回客户端。

  4. 客户端渲染页面:客户端接收到响应后,根据响应内容(如HTML、图片等)渲染页面,展示给用户。

Web 服务器有:Nginx 服务器,Apache 服务器,IIS 服务器(Internet Information Services)等。

HTTP 默认端口号为 80,但是你也可以改为 8080 或者其他端口。

HTTP 三点注意事项:

  • HTTP 是无连接:无连接的含义是限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接,采用这种方式可以节省传输时间。

  • HTTP 是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送,客户端以及服务器指定使用适合的 MIME-type 内容类型。

  • HTTP 是无状态:HTTP 协议是无状态协议,无状态是指协议对于事务处理没有记忆能力,缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大,另一方面,在服务器不需要先前信息时它的应答就较快。

以下图表展示了 HTTP 协议通信流程:

cgiarch


HTTPS 作用

HTTPS 的主要作用是在不安全的网络上创建一个安全信道,并可在使用适当的加密包和服务器证书可被验证且可被信任时,对窃听和中间人攻击提供合理的防护。

HTTPS 的信任基于预先安装在操作系统中的证书颁发机构(CA)。

因此,与一个网站之间的 HTTPS 连线仅在这些情况下可被信任:

  • 浏览器正确地实现了 HTTPS 且操作系统中安装了正确且受信任的证书颁发机构;

  • 证书颁发机构仅信任合法的网站;

  • 被访问的网站提供了一个有效的证书,也就是说它是一个由操作系统信任的证书颁发机构签发的(大部分浏览器会对无效的证书发出警告);

  • 该证书正确地验证了被访问的网站(例如,访问 https://www.runoob.com 时收到了签发给 www.runoob.com 而不是其它域名的证书);

  • 此协议的加密层(SSL/TLS)能够有效地提供认证和高强度的加密。

Google Chrome、Internet Explorer 和 Firefox 等浏览器在网站含有由加密和未加密内容组成的混合内容时,会发出警


HTTP 与 HTTPS 区别

虽然 HTTP 和 HTTPS 在名称上非常相似,但它们在安全性上有本质的区别:HTTPS通过使用SSL/TLS协议,为数据传输提供了加密和完整性校验,从而保护了用户的隐私和数据安全。随着网络安全意识的提高,越来越多的网站开始使用HTTPS来保护用户数据。

同时,主流的浏览器和搜索引擎也在鼓励网站使用 HTTPS。

因此,对于涉及敏感信息传输的网站,建议使用 HTTPS 来提高安全性。

主要区别如下:

  • 加密

    • HTTP:数据传输过程中不加密,容易被截获和篡改。

    • HTTPS:使用SSL/TLS协议对传输的数据进行加密,保护数据传输过程中的安全性。

  • 端口

    • HTTP:默认使用端口80。

    • HTTPS:默认使用端口443。

  • 安全性

    • HTTP:不提供数据加密,安全性较低。

    • HTTPS:提供数据加密和完整性校验,安全性较高。

  • 证书

    • HTTP:不需要证书。

    • HTTPS:需要SSL证书来启用加密,并验证服务器的身份。

  • 性能

    • HTTP:由于不加密数据,性能略高于HTTPS。

    • HTTPS:由于需要进行加密和解密,可能会有一定的性能开销。

  • 搜索引擎优化(SEO)

    • HTTP:搜索引擎可能会对没有使用HTTPS的网站进行降权。

    • HTTPS:搜索引擎倾向于优先索引和展示使用HTTPS的网站。

  • 浏览器显示

    • HTTP:在大多数现代浏览器中,HTTP网站通常显示为"不安全"。

    • HTTPS:浏览器会显示一个锁形图标,表示网站是安全的。

  • 成本

    • HTTP:通常免费。

    • HTTPS:需要购买SSL证书,可能会有一定的成本。

  • 应用场景

    • HTTP:适用于不需要传输敏感信息的网站,如新闻网站、博客等。

    • HTTPS:适用于需要传输敏感信息的网站,如网上银行、在线购物、电子邮件等。

HTTP 请求方法

HTTP 请求方法定义了客户端和服务器之间的通信方式。

根据 HTTP 标准,HTTP 请求可以使用多种请求方法。

以下是常见的 HTTP 请求方法列表:

序号

方法

描述

1

GET

从服务器获取资源。用于请求数据而不对数据进行更改。例如,从服务器获取网页、图片等。

2

POST

向服务器发送数据以创建新资源。常用于提交表单数据或上传文件。发送的数据包含在请求体中。

3

PUT

向服务器发送数据以更新现有资源。如果资源不存在,则创建新的资源。与 POST 不同,PUT 通常是幂等的,即多次执行相同的 PUT 请求不会产生不同的结果。

4

DELETE

从服务器删除指定的资源。请求中包含要删除的资源标识符。

5

PATCH

对资源进行部分修改。与 PUT 类似,但 PATCH 只更改部分数据而不是替换整个资源。

6

HEAD

类似于 GET,但服务器只返回响应的头部,不返回实际数据。用于检查资源的元数据(例如,检查资源是否存在,查看响应的头部信息)。

7

OPTIONS

返回服务器支持的 HTTP 方法。用于检查服务器支持哪些请求方法,通常用于跨域资源共享(CORS)的预检请求。

8

TRACE

回显服务器收到的请求,主要用于诊断。客户端可以查看请求在服务器中的处理路径。

9

CONNECT

建立一个到服务器的隧道,通常用于 HTTPS 连接。客户端可以通过该隧道发送加密的数据。

各个版本定义的请求方法

HTTP/1.0

HTTP/1.0 定义了以下三种请求方法:

  • GET - 请求指定的资源。

  • POST - 提交数据以处理请求。

  • HEAD - 请求资源的响应头信息。

HTTP/1.1

HTTP/1.1 引入了更多的方法:

  • GET - 请求指定的资源。

  • POST - 提交数据以处理请求。

  • HEAD - 请求资源的响应头信息。

  • PUT - 上传文件或者更新资源。

  • DELETE - 删除指定的资源。

  • OPTIONS - 请求获取服务器支持的请求方法。

  • TRACE - 回显服务器收到的请求,主要用于诊断。

  • CONNECT - 建立一个隧道用于代理服务器的通信,通常用于 HTTPS。

HTTP/2

HTTP/2 基本上沿用了 HTTP/1.1 的方法,但对协议进行了优化,提高了传输效率和速度。HTTP/2 也引入了新的特性,如多路复用、头部压缩和服务器推送等。

HTTP/3

HTTP/3 基于 QUIC 协议实现,继续使用 HTTP/2 的方法。HTTP/3 主要改进了传输层,使用 UDP 代替 TCP 以提高传输速度和可靠性。

HTTP 响应头信息

HTTP 响应头信息是服务器在响应客户端的HTTP请求时发送的一系列头字段,它们提供了关于响应的附加信息和服务器的指令。

以下是一些常见的 HTTP 响应头信息:

响应头信息(英文)

响应头信息(中文)

描述

Date

日期

响应生成的日期和时间。例如:Wed, 18 Apr 2024 12:00:00 GMT

Server

服务器

服务器软件的名称和版本。例如:Apache/2.4.1 (Unix)

Content-Type

内容类型

响应体的媒体类型(MIME类型),如text/html; charset=UTF-8, application/json等。

Content-Length

内容长度

响应体的大小,单位是字节。例如:3145

Content-Encoding

内容编码

响应体的压缩编码,如 gzip, deflate等。

Content-Language

内容语言

响应体的语言。例如:zh-CN

Content-Location

内容位置

响应体的 URI。例如:/index.html

Content-Range

内容范围

响应体的字节范围,用于分块传输。例如:bytes 0-999/8000

Cache-Control

缓存控制

控制响应的缓存行为, 如 no-cache 表示必须重新请求。

Connection

连接

管理连接的选项,如keep-aliveclose,keep-alive 表示连接不会在传输后关闭。。

Set-Cookie

设置 Cookie

设置客户端的 cookie。例如:sessionId=abc123; Path=/; Secure

Expires

过期时间

响应体的过期日期和时间。例如:Thu, 18 Apr 2024 12:00:00 GMT

Last-Modified

最后修改时间

资源最后被修改的日期和时间。例如:Wed, 18 Apr 2024 11:00:00 GMT

ETag

实体标签

资源的特定版本的标识符。例如:"33a64df551425fcc55e6"

Location

位置

用于重定向的 URI。例如:/newresource

Pragma

实现特定的指令

包含实现特定的指令,如 no-cache

WWW-Authenticate

认证信息

认证信息,通常用于HTTP认证。例如:Basic realm="Access to the site"

Accept-Ranges

接受范围

指定可接受的请求范围类型。例如:bytes

Age

经过时间

响应生成后经过的秒数,从原始服务器生成到代理服务器。例如:24

Allow

允许方法

列出资源允许的 HTTP 方法 。例如:GET, POST,HEAD等

Vary

变化

告诉下游代理如何使用响应头信息来确定响应是否可以从缓存中获取。例如:Accept

Strict-Transport-Security

严格传输安全

指示浏览器仅通过 HTTPS 与服务器通信。例如:max-age=31536000; includeSubDomains

X-Frame-Options

框架选项

控制页面是否允许在框架中显示,防止点击劫持攻击。例如:SAMEORIGIN

X-Content-Type-Options

内容类型选项

指示浏览器不要尝试猜测资源的 MIME 类型。例如:nosniff

X-XSS-Protection

XSS保护

控制浏览器的 XSS 过滤和阻断。例如:1; mode=block

Public-Key-Pins

公钥固定

HTTP 头信息,用于HTTP公共密钥固定(HPKP),一种安全机制,用于防止中间人攻击。例如:pin-sha256="base64+primarykey"; pin-sha256="base64+backupkey"; max-age=expireTime

这些响应头信息在实际的 HTTP 响应中可能会有所不同,具体值取决于服务器的配置和处理逻辑。