十八、http知识点

2 阅读11分钟

HTTP 超详细完整知识点大全

一、HTTP 基础核心概念

1. 定义

HTTP:HyperText Transfer Protocol,超文本传输协议。

  • 应用层协议,基于 TCP/IP 协议簇;
  • 用于客户端与服务器之间传输:超文本(HTML)、图片、视频、JSON、文件等资源;
  • 互联网数据通信的基础协议

2. 核心特性

  1. 无连接 默认短连接:一次请求-响应完成后,立即断开 TCP 连接,节省服务器资源。
  2. 无状态 服务器不记录客户端身份和历史请求,每次请求都是独立隔离的。

    解决方案:Cookie、Session、Token、JWT 弥补无状态缺陷。

  3. 明文传输 HTTP 所有数据裸奔明文,无加密,存在窃听、篡改、中间人攻击风险(HTTPS 解决)。
  4. 基于请求/响应模型 必须客户端主动发起请求,服务器被动响应,服务端无法主动推送数据。
  5. 灵活拓展 通过 Content-Type 支持任意格式数据传输:文本、二进制、JSON、表单、文件等。

3. 协议版本演进

(1)HTTP/1.0
  • 早期版本,单次请求单次连接,请求完毕立即断开 TCP;
  • 不支持长连接、管线化;
  • 缺点:频繁建立/断开 TCP,三次握手四次挥手开销大,性能差。
(2)HTTP/1.1(目前最主流)
  • 默认支持长连接(Keep-Alive),一条 TCP 连接可多次请求响应;
  • 新增管线化(串行排队请求,无法并行);
  • 新增缓存策略、断点续传、虚拟主机、Host 请求头;
  • 缺点:
    1. 队头阻塞(一个请求阻塞,后续全部等待);
    2. 请求头冗余,每次请求重复携带大量头部字段。
(3)HTTP/2.0
  • 基于二进制帧传输,替代文本格式,解析更快;
  • 多路复用:单 TCP 连接,多请求并行,彻底解决队头阻塞;
  • 头部压缩(HPACK),减少请求头体积;
  • 服务器主动推送(Server Push);
  • 缺点:TCP 层仍存在阻塞,握手延迟高。
(4)HTTP/3.0
  • 底层放弃 TCP,改用 QUIC 协议(基于 UDP)
  • 0-RTT 握手,连接建立极快;
  • 彻底解决传输层队头阻塞;
  • 弱网、移动端网络切换场景体验极佳;
  • 目前逐步普及。

二、HTTP 与 TCP/IP 层级关系

1. 网络五层模型

  1. 应用层:HTTP、HTTPS、FTP、DNS、WebSocket
  2. 传输层:TCP(HTTP/1.1/2)、UDP(HTTP/3 QUIC)
  3. 网络层:IP 协议,路由寻址
  4. 数据链路层:MAC 地址、以太网
  5. 物理层:网线、光纤、无线电信号

2. 通信流程

客户端应用 → HTTP协议封装 → TCP连接 → IP路由 → 服务器 → 解包响应

3. TCP 关键前置知识

  1. 三次握手:建立可靠连接
  2. 四次挥手:断开连接
  3. 可靠传输:确认应答、超时重传、拥塞控制

HTTP 本身不保证可靠,可靠全靠 TCP 实现


三、HTTP 完整请求报文结构

HTTP 请求由 请求行、请求头、空行、请求体 四部分组成。

1. 请求行(Request Line)

格式:请求方法 + URL + 协议版本 示例:

GET /index.html HTTP/1.1
  • 请求方法:标识操作类型;
  • URL:请求资源地址;
  • 协议版本:HTTP/1.1 / HTTP/2。

2. 请求头(Request Headers)

键值对格式,每行一个,携带客户端环境、权限、缓存、数据格式等信息。 高频必记请求头

请求头作用
Host目标域名/IP+端口,虚拟主机核心
User-Agent客户端标识(浏览器、设备、系统)
Accept客户端可接收的响应数据格式
Accept-Encoding支持的压缩格式(gzip、deflate)
Accept-Language客户端语言
Referer来源页面地址,防盗链核心
Cookie本地存储用户身份凭证
Content-Type请求体数据格式
Content-Length请求体字节长度
Connectionkeep-alive(长连接)/ close
Authorization身份认证(Token、Basic)
Origin跨域请求源地址

3. 空行

固定分隔符,必须存在,区分请求头和请求体。

4. 请求体(Request Body)

  • 只有 POST/PUT/PATCH 等方法才有请求体;
  • GET 请求无请求体(参数拼接在 URL 中);
  • 存放提交数据:表单、JSON、文件、二进制等。

四、HTTP 响应报文结构

HTTP 响应由 状态行、响应头、空行、响应体 四部分组成。

1. 状态行(Status Line)

格式:协议版本 + 状态码 + 状态描述 示例:

HTTP/1.1 200 OK

2. 响应头(Response Headers)

