当前位置: 首页 > article >正文

HTTP 核心知识点整理

1. HTTP 基础

  • 定义:HTTP(HyperText Transfer Protocol)是应用层协议,基于 ​请求-响应模型,用于客户端(浏览器)与服务器之间的通信。
  • 特点
    • 无状态:每次请求独立,服务器不保留客户端状态(通过 Cookie/Session 解决)。
    • 明文传输​(HTTP) vs ​加密传输​(HTTPS)。
    • 默认端口:HTTP(80),HTTPS(443)。

2. HTTP 方法(Methods)​

方法描述幂等性安全性
GET获取资源,参数在 URL 中
POST提交数据,可能创建资源或触发操作
PUT更新整个资源
PATCH部分更新资源
DELETE删除资源
HEAD获取响应头,无响应体

幂等性:多次执行结果相同(如 GET、PUT、DELETE)。
安全性:不修改资源(如 GET、HEAD)。


3. HTTP 状态码(Status Codes)​

状态码类别常见状态码及含义
1xx信息性100(继续)
2xx成功200(OK)​, 201(Created)
3xx重定向301(永久重定向)​, ​302(临时重定向)​, 304Not Modified(缓存未修改)
4xx客户端错误400(请求错误)​, ​401(未认证)​, ​403(禁止访问)​, ​404(未找到)​
5xx服务器错误500(内部错误)​, 502(网关错误), 503(服务不可用)

关键区别

  • 301 vs 302:301 是永久重定向(浏览器缓存),302 是临时重定向。
  • 401 vs 403:401 表示未认证,403 表示无权限。

4. HTTP 头部(Headers)​

  • 通用头部
    • Cache-Control:缓存策略(如 max-age=3600)。
    • Connection:控制连接(如 keep-alive)。
  • 请求头部
    • Host:目标域名。
    • User-Agent:客户端信息。
    • Authorization:认证信息(如 Bearer Token)。
  • 响应头部
    • Content-Type:响应体类型(如 application/json)。
    • Content-Length
    • Content-Encoding
    • Set-Cookie:设置 Cookie。
  • 缓存相关
    • ETag:资源标识,用于协商缓存。
    • Last-Modified:资源最后修改时间。

5. HTTP vs HTTPS

  • HTTPS = HTTP + SSL/TLS 加密。
  • 加密流程
    1. 客户端发送请求,服务器返回证书。
    2. 客户端验证证书,生成对称密钥并用公钥加密发送。
    3. 服务器用私钥解密,后续通信使用对称加密。
  • HTTP问题:无状态,明文传输,不安全
  • HTTP的风险:窃听、篡改、冒充
  • HTTPS如何解决的:信息加密、校验机制、身份证书

6. HTTP 缓存机制

  • ​强制缓存​(无需请求服务器):
    • Cache-Control: max-age=3600(优先级高于 Expires)。
  • 协商缓存​(需请求服务器验证):
    • Last-Modified + If-Modified-Since(时间戳)。
    • ETag + If-None-Match(唯一标识,精度更高)。

缓存流程
强缓存生效 → 直接返回本地缓存;
强缓存失效 → 发起请求,验证协商缓存 → 返回 304 或新内容。


7. HTTP/1.1 vs HTTP/2 vs HTTP/3

  • HTTP/1.1
    • 持久连接(默认 Connection: keep-alive)。
    • 队头阻塞(同一连接需顺序处理请求)。
  • HTTP/2
    • 多路复用(一个连接并行处理多个请求)。
    • 头部压缩(HPACK)。
    • 二进制传输。
    • 服务器推送(Server Push)。
  • HTTP/3
    • 基于 ​QUIC 协议​(UDP 实现,解决队头阻塞)。
    • 更快握手(0-RTT)。

8. 安全相关

  • CSRF(跨站请求伪造)​
    • 防御:Token 验证、SameSite Cookie 属性。
  • XSS(跨站脚本攻击)​
    • 防御:输入过滤、输出转义、CSP(内容安全策略)。

9. Cookie 和 Session

  • Cookie:客户端存储,通过 Set-Cookie 设置,每次请求自动携带。
  • Session:服务端存储用户状态,Session ID 通过 Cookie 传递。
  • 区别
    • Cookie 不安全(可篡改),Session 较安全但需服务器存储。
    • 分布式系统中 Session 需共享存储(如 Redis)。

