GET和POST的请求的区别
GET 和 POST 都是 HTTP 请求方法,主要区别有以下几点:
用途不同:GET 用于获取资源,POST 用于提交数据并可能改变服务器状态。
幂等性不同:GET 是幂等的,多次请求结果一致;POST 不是幂等的。
参数位置不同:GET 参数一般放在 URL 中,POST 参数放在请求体中。
缓存不同:浏览器通常会缓存 GET 请求,而 POST 默认不缓存。
数据大小限制:GET 受 URL 长度限制(因为get参数会显示在URL上),POST 理论上没有限制。
另外,两者在 HTTP 层安全性是一样的,真正的安全依赖 HTTPS。
POST 和 PUT 的区别
POST 和 PUT 都用于向服务器提交数据,但语义不同:
第一,作用不同:POST 一般用于创建资源,PUT 一般用于更新指定资源。
第二,幂等性不同:POST 是非幂等的,多次请求可能创建多个资源;PUT 是幂等的,多次执行结果相同。
第三,请求 URL 不同:POST 通常作用于资源集合,例如 /users,而 PUT 通常指定资源 id,例如 /users/1。
常见的HTTP请求头和响应头
常见 HTTP 请求头(Request Headers)
HTTP 请求头用于描述客户端的信息以及请求的相关配置,常见的有:
Accept:浏览器可接受的内容类型
Accept-Language:浏览器支持的语言
Accept-Encoding:支持的压缩格式,如 gzip
Host:请求的服务器域名
User-Agent:客户端浏览器信息
Cookie:客户端携带的 Cookie 数据
Referer:当前请求来源页面 URL
Connection:连接方式,如 keep-alive
常见 HTTP 响应头(Response Headers)
HTTP 响应头用于描述服务器返回数据的相关信息:
Date:响应时间
Server:服务器类型
Content-Type:返回数据的类型
Cache-Control:缓存控制策略
Connection:连接状态
常见 Content-Type 类型(重点 ⭐)
Content-Type 用于表示请求或响应体的数据格式。
常见类型:
application/x-www-form-urlencoded
默认表单提交方式
数据格式:key=value&key2=value2
multipart/form-data:用于文件上传
application/json:JSON 格式数据(前后端分离最常用)
text/xml:XML 数据格式
HTTP状态码304是多好还是少好
304 Not Modified 表示客户端请求的资源自上次访问后未被修改,服务器告知可以使用缓存内容。
不是错误,是性能优化手段,可减少带宽和提高访问速度。
静态或更新少的页面出现 304 是好事。
对频繁更新的页面或搜索引擎抓取页面,过多 304 可能影响抓取频率、收录和权重。
OPTIONS请求方法及使用场景
OPTIONS 是 HTTP 请求方法之一,用于获取指定资源所支持的通信选项。
作用与特点:
获取服务器支持的 HTTP 方法,例如 GET、POST、PUT、DELETE 等。
用于检查访问权限,常用于 CORS 跨域请求的预检(preflight)。
响应不能缓存,属于安全探测或协商机制。
HTTP 1.0 与 HTTP 1.1 区别
连接方式:HTTP/1.0 默认非持久连接,每次请求都要建立 TCP 连接;HTTP/1.1 默认持久连接(Connection: keep-alive),可以复用 TCP 连接,提高性能。
资源请求:HTTP/1.0 不支持断点续传,每次返回整个资源;HTTP/1.1 引入 Range 请求头,可请求资源的部分内容(206 Partial Content)。
缓存机制:HTTP/1.1 有更灵活的缓存控制策略。
Host 字段:HTTP/1.1 新增 Host,用于支持虚拟主机,一台 IP 上可托管多个网站;HTTP/1.0 没有 Host 字段。
请求方法:HTTP/1.1 新增了 PUT、HEAD、OPTIONS 等方法,功能更丰富。
HTTP/1.1 与 HTTP/2 区别
协议格式:HTTP/1.1 是文本协议(ASCII),HTTP/2 是二进制协议,所有信息都封装为"帧"。
多路复用:HTTP/2 在同一个 TCP 连接里可同时发送多个请求和响应,避免队头阻塞。
数据流:HTTP/2 将每个请求或响应的数据包称为数据流,每个数据流都有唯一 ID,用于标识属于哪个请求。
头信息压缩:HTTP/2 对请求头和响应头进行压缩,并维护头表索引,避免重复发送,节省带宽。
服务器推送:HTTP/2 支持服务器主动向客户端推送资源,减少延迟,但只用于静态资源,不等同 WebSocket 或 SSE。
HTTP和HTTPS协议的区别
安全性:HTTP 明文传输,HTTPS 基于 SSL/TLS 加密,支持数据加密、身份认证和完整性校验,更安全。
证书:HTTPS 需要 CA 证书,HTTP 不需要。
端口:HTTP 默认端口 80,HTTPS 默认端口 443。
协议结构:HTTP 是超文本传输协议,HTTPS 是 HTTP + SSL/TLS 组成的安全协议。
GET方法URL长度限制的原因
GET 方法 URL 长度限制不是 HTTP 协议规定的,而是浏览器和服务器实现限制。为兼容性考虑,最好不超过 2083 个字符(IE浏览器的限制最严格是2083字符)。
当在浏览器中输入 Google.com 并且按下回车之后发生了什么?
输入 URL 后,浏览器解析 URL 并检查缓存,DNS 获取 IP,再通过 TCP 三次握手建立连接;HTTPS 协议下还会进行 TLS 握手(协商加密算法,交换随机数和证书,生成共享秘钥。),服务器返回 HTML,浏览器解析构建 DOM/CSSOM,渲染页面,最后 TCP 四次挥手释放连接。
对keep-alive的理解
HTTP 默认是短连接:每次请求/响应建立一个 TCP 连接,完成后立即断开。
Keep-Alive(长连接)允许客户端和服务器复用同一个 TCP 连接,多次请求无需重新建立连接。
使用方式:
HTTP/1.0 默认非 Keep-Alive,需要手动添加 Connection: keep-alive,关闭用 Connection: close。
HTTP/1.1 默认长连接,传输完成后连接保持,关闭时客户端发送 Connection: close。
建立过程:
客户端请求报文带 Connection: keep-alive
服务器返回响应并带 Connection: keep-alive
双方建立 Keep-Alive 连接
断开过程:
服务器自动断开:客户端无 Connection 字段,传输完成后服务器关闭连接。
客户端主动断开:客户端发送 Connection: close,服务器处理后关闭连接。
优点:
减少 TCP 建立和关闭开销 → CPU/内存占用低
支持 HTTP 管线化 → 请求/响应效率高
降低延迟 → 后续请求无需握手
减少拥塞控制影响
缺点:
长时间占用 TCP 连接 → 系统资源可能被浪费
页面有多张图片,HTTP是怎样的加载表现?
HTTP/1.x:
同一域名下,浏览器最大 TCP 连接数约 6 个。
超过 6 张图片时,需要排队请求 → 加载速度受限。
常用优化:多域名部署,提高同时请求数量。
HTTP/2:
支持单连接多路复用,同一个 TCP 连接可以同时发送多个请求。
图片等资源可以几乎同时加载 → 页面加载速度快。
HTTP2的头部压缩算法是怎样的?
HTTP/2 使用 HPACK 算法压缩头部,通过字典和索引号减少重复数据,支持哈夫曼编码整数和字符串,压缩率可达 50%~90%。
工作原理:
首部表(Header Table):客户端和服务器维护一张表,存储历史发送过的键值对。
索引复用:相同的头部字段不再重复发送,只发送索引号或差异数据。
渐进更新:新头部字段可以追加到表末尾,或者替换表中旧值,首部表在整个连接周期内有效。
哈夫曼编码:整数和字符串通过哈夫曼编码进一步压缩。
效果:后续请求只需发送差异字段 → 减少冗余数据,降低传输开销,提高性能。
HTTP 请求报文结构
请求行(Request Line):包含请求方法、URL、HTTP 版本
格式示例:GET /index.html HTTP/1.1
请求头部(Request Headers):由关键字:值 组成,每行一对
常见字段:
User-Agent:浏览器类型
Accept:客户端可识别的内容类型
Host:请求的主机名(支持虚拟主机)
空行用于分隔头部和请求体
请求体(Request Body)
POST、PUT 等请求携带的数据请求行(Request Line)
HTTP 响应报文结构
HTTP 响应报文由 4 部分组成:
响应行(Status Line):包含 HTTP 版本、状态码、状态原因短语
示例:HTTP/1.1 200 OK
响应头(Response Headers):由 关键字:值 组成,每行一对
常见字段:
Content-Type:返回资源的 MIME 类型
Content-Length:返回数据长度
Cache-Control:缓存策略
Server:服务器信息
空行:用于分隔头部和响应体
响应体:(Response Body)服务器返回的数据(HTML、JSON、图片等)
HTTP 协议的优点和缺点
HTTP(HyperText Transfer Protocol,超文本传输协议)是一种应用层协议,用于规定客户端与服务器之间的通信格式和数据传输方式,默认使用 80 端口,基于 TCP 实现可靠传输。
优点:
支持 Client / Server 模式:客户端负责请求,服务器负责响应,职责清晰,易扩展
简单快速:请求格式简单(方法 + URL),实现成本低,通信效率高
无连接(HTTP/1.0 特点):每次请求独立建立 TCP 连接,请求完成立即断开,减少服务器资源占用
无状态:服务器不保存客户端状态信息,每次请求相互独立,有利于服务器扩展和负载均衡
灵活:可以传输任意类型数据,通过 Content-Type 指定数据类型
缺点
① 可能被窃听(无加密)
② 无法验证身份(可能被伪装)
③ 数据可能被篡改(无完整性校验)
HTTP 是基于 TCP 的应用层协议,特点是简单、无状态、灵活、易扩展。但它采用明文传输,无法验证身份和保证数据完整性,因此存在安全问题,这也是 HTTPS 出现的原因。
说一下HTTP 3.0
HTTP/3 是基于 UDP 的 HTTP 协议版本,底层使用 QUIC 协议实现可靠传输。QUIC 在 UDP 上实现了拥塞控制、数据重传和多路复用,并内置 TLS1.3 加密(加密成为协议默认能力,减少握手次数,提高连接建立速度)。相比 HTTP/2,HTTP/3 解决了 TCP 队头阻塞问题,每个数据流独立传输,丢包只影响当前流,其他流不受影响(HTTP/2 虽然支持多路复用,但仍受 TCP 限制:一个包丢失 → 整个 TCP 队列等待),同时支持 0~1 RTT 快速建立连接,从而显著降低延迟并提升网络性能。
HTTP协议的性能怎么样
HTTP 协议的性能主要受连接管理方式和数据传输机制影响。HTTP 基于 TCP 的请求-响应模型,在 HTTP/1.0 中默认使用短连接,每次请求都需要建立和断开 TCP 连接,产生较大的握手开销,导致性能较低。HTTP/1.1 引入了长连接(Keep-Alive),允许多个请求复用同一个 TCP 连接,减少连接建立成本,从而提升传输效率。
同时 HTTP/1.1 支持管道化传输,但由于响应必须按顺序返回,会产生队头阻塞问题。浏览器通常通过并发连接和域名分片进行优化。后来 HTTP/2 通过多路复用解决队头阻塞,HTTP/3 基于 QUIC 协议进一步减少握手延迟并提升传输性能。
URL有哪些组成部分
一个完整的 URL 主要由以下几部分组成:协议、域名、端口、路径、查询参数和锚点。
协议表示访问资源所使用的通信协议,如 HTTP 或 HTTPS;域名用于定位服务器地址;端口用于指定服务器服务端口,若省略则使用默认端口(HTTP 为 80,HTTPS 为 443)。路径部分包括虚拟目录和文件名,用来定位服务器上的具体资源。
在路径之后,"?" 后面是查询参数,用于向服务器传递数据,多个参数之间用 "&" 连接;"#" 后面是锚点,用于页面内部定位,不会发送到服务器。整个 URL 用来唯一标识网络中的一个资源。
与缓存相关的HTTP请求头有哪些
强缓存(直接使用本地缓存,不请求服务器)
Expires:指定缓存的过期时间(HTTP/1.0),是一个绝对时间。
Cache-Control:HTTP/1.1 引入,通过 max-age 等指令控制缓存时间,优先级高于 Expires。
协商缓存(需要向服务器验证缓存是否可用)
Etag / If-None-Match:通过资源唯一标识判断资源是否变化。
Last-Modified / If-Modified-Since:通过资源最后修改时间判断是否更新。
强缓存优先于协商缓存,强缓存失效后才会进行协商缓存验证。