目录
2. 2xx(成功):请求已成功被服务器接收、理解、并接受。
3. 3xx(重定向):需要客户端采取进一步的操作才能完成请求。
4. 4xx(客户端错误):客户端可能发生了错误,无法完成请求。
5. 5xx(服务器错误):服务器在尝试处理请求时发生错误。
版权所有,翻印必究。
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基础设施进行根本性改变。