10. RESTful API 设计

  • 资源定位:URL 表示资源(如 /users/123)。
  • HTTP 方法对应操作:GET(查)、POST(增)、PUT(改)、DELETE(删)。
  • 状态码语义化:200(成功)、201(创建)、400(错误请求)等。
  • 版本控制:通过 URI(/v1/users)或头部(Accept-Version: v1)。

11. 性能优化

  • 减少请求次数:合并资源(CSS/JS)、雪碧图。
  • 使用 CDN 加速静态资源。
  • 压缩资源:Gzip、Brotli。
  • 启用 HTTP/2 多路复用。

12.http与websocket

  • websocket是全双工通信,适用于实时应用

高频面试题

  1. GET 和 POST 的区别?
  2. HTTP 状态码 301 和 302 的区别?
  3. 如何实现 Cookie 的安全性(Secure/HttpOnly/SameSite)?
  4. 浏览器缓存机制是怎样的?
  5. HTTP/2 如何提升性能?
  6. HTTP如何解决“粘包”的问题的?
    1. HTTP 协议通过设置回车符、换行符作为 HTTP header 的边界,通过 Content-Length 字段作为HTTP body 的边界,这两个方式都是为了解决“粘包”的问题。

1.HTTPS的连接是如何建立的?

步骤一:TCP 连接建立
  • 客户端向服务器发起 HTTPS 请求(默认端口 443),开始 TCP 三次握手。

步骤二:TLS 握手(密钥协商)​
  1. Client Hello

    • 客户端发送支持的 TLS 版本、加密套件列表(如 RSA、ECDHE)、客户端随机数(Client Random)。
  2. Server Hello

    • 服务器选择加密套件,返回服务器随机数(Server Random)和数字证书(包含公钥、域名、颁发机构等信息)。
  3. 证书验证

    • 客户端验证证书的合法性(如是否过期、域名匹配、证书链是否可信等)。
  4. 生成预主密钥

    • 客户端生成一个随机数 ​预主密钥(Pre-Master Secret)​,用服务器公钥加密后发送给服务器。
  5. 生成会话密钥

    • 服务器用私钥解密获取预主密钥,结合 Client Random 和 Server Random,双方通过算法生成相同的 ​对称会话密钥(Session Key)​

步骤三:加密通信
  • 后续所有 HTTP 数据均使用 ​对称加密(如 AES)​ 传输,会话密钥仅在此次连接中有效,确保高效和安全。

关键词:

  • 非对称加密:用于安全交换对称密钥(RSA/ECDHE)。
  • 对称加密:用于高效加密实际数据(AES)。
  • 证书验证:防止中间人攻击,确保服务器身份可信。

http://www.kler.cn/a/601508.html

相关文章:

  • 云端陷阱:当免费午餐变成付费订阅,智能家居用户如何破局?
  • Idea中诡异的文件编码问题: 设置fileCodeing为UTF8但不生效
  • 【Linux-驱动开发-设备树 DTS】
  • 计算机组网实例
  • 什么是CAP理论
  • 【专业测评】STONE 80A-L 电调:轻量化革命下的工业级动力心脏 ——112g 机身承载 80A 持续输出,重新定义无人机动力系统标杆
  • windows剪切板的内容无法拷贝到虚拟机virtualbox里的Rocky Linux中 --Draft
  • effective Java 学习笔记(第二弹)
  • 【报错】 /root/anaconda3/conda.exe: cannot execute binary file: Exec format error
  • [leetcode]map的用法
  • 【HCIA-网工探长】04:ARP笔记
  • 电机控制常见面面试问题(十九)
  • Spring Boot 的自动装配
  • 3.25-1 postman执行+弱网测试
  • 如何选择免费国产类 Postman 软件?
  • Docker-Volume数据卷详讲
  • Springboot整合elasticsearch详解 封装模版 仓库方法 如何在linux里安装elasticsearch
  • 从零开始实现 C++ TinyWebServer 构建响应 HttpResponse类详解
  • linux-------------进程概念(中)
  • ideaIU-2023.2.5.exe install (IntelliJ_IDEA_IU_2023.2.5)