99%后端面试必问!HTTP协议核心知识点大揭秘

推荐阅读:

Java必问的场景题汇总,80%来自于大厂真题Spring、Spring Boot/Cloud、Dubbo、JVM、集合、多线程、JPA、MyBatis、MySQL、大数据、Docker、Servlet、JavaWeb、Redis、算法等,几乎覆盖了所有 Java 相关的面试真题!深知后端成长不易,他爆肝两个月,从面试官视角出发,结合今年 9、10 月最新后端市场风向,整理出了这份超牛的《后端 offer 收割机养成指南》,内含。他是现任阿里后端 Leader,在后端行业深耕近十年,见证了互联网的飞速发展,也见证了无数后端人的成长。 https://blog.csdn.net/m0_64435718/article/details/148075497?spm=1001.2014.3001.5501

为什么HTTP协议如此重要?

HTTP(HyperText Transfer Protocol)作为互联网的基础协议之一,是每个后端开发者必须深入理解的核心技术。无论是日常开发中的API设计,还是面试中的高频考点,HTTP协议都占据着举足轻重的地位。本文将全面剖析HTTP协议的核心知识点,助你在技术面试中游刃有余。

一、HTTP协议基础

1.1 HTTP协议的本质

HTTP是一种无状态的、应用层的、基于请求与响应模式的协议,它建立在TCP/IP协议之上,默认使用80端口。其核心特点包括:

  • • 无连接:每次连接只处理一个请求(HTTP/1.1后支持持久连接)

  • • 无状态:协议本身不保留之前的请求信息

  • • 灵活:可以传输任意类型的数据对象

1.2 URL与URI

URI(统一资源标识符)是标识资源的字符串,而URL(统一资源定位符)是URI的子集,不仅标识资源,还提供定位资源的方式。

一个完整的URL结构:

协议://用户名:密码@子域名.域名.顶级域名:端口号/目录/文件名.文件后缀?参数=值#标志

二、HTTP请求与响应

推荐阅读:

Java必问的场景题汇总,80%来自于大厂真题Spring、Spring Boot/Cloud、Dubbo、JVM、集合、多线程、JPA、MyBatis、MySQL、大数据、Docker、Servlet、JavaWeb、Redis、算法等,几乎覆盖了所有 Java 相关的面试真题!深知后端成长不易,他爆肝两个月,从面试官视角出发,结合今年 9、10 月最新后端市场风向,整理出了这份超牛的《后端 offer 收割机养成指南》,内含。他是现任阿里后端 Leader,在后端行业深耕近十年,见证了互联网的飞速发展,也见证了无数后端人的成长。 https://blog.csdn.net/m0_64435718/article/details/148075497?spm=1001.2014.3001.5501

2.1 请求报文结构

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html,application/xhtml+xml
Accept-Language: en-US,en;q=0.5
Connection: keep-alive
  • • 请求行:方法 + URI + 协议版本

  • • 请求头:若干键值对

  • • 空行

  • • 请求体(GET方法通常没有)

2.2 响应报文结构

HTTP/1.1 200 OK
Date: Mon, 23 May 2022 22:38:34 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 138
Last-Modified: Wed, 08 Jan 2022 23:11:55 GMT
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
Connection: close

<html>
...
</html>
  • • 状态行:协议版本 + 状态码 + 状态描述

  • • 响应头:若干键值对

  • • 空行

  • • 响应体

2.3 常见HTTP方法

方法描述幂等性安全性
GET获取资源
POST提交数据,可能导致状态变化或副作用
PUT替换目标资源(完整更新)
PATCH部分修改资源
DELETE删除指定资源
HEAD类似GET,但只返回头部信息
OPTIONS返回服务器支持的HTTP方法
CONNECT建立隧道连接(用于HTTPS代理)--
TRACE回显服务器收到的请求,用于测试或诊断

三、HTTP状态码详解

状态码是面试必问的重点,必须熟练掌握:

3.1 1xx(信息性状态码)

  • • 100 Continue:客户端应继续发送请求

  • • 101 Switching Protocols:服务器同意切换协议

3.2 2xx(成功状态码)

  • • 200 OK:请求成功

  • • 201 Created:资源创建成功(通常配合POST/PUT)

  • • 202 Accepted:请求已接受但未处理完成

  • • 204 No Content:成功但无返回内容

  • • 206 Partial Content:部分内容(用于分块下载)

3.3 3xx(重定向状态码)

  • • 301 Moved Permanently:永久重定向

  • • 302 Found:临时重定向

  • • 304 Not Modified:资源未修改(缓存相关)

  • • 307 Temporary Redirect:临时重定向(保持方法不变)

  • • 308 Permanent Redirect:永久重定向(保持方法不变)

3.4 4xx(客户端错误状态码)

  • • 400 Bad Request:请求语法错误

  • • 401 Unauthorized:需要认证

  • • 403 Forbidden:服务器拒绝请求

  • • 404 Not Found:资源不存在

  • • 405 Method Not Allowed:方法不被允许

  • • 408 Request Timeout:请求超时

  • • 429 Too Many Requests:请求过于频繁

3.5 5xx(服务器错误状态码)

  • • 500 Internal Server Error:服务器内部错误

  • • 502 Bad Gateway:网关错误

  • • 503 Service Unavailable:服务不可用

  • • 504 Gateway Timeout:网关超时

四、HTTP头部字段精讲

4.1 通用头部字段

  • • Cache-Control:控制缓存行为

    • • no-cache:强制向服务器验证

    • • no-store:不缓存任何内容

    • • max-age=3600:资源有效期为3600秒

  • • Connection:控制不再转发给代理的头部字段/管理持久连接

  • • Date:创建报文的日期时间