服务器返回的配置、缓存、数据格式、Cookie 设置等。 高频必记响应头

响应头作用
Server服务器软件版本
Date响应时间
Content-Type响应数据格式、编码
Content-Length响应体大小
Content-Encoding响应压缩格式
Set-Cookie下发 Cookie 到客户端
Cache-Control缓存控制规则
ETag / Last-Modified资源标识,协商缓存
Location重定向目标地址
Access-Control-*跨域资源共享 CORS

3. 空行

分隔响应头与响应体。

4. 响应体

服务器返回的真实数据:HTML、CSS、JS、图片、JSON、文件流。


五、HTTP 请求方法(9种标准方法)

1. 常用5大方法

(1)GET
  • 作用:查询、获取资源;
  • 特点:
    1. 无请求体,参数拼接在 URL;
    2. 明文展示,长度有限;
    3. 安全、幂等;
    4. 默认会被浏览器缓存。
(2)POST
  • 作用:提交数据、新增资源、上传文件;
  • 特点:
    1. 有请求体,参数隐藏;
    2. 数据无长度限制;
    3. 不安全、不幂等
    4. 默认不缓存。
(3)PUT
  • 作用全量更新资源;
  • 幂等:多次请求结果一致;
  • 要求客户端传入完整资源数据。
(4)PATCH
  • 作用局部更新资源;
  • 只传需要修改的字段,节省流量。
(5)DELETE
  • 作用:删除服务器资源;
  • 幂等。

2. 小众方法

  1. HEAD:只获取响应头,无响应体,用于探测资源是否存在;
  2. OPTIONS:查询服务器支持的请求方法、跨域配置(预检请求);
  3. TRACE:回显请求路径,调试、安全排查;
  4. CONNECT:建立隧道代理,用于 HTTPS 代理转发。

3. 核心概念:安全 & 幂等

(1)安全
  • 不会修改服务器数据:GET、HEAD、OPTIONS
  • POST/PUT/DELETE 不安全。
(2)幂等
  • 多次执行请求,服务器结果完全一致
  • 幂等:GET、PUT、DELETE、HEAD、OPTIONS;
  • 非幂等:POST(多次提交会创建多条数据)。

六、HTTP 状态码(完整分类+高频详解)

状态码为 3 位数字,分为 5 大类。

1. 1xx 信息性(临时响应)

  • 100 Continue:客户端继续发送请求体;
  • 101 Switching Protocols:协议切换(HTTP→WebSocket)。

2. 2xx 成功(请求正常处理)

  • 200 OK:请求成功,正常返回数据;
  • 201 Created:资源创建成功(POST 新增);
  • 204 No Content:成功无响应体;
  • 206 Partial Content:断点续传、分片请求。

3. 3xx 重定向

  • 301 永久重定向:资源永久迁移,浏览器永久缓存跳转;
  • 302 临时重定向:临时跳转,下次仍请求原地址;
  • 304 Not Modified:协商缓存命中,资源未修改,复用本地缓存;
  • 307/308:严格重定向,保留请求方法与请求体。

4. 4xx 客户端错误

  • 400 Bad Request:请求参数错误、格式非法;
  • 401 Unauthorized:未登录、无身份认证;
  • 403 Forbidden:已登录,但无权限访问;
  • 404 Not Found:资源不存在;
  • 405 Method Not Allowed:请求方法不支持;
  • 409 Conflict:数据冲突;
  • 413 Request Entity Too Large:请求体过大。

5. 5xx 服务端错误

  • 500 Internal Server Error:服务器代码异常、逻辑报错;
  • 502 Bad Gateway:网关/代理后端服务异常;
  • 503 Service Unavailable:服务器过载、维护、宕机;
  • 504 Gateway Timeout:网关请求后端超时。

七、HTTP 缓存机制(重点难点)

分为强缓存协商缓存,目的:减少请求、降低服务器压力、提升加载速度。

1. 强缓存(不发请求,直接用本地缓存)

无需和服务器交互,浏览器直接读取本地资源。

控制字段
  1. Cache-Control(HTTP/1.1 推荐)

    • max-age=3600:缓存有效期 3600 秒;
    • no-cache:不使用强缓存,必须走协商缓存;
    • no-store禁止所有缓存,每次都请求最新资源;
    • public:客户端、代理服务器均可缓存;
    • private:仅浏览器本地缓存,CDN 不缓存。
  2. Expires(HTTP/1.0 废弃) 绝对过期时间,依赖本地时间,时间错乱会失效。

2. 协商缓存(发轻量请求,校验资源)

强缓存失效后,客户端携带标识询问服务器:资源是否更新?

  • 命中:返回 304,使用本地缓存;
  • 失效:返回 200 + 最新资源。
(1)Last-Modified / If-Modified-Since
  • 服务器响应头:Last-Modified 资源最后修改时间;
  • 客户端下次请求头:If-Modified-Since 带上时间;
  • 缺陷:
    1. 只能精确到秒;
    2. 文件内容不变、修改时间变化,会误判更新。
