【一篇读懂http】https(超文本传输协议)超详细解读

目录

1. https介绍

2.http的消息结构

请求(Request):

响应(Response):

3.http的请求方法

1. GET

2. HEAD

3. POST

4. PUT

5. DELETE

6. CONNECT

7. OPTIONS

8. TRACE

9. PATCH

4.http响应头信息

1. 状态行

2. 通用头部字段

3. 实体头部字段

4. 其他头部字段

5.http状态码

1. 1xx(信息类):请求已被接收,需要继续处理。

2. 2xx(成功):请求已成功被服务器接收、理解、并接受。

3. 3xx(重定向):需要客户端采取进一步的操作才能完成请求。

4. 4xx(客户端错误):客户端可能发生了错误,无法完成请求。

5. 5xx(服务器错误):服务器在尝试处理请求时发生错误。

6.http2相关介绍


版权所有,翻印必究。

All rights reserved; those responsible for unauthorized reproduction will be prosecuted。


1. https介绍

HTTPS(全称:HyperText Transfer Protocol over Secure Socket Layer)是一个安全的HTTP数据传输协议。它实际上是在HTTP下加入了SSL层。HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

HTTPS相比HTTP多了一层SSL/TLS。SSL(Secure Socket Layer,安全套接字层)是1994年由Netscape所研发的,SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。TLS(Transport Layer Security,传输层安全)其前身是SSL,它最初的几个版本(SSL 1.0、SSL 2.0、SSL 3.0)由网景公司开发,1999年从3.1开始被IETF标准化并改名,发展至今已经有TLS 1.0、TLS 1.1、TLS 1.2三个版本。SSL3.0和TLS1.0由于存在安全漏洞,已经很少被使用到。TLS 1.3改动会比较大,目前还在草案阶段,目前使用最广泛的是TLS 1.1、TLS 1.2。

HTTPS通信主要包括几个节点,发起请求、验证身份、协商秘钥、加密会话。具体流程如下(此例子只有客户端对服务端的单向验证):
1. 客户端向服务端发起建立https请求。
2. 服务器向客户端发送数字证书。

HTTPS的目标是为了保证数据安全。近几年,Google、Baidu、Facebook等这样的互联网巨头,不谋而合地开始大力推行HTTPS,国内外的大型互联网公司很多也都已经启用了全站HTTPS,这也是未来互联网发展的趋势。为鼓励全球网站的HTTPS实现,一些互联网公司都提出了自己的要求:
1. Google已调整搜索引擎算法,让采用HTTPS的网站在搜索中排名更靠前;
2. 从2017年开始,Chrome浏览器已把采用HTTP协议的网站标记为不安全网站;
3. 苹果要求2017年App Store中的所有应用都必须使用HTTPS加密连接;
4. 当前国内炒的很火热的微信小程序也要求必须使用HTTPS协议;
5. 新一代的HTTP/2协议的支持需以HTTPS为基础。


2.http的消息结构

HTTP消息是服务器和客户端之间交换数据的方式。有两种类型的消息:请求(request)和响应(response)。

请求(Request):

  • 请求行(Request Line):包含一个HTTP方法(如GET、POST等),描述要执行的动作,请求目标(通常是一个URL),以及HTTP版本。
  • 请求头部(Header):包含一些元数据,如User-Agent、Accept-Type等,这些元数据可以进一步定义请求或描述消息主体。
  • 空行:指示所有关于请求的元数据已经发送完毕。
  • 请求数据(Body):包含与请求相关的数据,如HTML表单内容。

响应(Response):

  •  状态行(Status Line):包含协议版本(通常为HTTP/1.1),状态码(如200、404等),以及状态文本(如OK、Not Found等)。
  • 消息报头(Header):提供有关服务器的其他信息,这些信息不适合状态行。
  • 空行:指示所有关于响应的元数据已经发送完毕。
  • 响应正文(Body):包含与响应相关的文档。

3.http的请求方法

HTTP请求方法是HTTP协议中定义的一种操作资源的方式。HTTP1.0定义了三种请求方法:GET, POST 和 HEAD方法。HTTP1.1新增了五种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT方法。以下是这些方法的详细解释:

1. GET

请求指定的页面信息,并返回实体主体。这是最常用的方法,用于请求服务器发送某个资源。

2. HEAD

类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头。这个方法可以在不必传输整个资源的情况下,就可以获取包含在响应消息头中的元信息。

3. POST

向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。这个方法用于向服务器提交数据。

4. PUT

从客户端向服务器传送的数据取代指定的文档的内容。这个方法用于更新资源。

5. DELETE

请求服务器删除指定的页面。这个方法用于删除资源。

6. CONNECT

HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。这个方法主要用于SSL隧道通信。