4.2 请求头部字段

  • • Host:请求资源所在服务器

  • • Referer:请求来源

  • • User-Agent:客户端信息

  • • Accept:可处理的媒体类型

  • • Authorization:认证信息

  • • If-Modified-Since:比较资源的更新时间

  • • If-None-Match:比较ETag是否一致

4.3 响应头部字段

  • • Location:重定向URI

  • • Server:服务器信息

  • • ETag:资源的匹配信息

  • • WWW-Authenticate:服务器要求客户端的认证信息

4.4 实体头部字段

五、HTTP缓存机制

5.1 强缓存

通过Expires或Cache-Control实现,直接从本地缓存读取资源,不发送请求。

Cache-Control: max-age=31536000
Expires: Wed, 21 Oct 2026 07:28:00 GMT

5.2 协商缓存

通过Last-Modified/If-Modified-Since或ETag/If-None-Match实现,需要向服务器验证缓存是否有效。

ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"
Last-Modified: Wed, 21 Oct 2015 07:28:00 GMT

5.3 缓存策略最佳实践

  • • HTML文件:Cache-Control: no-cache

  • • 静态资源(JS/CSS/图片):Cache-Control: public, max-age=31536000, immutable

  • • API响应:Cache-Control: no-store 或合适的 max-age

六、HTTP安全机制

6.1 HTTPS工作原理

HTTPS = HTTP + SSL/TLS,通过以下机制保证安全:

  1. 1. 加密:对称加密传输数据

  2. 2. 认证:数字证书验证服务器身份

  3. 3. 完整性:防止数据被篡改

6.2 常见安全头部

  • • Strict-Transport-Security:强制HTTPS

    Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
  • • Content-Security-Policy:内容安全策略

    Content-Security-Policy: default-src 'self'
  • • X-Frame-Options:防止点击劫持

    X-Frame-Options: DENY
  • • X-XSS-Protection:XSS防护

    X-XSS-Protection: 1; mode=block

七、HTTP版本演进

7.1 HTTP/1.0 vs HTTP/1.1

特性HTTP/1.0HTTP/1.1
连接方式非持久连接默认持久连接
主机头可选必须
缓存机制简单更完善
状态码基本状态码新增24个状态码
分块传输不支持支持
管道化不支持支持(但有问题)

7.2 HTTP/2核心特性

  1. 1. 二进制分帧层:数据以二进制帧传输

  2. 2. 多路复用:一个连接并行处理多个请求

  3. 3. 头部压缩:HPACK算法减少头部大小

  4. 4. 服务器推送:服务器可主动推送资源

  5. 5. 流优先级:可设置请求优先级

7.3 HTTP/3与QUIC协议

HTTP/3基于QUIC协议,主要改进:

八、性能优化实践

8.1 减少HTTP请求

  • • 合并CSS/JS文件

  • • 使用CSS Sprites合并图片

  • • 内联小资源(Base64编码)

8.2 利用缓存

  • • 设置合适的Cache-Control

  • • 使用ETag/Last-Modified

  • • 配置CDN缓存

8.3 压缩传输

  • • 开启Gzip/Brotli压缩

      gzip on;
      gzip_types text/plain application/xml;
      brotli on;
      brotli_types text/plain text/css application/json;
  • • 压缩图片资源(WebP格式)

8.4 其他优化

  • • 域名分片(HTTP/2中不推荐)

  • • 预加载关键资源

      <link rel="preload" href="style.css" as="style">
  • • 使用HTTP/2服务器推送

九、经典面试题解析

  1. 1. GET和POST的本质区别是什么?

  2. 本质区别:GET是幂等的、安全的,而POST不是。实际区别:

  • • GET参数在URL中,长度受限;POST在请求体中,无长度限制

  • • GET可缓存,POST不可缓存

  • • GET不应修改服务器状态,POST可以

  1. 2. HTTP如何实现长连接

  2. 在HTTP/1.1中通过Connection: keep-alive实现,HTTP/2则原生支持多路复用。

  3. 3. HTTPS的握手过程是怎样的?

  • • 客户端发送ClientHello(支持的加密套件、随机数等)

  • • 服务器响应ServerHello(选择的加密套件、随机数)和证书

  • • 客户端验证证书,生成预主密钥并用公钥加密发送

  • • 双方根据随机数和预主密钥生成会话密钥

  • • 完成握手,开始加密通信

  1. 4. Cookie和Session的区别?

  • • Cookie存储在客户端,Session存储在服务器端

  • • Cookie有大小限制(约4KB),Session理论上无限制

  • • Cookie不安全可能被篡改,Session相对安全

  1. 5. 什么是跨域?如何解决?

  2. 跨域是由同源策略引起的限制,解决方案:

  • • JSONP(利用script标签不受同源策略限制)

  • • CORS(现代标准解决方案)

  • • 代理服务器(后端转发请求)

  • • postMessage(窗口间通信)

  • • WebSocket(不受同源策略限制)

 

推荐阅读:

Java必问的场景题汇总,80%来自于大厂真题Spring、Spring Boot/Cloud、Dubbo、JVM、集合、多线程、JPA、MyBatis、MySQL、大数据、Docker、Servlet、JavaWeb、Redis、算法等,几乎覆盖了所有 Java 相关的面试真题!深知后端成长不易,他爆肝两个月,从面试官视角出发,结合今年 9、10 月最新后端市场风向,整理出了这份超牛的《后端 offer 收割机养成指南》,内含。他是现任阿里后端 Leader,在后端行业深耕近十年,见证了互联网的飞速发展,也见证了无数后端人的成长。 https://blog.csdn.net/m0_64435718/article/details/148075497?spm=1001.2014.3001.5501

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值