http协议

HTTP(超文本传输协议)是用于传输网页和其他资源的协议。以下是 HTTP 协议的主要知识点:

1. HTTP 基本概念

  • 定义:HTTP 是一个应用层协议,定义了客户端(如浏览器)和服务器之间的通信规则,用于传输超文本(如 HTML)。
  • 无状态:HTTP 协议本身是无状态的,这意味着每个请求都是独立的,服务器不保留任何关于客户端的状态信息。
  • 请求-响应模型:客户端发送请求,服务器处理请求并返回响应。

2. HTTP 方法

  • GET:从服务器请求指定的资源。它是无副作用的,只用于获取数据,不会修改服务器上的资源。
  • POST:向服务器提交数据,通常用于提交表单或上传文件,会在服务器上创建或修改资源。
  • PUT:将数据上传到服务器,通常用于更新现有资源。
  • DELETE:从服务器删除指定的资源。
  • HEAD:类似于 GET 请求,但服务器只返回响应头,不返回实体内容。通常用于获取元数据。
  • OPTIONS:用于查询支持的 HTTP 方法,服务器返回允许的操作方法。
  • PATCH:对资源进行部分修改。

3. HTTP 请求报文

  • 请求行

    :包含 HTTP 方法、请求目标(URL)和 HTTP 版本。

    • 示例:GET /index.html HTTP/1.1
  • 请求头

    :包含关于请求的额外信息,如

    1
    Host
    1
    User-Agent
    1
    Accept

    等。

    • 示例:Host: www.example.com
  • 请求体:在 POST、PUT、PATCH 等方法中,包含要发送到服务器的数据。

4. HTTP 响应报文

  • 状态行

    :包含 HTTP 版本、状态码和状态消息。

    • 示例:HTTP/1.1 200 OK
  • 响应头

    :包含关于响应的额外信息,如

    1
    Content-Type
    1
    Content-Length
    1
    Location

    等。

    • 示例:Content-Type: text/html; charset=UTF-8
  • 响应体:包含响应的实际数据,通常是网页内容、JSON 数据等。

5. HTTP 状态码

  • 1xx(信息性状态码)

    :请求已接收,继续处理。

    • 示例:100 Continue101 Switching Protocols
  • 2xx(成功状态码)

    :请求成功并已被处理。

    • 示例:200 OK201 Created204 No Content
  • 3xx(重定向状态码)

    :请求需要进一步的操作才能完成。

    • 示例:301 Moved Permanently302 Found304 Not Modified
  • 4xx(客户端错误状态码)

    :请求有错误或请求无法完成。

    • 示例:400 Bad Request401 Unauthorized404 Not Found
  • 5xx(服务器错误状态码)

    :服务器无法处理有效请求。

    • 示例:500 Internal Server Error502 Bad Gateway503 Service Unavailable

6. HTTP 版本

  • HTTP/1.0:最初的 HTTP 版本,支持基本的请求和响应。
  • HTTP/1.1:HTTP/1.0 的增强版,支持持久连接、管道化等功能。
  • HTTP/2:通过多路复用、头部压缩和流控制等方式,显著提高了性能。
  • HTTP/3:基于 QUIC 协议的 HTTP 版本,进一步提升了性能和安全性。

7. HTTP 持久连接与管道化

  • 持久连接(Keep-Alive):默认情况下,HTTP/1.1 会保持连接打开,以便后续请求复用,减少建立连接的开销。
  • 管道化(Pipelining):HTTP/1.1 允许在一个连接上发送多个请求,服务器按顺序响应,但客户端和服务器都必须按顺序处理请求。

8. Cookies

  • 定义:用于在客户端存储状态信息。服务器通过设置 HTTP 响应头中的 Set-Cookie 来发送 Cookie,客户端通过请求头中的 Cookie 将其发送回服务器。
  • 用途:常用于保持会话状态(如用户登录状态)。

9. 缓存机制

  • 缓存控制:通过 HTTP 头部字段(如 Cache-ControlETagLast-Modified)来控制缓存行为,减少不必要的请求。
  • 强缓存:通过 Cache-ControlExpires 指定资源的有效期。
  • 协商缓存:通过 ETagIf-None-MatchLast-ModifiedIf-Modified-Since 来判断资源是否已更新。

10. 代理与负载均衡

  • 代理服务器:作为客户端和服务器之间的中介,代理可以缓存响应、转发请求、修改请求或响应。
  • 负载均衡:通过代理服务器将请求分发到不同的服务器,确保流量的均衡分配。

11. HTTPS

  • 加密:HTTPS 是 HTTP 的安全版本,通过 SSL/TLS 协议加密数据传输,确保数据安全性。
  • 证书:HTTPS 需要使用数字证书验证服务器身份,防止中间人攻击。

12. 跨域请求与 CORS

  • 跨域资源共享(CORS):当一个网页通过 JavaScript 发起跨域请求时,服务器需要在响应头中添加 CORS 相关字段(如 Access-Control-Allow-Origin)来允许访问。

13. HTTP 头部

  • 常见请求头

    • User-Agent:客户端的浏览器或操作系统信息。
    • Accept:客户端接受的响应类型(如 text/htmlapplication/json)。
    • Authorization:用于携带认证信息(如 Bearer Token)。
  • 常见响应头

    • Content-Type:响应的内容类型(如 text/htmlapplication/json)。
    • Location:重定向时指定新的 URL。

14. WebSockets 与 HTTP

  • WebSockets:HTTP 协议的一部分,但允许客户端和服务器之间建立持久连接,进行双向通信,适用于实时应用(如聊天、游戏等)。

总结

HTTP 是 Web 通信的核心协议,涵盖了请求和响应的结构、状态码、缓存控制、认证、跨域等多个重要方面。了解这些知识点有助于深入理解 Web 的工作原理,优化性能,确保数据安全。