7. OPTIONS

允许客户端查看服务器的性能¹。这个方法用于获取目标资源所支持的通信选项。

8. TRACE

回显服务器收到的请求,主要用于测试或诊断。这个方法用于回显服务器收到的请求,这样客户端可以看到在服务器端被接收的请求的内容。

9. PATCH

是对PUT方法的补充,用来对已知资源进行局部更新。这个方法用于对资源进行部分修改。


4.http响应头信息

当您编写 HTTP 程序时,通常需要设置和处理 HTTP 响应头信息。以下是一些常见的 HTTP 响应头字段,以及它们的作用和可能的取值:

1. 状态行

  •    HTTP 版本和状态码:HTTP/1.1 200 OK

2. 通用头部字段

  •    Date:响应创建的日期和时间。

          Date: Fri, 01 Nov 2023 12:00:00 GMT

  •    Connection:指定是否需要持久连接。

          Connection: keep-alive

  •    Cache-Control:控制缓存行为。

          Cache-Control: no-cache, no-store, must-revalidate

  •    Pragma:为了向后兼容而设定的,现在基本不使用。

          Pragma: no-cache

3. 实体头部字段

  •    Content-Type:响应的媒体类型。

          Content-Type: text/html; charset=utf-8

  •    Content-Length:响应正文的长度(以字节为单位)。

          Content-Length: 12345

  •    Content-Encoding:对正文的编码方式,例如 gzip。

          Content-Encoding: gzip

  •    Last-Modified:资源的最后修改日期。

          Last-Modified: Tue, 31 Oct 2023 12:00:00 GMT

  •    ETag:资源的实体标签。

          ETag: "abcdef"

  •    Expires:指定响应的过期日期和时间。

          Expires: Fri, 01 Nov 2023 12:00:00 GMT

4. 其他头部字段

  •    Server:包含服务器信息。

          Server: Apache/2.4.29 (Unix) OpenSSL/1.1.1

  •    Set-Cookie:设置 Cookie。

          Set-Cookie: user_id=123; expires=Fri, 01 Nov 2023 12:00:00 GMT; path=/

  •    Location:用于重定向。

          Location: https://www.example.com/new-location


5.http状态码

当您处理 HTTP 请求和响应时,可能会遇到不同的状态码。通常包含以下HTTP协议定义的状态码:

1. 1xx(信息类):请求已被接收,需要继续处理。

  •     100 Continue: 服务器已经接收到请求头,并且客户端应该继续发送请求体。
  •     101 Switching Protocols: 服务器已经理解了客户端的请求,并将通过 Upgrade 消息头通知客户端采用不同的协议。

   (其他 1xx 状态码,如 102、103,用于表示正在处理请求的中间状态,通常在长时间处理的场景中使用)

2. 2xx(成功):请求已成功被服务器接收、理解、并接受。

  •     200 OK: 请求成功,正常返回结果。
  •     201 Created: 请求已经被实现,而且有一个新的资源已经依据请求的需要而建立。
  •     202 Accepted: 请求已被接受,但尚未处理完成。
  •     203 Non-Authoritative Information: 请求成功。但是返回的元信息不是来自原始服务器,而是来自副本或者第三方的服务器。
  •     204 No Content: 服务器成功处理了请求,但没有返回任何内容。
  •     205 Reset Content: 服务器成功处理了请求,用户代理应该重置文档视图。
  •     206 Partial Content: 服务器成功处理了部分 GET 请求。

   (其他 2xx 状态码,如 207、208、226,用于表示更多成功的情况)

3. 3xx(重定向):需要客户端采取进一步的操作才能完成请求。

  •     300 Multiple Choices: 请求的资源存在多个选择,用户或代理可选择其中之一。
  •     301 Moved Permanently: 请求的资源已被永久移动到新的位置。
  •     302 Found: 请求的资源临时从不同的 URI响应请求。
  •     303 See Other: 告诉客户端应该以 GET 方法重新发起请求。
  •     304 Not Modified: 客户端已执行条件 GET 请求,服务器已根据请求的条件作出响应,但响应未被修改。
  •     305 Use Proxy (Deprecated): 不再使用,原本表示请求应该使用指定的代理。

   (其他 3xx 状态码,如 307、308,用于表示其他重定向的情况)

