0%

HTTP协议与框架设计

HTTP协议与框架设计

HTTP协议

概述

HTTP(HyperText Transfer Protocol,超文本传输协议)是用于在Web浏览器和Web服务器之间传输超文本数据(如HTML、CSS、JavaScript、图片等)的协议。它是一个应用层协议,运行在TCP/IP协议栈的上层,使用无状态请求-响应模型来进行客户端与服务器的通信。

HTTP协议是万维网(WWW)数据交换的基础,它是客户端与服务器之间通信的规则和约定。HTTP协议通常通过TCP(传输控制协议)端口80进行传输,但也可以通过HTTPS(HTTP Secure)协议通过端口443进行加密传输。

基本特性

无状态性:HTTP协议是无状态的,即每个请求都是独立的,服务器不会保存客户端的状态。每个请求都包含了所有的必要信息,服务器无法记住之前的请求和相应的状态。为了弥补这一点,可以使用CookiesSession等机制来维持状态。

客户端-服务器模式:HTTP协议采用的是客户端-服务器模式,其中客户端(如浏览器)发起请求,服务器返回响应。客户端和服务器之间的通信是由请求和响应组成的。

请求-响应模型:每次客户端向服务器发送请求,服务器都会进行处理并返回响应。请求和响应都由头部(Headers)和正文(Body)组成。

支持多种方法:HTTP协议支持多种方法来指定请求的意图,例如:GETPOSTPUTDELETE等。

HTTP请求格式

HTTP请求由三部分组成:请求行(Request Line)、请求头(Headers)、请求体(Body)。

  1. 请求行: 请求行包含了三个主要部分:

    • HTTP方法:表示请求的类型,例如 GET、POST、PUT、DELETE 等。
    • 请求URI(Uniform Resource Identifier):表示请求的资源路径(即网址)。
    • HTTP版本:表示使用的HTTP协议版本,例如HTTP/1.1或HTTP/2。

    示例请求行:

    1
    GET /index.html HTTP/1.1
  2. 请求头(Headers): 请求头提供关于客户端环境和请求本身的信息。常见的请求头字段包括:

    • User-Agent:表示客户端软件的信息(如浏览器类型、操作系统等)。
    • Host:表示请求的目标主机和端口号。
    • Content-Type:表示请求体中数据的类型。
    • Authorization:用于身份验证,表示提供给服务器的认证信息。

    示例请求头:

    1
    2
    3
    Host: www.example.com
    User-Agent: Mozilla/5.0
    Accept: text/html
  3. 请求体(Body): 请求体包含了需要发送到服务器的数据,通常用于POSTPUT等请求方法。GET请求通常没有请求体。POST请求常用于提交表单数据或者上传文件。

HTTP响应格式

HTTP响应由四部分组成:状态行(Status Line)、响应头(Headers)、响应体(Body)。

  1. 状态行: 状态行包含三个主要部分:

    • HTTP版本:与请求中使用的版本一致。
    • 状态码:一个三位数字,表示服务器处理请求的结果。
    • 状态消息:对状态码的简短描述。

    示例状态行:

    1
    HTTP/1.1 200 OK
  2. 响应头(Headers): 响应头提供了关于响应的附加信息。常见的响应头字段包括:

    • Content-Type:表示返回数据的类型(如 text/html、application/json等)。
    • Content-Length:表示响应体的大小(字节数)。
    • Set-Cookie:用于服务器向客户端发送Cookie。
    • Cache-Control:用于控制缓存行为。

    示例响应头:

    1
    2
    3
    Content-Type: text/html; charset=UTF-8
    Content-Length: 1234
    Set-Cookie: sessionId=abcd1234; path=/; HttpOnly
  3. 响应体(Body): 响应体包含了服务器返回给客户端的数据。它可以是HTML文件、JSON数据、图片文件等。

HTTP/1.1 vs HTTP/2

  • HTTP/1.1:是HTTP协议最常用的版本,支持持久连接(Connection: keep-alive)和管道化(请求和响应可以同时处理)。
  • HTTP/2:是对HTTP/1.1的优化,主要特性包括:
    • 二进制传输:将HTTP消息从文本格式转为二进制格式,提高传输效率。
    • 多路复用:允许多个请求和响应共享同一个TCP连接,避免了HTTP/1.1中的队头阻塞问题。
    • 头部压缩:HTTP/2通过HPACK算法对头部进行压缩,减少了冗余信息,提高了效率。
    • 服务器推送:服务器可以主动将资源推送给客户端,减少等待时间。

HTTP vs HTTPS

  • HTTP:数据传输没有加密,通信内容可能被窃听、篡改。
  • HTTPS:是加密版的HTTP,通过SSL/TLS协议进行加密,确保通信的安全性和完整性。它使用端口443而不是HTTP的80端口。

HTTP框架设计

HTTP请求流程

image-20250116171415099

HTTP设计思路

  • 应用层——提供给用户使用的接口,需要保证可理解性和简单性

  • 中间件层——对请求进行预处理和后处理

  • 路由层——为 url 请求匹配相应的Handler处理函数

  • 协议层——抽象出合适的接口,在连接上读取数据

  • 传输层——为网络I/O提供了一个可移植的接口,包括TCP/IP、UDP、域名解析和Unix域套接字