HTTP 超文本传输协议

510 阅读6分钟

HTTP 超文本传输协议

  • HTTP:HyperText Transfer Protocol 超文本传输协议,是一种用于传输超文本(比如网页、图片、视频等)的协议,作为客户端(通常是 Web 浏览器)和服务器之间的通信协议,是一种应用层的网络传输协议,基于请求/响应(Request/Response)模式,客户端通过 URL 向服务器发起请求,服务端根据请求内容返回相应的数据进行响应
  • 通常应用于 Web 浏览、API(应用程序编程接口)开发、文件传输等场景
  • HTTP 是一种以明文形式传输数据,简单、灵活可扩展的,基于 TCP/IP 协议传输数据,可靠的传输协议
  • HTTP 本身是无状态的,每个请求都是独立的,服务器不会保存客户端的任何信息,所以需要额外的技术(比如 Cookie、Session 等)去实现状态的记录和管理
  • HTTP 协议是无连接的,每次请求只建立一个连接,请求完成后立即断开

请求和响应

Request 请求:请求行、请求头和请求体

  • 请求行包括请求方法、请求 URL 和 HTTP 协议版本(比如 GET /index.html HTTP/1.1)
  • 请求头包含附加信息(比如 Host、User-Agent 和 Accept 等)
  • 请求体用于传输数据,主要在 POST 请求中使用

Response 响应:状态行、响应头和响应体

  • 状态行包括 HTTP 协议版本、状态码和状态描述(比如 HTTP/1.1 200 OK)
  • 响应头包含响应的元数据(比如 Content-Type、Content-Length 等)
  • 响应体包含实际的响应数据(比如图片、JSON 数据等)

请求方法

  • GET:请求从服务器获取指定资源,这是最常用的方法之一,请求数据而不对数据进行更改
  • POST:请求服务器接受并处理提交的数据,也是最常用的方法之一,通常用于表单提交或上传文件,发送的数据包含在请求体中
  • PUT:请求服务器更新现有资源,用请求体中的内容替换目标资源的内容,如果资源不存在,则创建新的资源
  • DELETE:请求服务器删除指定的资源
  • HEAD:与 GET 类似,但服务器只返回响应头,不返回响应体
  • OPTIONS:用于获取服务器支持的 HTTP 请求方法等信息

状态码

  • 1xx Informational 信息性状态码:表示临时响应,接收的请求正在处理
  • 2xx Success 成功状态码:表示请求成功,接收的请求正常处理完毕(比如:200 OK 请求成功)
  • 3xx Redirection 重定向状态码:表示需要进行附加操作才能完成请求
  • 4xx Client Error 客户端错误状态码:表示客户端请求有误,服务器无法处理接收的请求(比如:401 Unauthorized 未认证、403 Forbidden 拒绝执行请求、404 Not Found 未找到资源)
  • 5xx Server Error 服务器错误状态码:表示服务器内部错误,服务器处理请求出错(比如:500 Internal Server Error 服务器内部错误、503 Service Unavailable 服务器暂时无法处理请求)

HTTPS 超文本传输安全协议

  • Hyper Text Transfer Protocol Secure,超文本传输安全协议,即 HTTP 的安全版本,HTTPS 通过增加 SSL/TLS 协议来加密 HTTP 数据传输,在 HTTP 的基础上增加了加密和认证机制,以保护通信的安全性和数据完整性
  • SSL 是 Secure Sockets Layer 安全套接字层,TLS 是 Transport Layer Security 传输层安全,TLS 是 SSL 的后继升级版本
  • 流程步骤:客户端发起请求、服务器响应并发送证书、客户端验证证书有效性、协商生成会话对称密钥、进行后续的数据加密传输操作等
  • 数据加密:HTTPS 通过 SSL/TLS 协议对传输的数据进行加密,防止数据在传输过程中被窃取或篡改,保护用户的隐私和敏感信息
  • 身份验证:HTTPS 通过数字证书验证服务器(网站)的身份,确保用户访问的是真实的服务器(而不是恶意伪造的网站),确保对方身份的可靠性,防止中间人攻击
  • 完整性保护:HTTPS 使用摘要算法校验来确保数据的完整性,防止数据在传输过程中被篡改或损坏

HTTP/2 超文本传输协议第 2 版

  • HTTP/2 作为 HTTP 协议的第 2 个主要版本(最初命名为 HTTP 2.0),旨在优化解决 HTTP/1.1 存在的一些问题,目的是提高 Web 传输效率和页面加载速度,引入了二进制分帧、多路复用、头部压缩、服务器推送、请求优先级等特性
  • 二进制分帧:HTTP/2 采用二进制格式而非 HTTP/1.1 的文本格式,HTTP/2 使用二进制格式来封装和传输数据(将请求和响应数据分割成一个个小的二进制 Frame 帧,每个帧都有特定的类型和标识进行区分),这些帧可以在同一个 TCP 连接上交错地发送和接收,从而提高了数据传输的效率
  • 多路复用:HTTP/2 允许在一个 TCP 连接上并行交错地发送多个请求和响应(HTTP/1.1 默认情况下一个 TCP 连接在同一时间只能处理一个请求-响应交换,只能顺序处理请求,因此 HTTP/2 减少了 TCP 连接的数量,的延迟,同时降低了连接建立和关闭的开销,也避免了 HTTP/1.1 中的队头阻塞问题),意味着多个资源可以并行传输,不会出现相互阻塞,从而更有效地利用网络资源,显著提升了并发性能效率
  • 头部压缩:在 HTTP/1.1 中,每次请求和响应的头部字段通常包含大量重复信息(比如 Cookie、User-Agent 等),而 HTTP/2 会使用 HPACK 算法对 HTTP 头部进行压缩,减少头部字段传输的数据量大小,降低传输开销,特别是在高频请求场景下,头部压缩显著优化了性能
  • HTTP/2 在很大程度上借鉴了 SPDY 的理念和技术(Google 开发的一种基于 TCP 的应用层协议,目前已被淘汰),HTTP/2 规范本身并不强制要求加密(而 SPDY 强制使用 SSL),但目前浏览器广泛实现了只支持基于 TLS 的 HTTP/2(即 HTTPS,所以 HTTP/2 的普及也顺势推动了 HTTPS 的普及)

总结

  • HTTP 是一个基于请求与响应、无状态的、无连接的、应用层的网络传输协议,而 HTTPS 是 HTTP 的扩展版本,是一种安全、可靠的通信协议,特别是应用在在线支付系统、敏感的 API 通信、用户网页登录等场景
  • HTTP 的 URL 以 http:// 开头,而 HTTPS 的 URL 以 https:// 开头
  • HTTP 默认使用 80 端口,而 HTTPS 默认使用 443 端口
  • HTTP 是明文传输的,比较不安全,容易被窃听和篡改,而 HTTPS 通过加密和身份验证机制确保数据传输的安全性和完整性
  • 由于 HTTPS 需要额外的计算工作(比如加密和解密数据),因此比 HTTP 传输速度要慢,可能会导致页面的加载时间延长
  • 使用 HTTPS 需要经过 CA(Certificate Authority 证书颁发机构)的认证,需要获取和安装 SSL/TLS 证书,可能需要支付一定的费用(不过也有 Let's Encrypt 这种免费的证书)