4. 4xx(客户端错误):客户端可能发生了错误,无法完成请求。

  •     400 Bad Request: 请求无效,服务器不理解请求的语法。
  •     401 Unauthorized: 请求要求用户的身份认证。
  •     402 Payment Required: 保留供将来使用。
  •     403 Forbidden: 服务器理解请求,但拒绝执行。
  •     404 Not Found: 服务器找不到请求的资源。
  •     405 Method Not Allowed: 请求中指定的方法被禁止。
  •     406 Not Acceptable: 服务器无法根据客户端请求的内容特性完成请求。
  •     407 Proxy Authentication Required: 请求要求代理身份验证。
  •     408 Request Timeout: 服务器等待客户端发送的请求时间过长,超时。
  •     409 Conflict: 请求导致了资源的状态冲突。
  •     410 Gone: 请求的资源已经不存在。
  •     411 Length Required: 缺少必需的 Content-Length 头字段。
  •     412 Precondition Failed: 请求头中指定的一些前提条件失败。
  •     413 Payload Too Large: 请求的实体过大,超过服务器能处理的范围。
  •     414 URI Too Long: 请求的 URI 长度超过服务器能够解释的长度。
  •     415 Unsupported Media Type: 服务器无法处理请求附带的媒体格式。
  •     416 Range Not Satisfiable: 服务器无法满足请求的 Range 头字段。
  •     417 Expectation Failed: 服务器无法满足 Expect 头字段的要求。
  •     418 I'm a teapot: 服务器拒绝尝试用茶壶冲泡咖啡。

   (其他 4xx 状态码,如 421、422、423、424、425、426、428、429、431、451,用于表示更多客户端错误的情况)

5. 5xx(服务器错误):服务器在尝试处理请求时发生错误。

  •     500 Internal Server Error: 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。
  •     501 Not Implemented: 服务器不支持当前请求所需要的某个功能。
  •     502 Bad Gateway: 服务器作为网关或代理,从上游服务器收到无效响应。
  •     503 Service Unavailable: 服务器暂时不可用,通常是由于过多加载或维护。
  •     504 Gateway Timeout: 服务器作为网关或代理,但是没有及时从上游服务器收到请求。
  •     505 HTTP Version Not Supported: 服务器不支持请求中所用的 HTTP 协议版本。
  •     506 Variant Also Negotiates: 服务器内部配置错误,导致服务器不能完成对请求的处理。
  •     507 Insufficient Storage: 服务器无法存储完成请求所必须的内容。
  •     508 Loop Detected: 服务器检测到在处理请求时发生了无限循环。
  •     510 Not Extended: 客户端需要进一步扩展请求。
  •     511 Network Authentication Required: 要求进行身份验证以获得网络访问权限。

6.http2相关介绍

HTTP/2(HTTP2)是HTTP协议的第二个主要版本,旨在改进和优化HTTP/1.1。HTTP/2由IETF(Internet Engineering Task Force)标准化,于2015年发布,它旨在提供更快的加载速度、更低的延迟和更高的效率。以下是HTTP/2的一些关键特点和解释:

1. 二进制协议:
   HTTP/2 是一种二进制协议,与HTTP/1.1的文本协议不同。所有的数据在传输过程中都被转换为二进制格式,这样更加高效。

2. 多路复用(Multiplexing):
   HTTP/2 支持多路复用,允许在单个连接上同时进行多个请求和响应。这消除了HTTP/1.1中的队头堵塞问题,提高了并行性,加速了页面加载速度。

3. 头部压缩:
   HTTP/2 使用 HPACK 算法对请求和响应头部进行压缩,减少了传输的数据量。这有助于降低延迟和提高性能,尤其在带宽受限的网络环境中更为明显。

4. 服务器推送(Server Push):
   服务器推送是HTTP/2中的一个重要功能,允许服务器在客户端请求之前主动推送相关资源。这减少了客户端需要发起的请求次数,提高了页面加载性能。

5. 流(Stream):
   在HTTP/2中,一个连接可以有多个并发的双向数据流。每个流代表一个逻辑通道,可以在一个连接上同时传输多个流。这样可以更有效地利用网络资源。

6. 标头列表(Header List):
   HTTP/2使用首部表(Header List)来跟踪和存储之前发送过的首部信息,以减少重复发送相同的头部。这种方式提高了效率并减少了数据传输量。

7. 升级机制:
   HTTP/2通过在同一连接上升级协议来向后兼容HTTP/1.1。服务器和客户端之间可以协商使用HTTP/2,如果对方不支持,则可以回退到HTTP/1.1。

8. 安全性:
   HTTP/2通常与TLS(Transport Layer Security)一起使用,以提供加密和安全性。虽然不强制要求使用TLS,但大多数实际部署都会将其作为默认选项。

HTTP/2的设计目标之一是通过改进现有的HTTP/1.1协议,提供更好的性能和用户体验。通过引入多路复用、头部压缩、服务器推送等特性,HTTP/2显著减少了页面加载时间,提高了网络性能。然而,它仍然与HTTP/1.1兼容,允许逐步采用而无需对现有的Web基础设施进行根本性改变。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值