计算机网络 之 【http协议】(hppt请求与响应细节、http版本与连接管理)

目录

1.http请求

[1.1. http请求方法](#1.1. http请求方法)

1.2.http请求报头

2.http响应

2.1.http响应状态码及其描述

2.2.重定向

3.http版本简介

4.http连接管理

[4.1.HTTP 连接管理基础](#4.1.HTTP 连接管理基础)

4.2.连接类型与演进

[4.2.1.短连接(HTTP/1.0 默认)](#4.2.1.短连接(HTTP/1.0 默认))

[4.2.2.长连接(HTTP/1.1 默认)](#4.2.2.长连接(HTTP/1.1 默认))

[4.2.3.多路复用(HTTP/2 引入)](#4.2.3.多路复用(HTTP/2 引入))

[4.2.4.QUIC 连接(HTTP/3 核心)](#4.2.4.QUIC 连接(HTTP/3 核心))


1.http请求

1.1. http请求方法

其中最常用的就是 GET 方法和 POST 方法

特性 GET POST
参数位置 URL 查询字符串(?key1=value1&key2=value2 请求体(Request Body)
长度限制 受浏览器/服务器限制(通常约2048字符) 无理论限制(受服务器配置影响)
安全性 较低(参数暴露在URL、日志、浏览器历史中) 相对较高(参数不直接显示在URL)
缓存 可被缓存(需配置Cache-Control 默认不缓存
典型用途 获取数据(如搜索、分页) 提交数据(如表单、文件上传)
数据类型 仅支持ASCII字符 支持二进制数据(如文件)

值得注意的是,两者均为明文传输 ,敏感数据(如密码)必须通过 HTTPS 加密

1.2.http请求报头

HTTP 请求报头分为通用报头、请求报头、实体报头 和 安全相关报头四类

Header 作用 示例
Host 指定服务器域名和端口 Host: www.baidu.com
User-Agent 客户端标识 User-Agent: Chrome/120.0
Accept 可接收的响应类型 Accept: text/html,image/*
Accept-Encoding 支持的压缩算法 Accept-Encoding: gzip, deflate
Accept-Language 首选语言 Accept-Language: zh-CN,zh;q=0.9
Connection 连接管理 Connection: keep-aliveclose
Content-Type 请求体类型(POST时) Content-Type: application/json
Content-Length 请求体长度 Content-Length: 256
Cookie 携带状态信息 Cookie: sessionId=abc123
Referer 来源页面 Referer: https://www.google.com
  1. Host:HTTP/1.1 必须包含,否则服务器会拒绝请求
  2. Content-Type:POST/PUT 请求带请求体时通常需要指定
  3. User-Agent 是 HTTP 请求头中标识客户端(浏览器、爬虫等)详细信息的字段,服务器通过它优化内容适配(如推荐下载版本)或实施反爬策略(如拦截非浏览器请求),而爬虫常通过随机化合法浏览器的 User-Agent 或结合无头浏览器等技术伪装身份以绕过检测,但需注意合法性与伦理边界,避免高频请求对服务器造成负担

2.http响应

2.1.http响应状态码及其描述

分类 状态码 描述 典型场景
2xx 成功 200 OK 请求成功,服务器已正确处理并返回响应。 访问网页、API 请求成功。
201 Created 请求成功且服务器创建了新资源(如 POST 请求后)。 提交表单后创建新用户或订单。
204 No Content 请求成功,但无返回内容(如 DELETE 请求后)。 删除数据后返回空响应。
3xx 重定向 301 Moved Permanently 资源永久迁移到新 URL,浏览器自动跳转并缓存新地址。 网站域名更换、HTTPS 强制跳转。
302 Found (临时重定向) 资源临时迁移到新 URL,浏览器跳转但不缓存新地址(可能被 307 替代)。 登录后跳转到首页、促销页面临时链接。
307 Temporary Redirect 临时重定向(严格遵循 HTTP 方法,如 POST 请求重定向后仍为 POST)。 302 类似,但保留请求方法。
304 Not Modified 资源未修改,浏览器可使用缓存版本(需配合 If-Modified-Since 等请求头)。 静态资源(如 CSS/JS)未更新时返回。
4xx 客户端错误 400 Bad Request 请求语法错误或参数无效(如缺少必填字段)。 提交表单时未填写必填项。
401 Unauthorized 未认证或认证失败(需提供有效 Authorization 头)。 未登录访问需要权限的接口。
403 Forbidden 服务器理解请求但拒绝执行(如无权限访问资源)。 普通用户尝试访问管理员页面。
404 Not Found 请求的资源不存在(如错误的 URL 或已删除)。 访问不存在的网页或 API 端点。
405 Method Not Allowed 请求方法不被允许(如用 GET 请求 POST 接口)。 对只支持 POST 的接口发送 GET 请求。
429 Too Many Requests 客户端请求频率过高,触发限流(需配合 Retry-After 头)。 爬虫或高频 API 调用被限制。
5xx 服务器错误 500 Internal Server Error 服务器内部错误(如代码异常、数据库连接失败)。 后端服务崩溃或未处理的异常。
502 Bad Gateway 服务器作为网关时收到上游服务器的无效响应(如 Nginx 代理后端失败)。 反向代理服务器与后端服务通信异常。
503 Service Unavailable 服务器暂时不可用(如过载、维护中,需配合 Retry-After 头)。 服务器宕机或流量激增导致暂时无法响应。
504 Gateway Timeout 服务器作为网关时未及时收到上游服务器的响应(如超时)。 反向代理等待后端服务超时。
  • 重定向状态码

301:永久重定向,浏览器会缓存新 URL,后续请求直接访问新地址

302/307:临时重定向,浏览器每次都会重新请求新 URL(307 更严格保留请求方法)

  • 客户端错误

401 vs 403:401 是未认证(需登录),403 是已认证但无权限

404:资源不存在,可能是路径错误或已被删除
404 页面是服务器针对不存在的资源请求返回的 HTTP 响应,其状态码为 404 Not Found,响应正文通常包含自定义的友好错误页面(如提示信息、导航链接等),既明确告知客户端资源缺失,又通过优化用户体验和流量引导降低用户流失,同时可通过日志记录辅助排查无效链接问题

复制代码
HTTP/1.1 404 Not Found          # 状态行:状态码 + 状态描述
Content-Type: text/html         # 响应头:声明正文是 HTML 格式
Content-Length: 1024            # 响应头:正文长度(可选)

<html>                          # 响应正文:自定义的 404 页面内容
<head><title>404 - 页面未找到</title></head>
<body>
  <h1>很抱歉,您访问的页面不存在</h1>
  <p>可能是链接错误或页面已被删除。</p>
  <a href="/">返回首页</a>
</body>
</html>
  • 服务器错误

500:通用服务器错误,需检查后端日志

502/504:通常与代理或负载均衡相关,需排查上游服务

2.2.重定向

重定向本质上就是让浏览器或客户端从一个 URL 自动跳转到另一个 URL

核心机制

  1. HTTP 状态码触发:服务器通过返回 3xx 状态码(如 301、302)告知客户端需要跳转
  2. Location 头指定目标:响应头中必须包含 Location 字段,指向新 URL(例如 Location: https://new.example.com
  3. 客户端自动执行:浏览器或 HTTP 客户端(如 curl、爬虫)收到 3xx 后,会自动发起对新 URL 的请求

Location 字段是 HTTP 重定向的核心机制:当服务器因资源迁移、权限控制等原因无法直接响应请求时,会返回 3xx 状态码(如 301、302)并在响应头中添加 Location 字段指定新地址,浏览器或客户端检测到 3xx 后会自动根据 Location 的值发起对新 URL 的请求,从而实现服务端引导客户端跳转的完整重定向流程

2.3.http响应报头

Header 作用 示例
Content-Type 关键字段:响应体MIME类型 Content-Type: text/html; charset=utf-8
Content-Length 响应体大小(字节) Content-Length: 2048
Content-Encoding 压缩算法 Content-Encoding: gzip
Set-Cookie 设置Cookie Set-Cookie: sessionId=xyz; HttpOnly
Cache-Control 缓存策略 Cache-Control: max-age=3600
Location 重定向地址(301/302) Location: /new-page
Server 服务器信息 Server: nginx/1.18.0
Connection 连接管理 Connection: keep-alive

2.4.Content-Type的重要性和常见值

Content-Type告诉浏览器如何解析响应体数据,错误设置会导致显示异常或安全问题

类型 Content-Type 说明
文本 text/html; charset=utf-8 HTML页面
文本 text/plain 纯文本
文本 text/css CSS样式表
脚本 application/javascript JavaScript
图片 image/jpegimage/pngimage/gif 图片资源
应用 application/json JSON数据
应用 application/xml XML数据
二进制 application/octet-stream 通用二进制流
表单 multipart/form-data 文件上传

3.http版本简介

特性 HTTP/1.0 HTTP/1.1 HTTP/2 HTTP/3
传输协议 TCP TCP TCP UDP(基于QUIC协议)
连接模型 短连接(每次请求新建TCP连接) 持久连接(Keep-Alive默认启用) 多路复用(单连接并行请求) 多路复用(QUIC连接,无队头阻塞)
数据传输格式 纯文本 纯文本 二进制分帧(Frames 二进制分帧(优化版QUIC帧)
头部压缩 不支持 不支持 HPACK(基于霍夫曼编码) QPACK(动态表优化,抗丢包)
服务器推送 不支持 不支持 支持(Server Push 支持(优化版推送机制)
请求优先级 不支持 不支持 支持(STREAM_DEPENDENCY 支持(QUIC流优先级控制)
安全性 无内置加密 无内置加密(依赖HTTPS) 依赖HTTPS(TLS 1.2+) 依赖HTTPS(默认支持TLS 1.3)
典型延迟问题 高(频繁建立连接) 中(持久连接减少延迟) 低(多路复用避免队头阻塞) 极低(0-RTT连接建立 + 快速迁移)
适用场景 早期Web 传统Web服务 高性能Web应用(如视频流) 移动网络/高丢包环境(如5G/卫星通信)
  • HTTP/1.0 → HTTP/1.1

核心改进:持久连接解决短连接性能问题,支持管道化但未广泛使用

新增功能:分块传输编码、缓存控制等

  • HTTP/1.1 → HTTP/2

核心改进:二进制分帧层实现多路复用,彻底解决队头阻塞问题;头部压缩减少冗余数据传输

新增功能:服务器推送、请求优先级、流控制

  • HTTP/2 → HTTP/3

核心改进:用QUIC协议替代TCP,通过UDP实现更快的连接建立和迁移能力;改进的头部压缩抗丢包性更强。

新增功能:0-RTT连接建立、连接ID支持移动场景无缝切换

4.http连接管理

4.1.HTTP 连接管理基础

HTTP 是基于 TCP 协议 的应用层协议,核心机制包括:

  1. 连接建立与终止:通过 TCP 三次握手建立连接,四次挥手释放连接
  2. 请求-响应模型:客户端发送请求,服务器返回响应后,连接可能关闭或复用

一个网页包含HTML文档本身及其引用的所有图片、样式、脚本等独立资源,每个资源都需要单独发起HTTP请求,但在HTTP/1.1长连接或HTTP/2多路复用下,多个请求可以复用同一个TCP连接

例如:

用户只访问qq域名不加任何参数,服务器会做出响应,一般返回首页源代码,浏览器做出解释后显示给用户,如果是网页有图片资源,浏览器就会申请图片资源。短连接时是一个申请一个响应,长连接时可以连续的请求与响应

4.2.连接类型与演进

4.2.1.短连接(HTTP/1.0 默认)

行为:每次请求响应后立即关闭 TCP 连接

问题:

高延迟:网页含多资源(如图片)时,需多次建立连接,重复 TCP 握手和慢启动过程

资源浪费:频繁创建/销毁连接消耗 CPU 和内存

复制代码
GET /index.html HTTP/1.0
Host: example.com

[服务器响应后连接关闭]

4.2.2.长连接(HTTP/1.1 默认)

行为:通过 Connection: keep-alive 头字段维持连接,支持连续请求响应

优化:

复用连接:同一连接可传输多个资源,减少 TCP 握手开销

持久化参数:可通过 Keep-Alive: timeout=60, max=100 控制连接存活时间(秒)和最大请求数

问题:

队头阻塞:同一连接内请求需按顺序处理,若某个请求阻塞(如大文件下载),后续请求需等待

复制代码
GET /index.html HTTP/1.1
Host: example.com
Connection: keep-alive

[服务器响应后连接保持打开,客户端可继续发送其他请求]

4.2.3.多路复用(HTTP/2 引入)

行为:在单个 TCP 连接内通过 二进制分帧层 并行传输多个请求/响应流

优势:

彻底解决队头阻塞:流之间独立调度,互不影响

高效利用带宽:动态调整流优先级(如先加载关键资源)

复制代码
[HTTP/2 连接建立后,客户端可并行发送多个流(Stream)]
Stream 1: GET /style.css
Stream 2: GET /script.js
[服务器可交错返回响应帧]

4.2.4.QUIC 连接(HTTP/3 核心)

行为:基于 UDP 的 QUIC 协议实现连接,支持 0-RTT 快速建立 和 连接迁移

优势:

**抗丢包:**每个流独立拥塞控制,避免全局阻塞

**移动友好:**切换网络(如 Wi-Fi → 4G)时保持连接不断

复制代码
[HTTP/3 首次连接即可发送加密数据,无需完整 TLS 握手]
QUIC Connection ID: 0x123456
[后续连接可复用 ID,实现无缝迁移]
相关推荐
孤影过客3 小时前
互联网谍战:HTTPS如何守护数据,以及头顶的量子阴云
网络协议·http·https
牛奶4 小时前
为什么全国人民都能秒开同一个视频?
前端·http·cdn
萝卜白菜。8 小时前
Http GET / 请求返回值不同的问题
网络·网络协议·http
jessecyj10 小时前
Nginx中$http_host、$host、$proxy_host的区别
运维·nginx·http
博语小屋11 小时前
Reactor、epoll下设计一个简单的网络版本计算器
服务器·开发语言·网络·网络协议·http·php
明月心95211 小时前
HTTP 9个请求方法
http
zl_dfq11 小时前
计算机网络 之 【http协议】(域名、url、http协议格式与细节)
http
Shanxun Liao12 小时前
WIN2022 搭建 HTTP 文件索引服务的完整步骤
网络·网络协议·http
%小农1 天前
在cursor中使用server
网络·网络协议·http