(2)ETag / If-None-Match(更优)
  • 服务器生成资源唯一指纹(ETag);
  • 客户端请求携带 If-None-Match
  • 按文件内容哈希比对,精度更高,解决时间戳缺陷。

3. 缓存整体流程

  1. 先判断强缓存(Cache-Control/Expires)→ 命中直接使用;
  2. 强缓存失效 → 携带标识走协商缓存;
  3. 协商缓存命中 → 304 复用本地;
  4. 协商缓存失效 → 200 返回新资源,更新缓存规则。

八、HTTPS 深度解析(HTTP+安全)

1. HTTPS 是什么

  • HTTP + SSL/TLS
  • 端口:HTTP=80,HTTPS=443;
  • 解决 HTTP 明文三大问题:窃听、篡改、伪造中间人

2. 核心加密机制

  1. 对称加密 同一密钥加密解密,速度快;缺点:密钥传输易泄露。
  2. 非对称加密 公钥加密、私钥解密,安全性高;缺点:运算极慢。
  3. 混合加密(实际使用)
    • 用非对称加密传输对称密钥
    • 后续通信全部使用对称加密,兼顾安全与性能。
  4. 数字证书 CA 防止公钥被中间人篡改伪造,验证服务器真实身份。
  5. 摘要算法(MD5/SHA256) 校验数据完整性,防止传输篡改。

3. HTTPS 握手流程

  1. 客户端发起握手,携带支持的 TLS 版本、加密套件;
  2. 服务器返回证书、选中加密算法;
  3. 客户端验证证书合法性;
  4. 客户端生成随机密钥,用服务器公钥加密发送;
  5. 服务器私钥解密,得到对称密钥;
  6. 双方使用对称密钥加密通信。

4. HTTP 与 HTTPS 对比

维度HTTPHTTPS
端口80443
安全性明文、无加密TLS 加密、防篡改、防劫持
速度快、无握手开销略慢、多 TLS 握手
证书无需需要 CA 证书
成本免费证书、服务器算力成本

九、跨域与 CORS(前端高频)

1. 同源策略(浏览器安全限制)

同源三要素:协议、域名、端口 必须完全一致。 不同源即为跨域,默认禁止:AJAX、Fetch 跨域请求。

2. 跨域解决方案

  1. CORS 跨域资源共享(主流) 服务器配置响应头:
    Access-Control-Allow-Origin: 允许的域名
    Access-Control-Allow-Methods: 允许的方法
    Access-Control-Allow-Credentials: true 允许 Cookie
    
  2. 预检请求(OPTIONS) 复杂请求(带 Cookie、自定义头、JSON 格式)会先发 OPTIONS 预检。
  3. 其他方案:JSONP、Nginx 反向代理、WebSocket、后端接口转发。

十、Cookie / Session / Token 完整区别

1. Cookie

  • 存储在客户端浏览器,小型文本;
  • 由服务器 Set-Cookie 下发;
  • 自动随请求携带;
  • 限制:大小 4KB、域名隔离、可被禁用。

2. Session

  • 存储在服务端
  • 依赖 Cookie 存储 SessionID;
  • 解决无状态,记录用户会话;
  • 缺点:集群部署需要共享 Session。

3. Token / JWT

  • 无状态认证,服务端不存储
  • Token 加密字符串存储用户信息;
  • 适合分布式、前后端分离、移动端;
  • JWT 组成:头部、载荷、签名。

十一、HTTP 长连接 & 短连接

1. 短连接(HTTP/1.0)

  • 请求→响应→立即断开 TCP;
  • 频繁握手挥手,性能差。

2. 长连接(HTTP/1.1 Keep-Alive)

  • 一条 TCP 连接,多次 HTTP 请求;
  • 请求头:Connection: keep-alive
  • 空闲一段时间后自动断开,节省资源。

3. 队头阻塞问题

  • HTTP/1.1 长连接串行请求,前面请求卡住,后面全部阻塞;
  • 解决:域名分片、HTTP/2 多路复用。

十二、常见 Content-Type 数据格式

  1. application/x-www-form-urlencoded:普通表单默认格式;
  2. multipart/form-data:文件上传、复杂表单;
  3. application/json:前后端分离主流 JSON 格式;
  4. text/html:HTML 页面;
  5. text/plain:纯文本;
  6. image/jpeg/png/gif:图片资源。

十三、高频面试延伸知识点

  1. WebSocket 基于 HTTP 握手,全双工通信,服务端可主动推数据; 适用:聊天室、实时通知、弹幕、游戏。
  2. HTTP 中间人攻击 劫持 HTTP 明文数据,篡改页面、窃取信息,HTTPS 防御。
  3. CDN 工作原理 缓存静态资源(图片/JS/CSS),就近节点返回,减轻源站压力。
  4. 请求头劫持、Referer 防盗链 服务器校验 Referer 或 Origin,防止非法盗用资源。