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

HTTP 完全指南(一):请求与响应报文结构深度详解

引言

HTTP(HyperText Transfer Protocol,超文本传输协议)是互联网上最基础、最广泛使用的应用层协议。你在浏览器中输入网址、点击链接、提交表单——背后都是 HTTP 在传输数据。

然而,很多开发者对 HTTP 的理解停留在"请求-响应"四个字。一旦被问到"HTTP 报文长什么样?请求头有哪些?状态码 301 和 302 有什么区别?POST 和 GET 到底哪里不同?"就答不上来。

本文作为 HTTP 系列第一篇,将彻底讲透 HTTP 最基础、也最核心的内容:报文结构、状态码、请求头和响应头。这是后续理解缓存、Cookie、HTTPS、跨域等高级特性的基石。

第一部分:HTTP 基础回顾

一、什么是 HTTP

HTTP 是客户端(浏览器)和服务器之间请求-响应式的通信协议。

二、HTTP 的核心特点

特点说明
无状态每次请求都是独立的,服务器不记得上次是谁、做了什么
基于 TCP可靠传输,默认端口 80
请求-响应客户端主动,服务器被动
可扩展通过请求头/响应头灵活扩展功能

第二部分:HTTP 请求报文

一、请求报文结构

一个真实的 GET 请求报文(用curl -v抓取):

GET /api/users HTTP/1.1 Host: www.example.com User-Agent: curl/7.68.0 Accept: */* Connection: keep-alive

一个真实的 POST 请求报文

POST /api/login HTTP/1.1 Host: www.example.com Content-Type: application/x-www-form-urlencoded Content-Length: 27 User-Agent: Mozilla/5.0 Connection: keep-alive username=admin&password=123

二、请求行(Request Line)

格式方法 URL 协议版本

组成部分说明示例
方法对资源的操作GET、POST、PUT、DELETE
URL请求的资源路径/index.html/api/users
协议版本HTTP 版本号HTTP/1.1HTTP/2

三、常见请求方法

方法含义请求体幂等性安全性
GET获取资源❌ 无✅ 安全
POST提交数据/创建资源✅ 有❌ 不安全
PUT更新资源(全量替换)✅ 有
PATCH更新资源(部分修改)✅ 有
DELETE删除资源❌ 通常无
HEAD只获取响应头(无体)❌ 无
OPTIONS查询服务器支持的方法❌ 无
TRACE回显请求(调试用)❌ 无
CONNECT建立隧道(HTTPS 代理)

幂等性:多次相同的请求,结果一样。GET(查询)、PUT(全量更新)、DELETE(删除)是幂等的;POST(新增)不是——两次 POST 会创建两条记录。

安全性:不修改服务器数据的方法叫"安全"方法。GET 是安全的,POST/PUT/DELETE 不是。

GET 和 POST 的区别(面试必问)
对比项GETPOST
语义获取资源提交数据/创建资源
参数位置URL 查询字符串请求体
参数长度受 URL 长度限制(浏览器限制约 2KB)无限制
缓存可缓存默认不缓存
书签可以收藏不能
后退/刷新无害会提示重新提交
幂等性✅ 幂等❌ 不幂等
安全性✅ 安全❌ 不安全
可见性URL 中可见请求体中,相对隐蔽

四、常见请求头

请求头含义示例
Host请求的主机名(必选,HTTP/1.1)Host: www.example.com
User-Agent客户端信息(浏览器/系统)User-Agent: Mozilla/5.0...
Accept客户端能接受的 MIME 类型Accept: text/html, */*
Accept-Encoding客户端能接受的压缩方式Accept-Encoding: gzip, deflate
Accept-Language客户端期望的语言Accept-Language: zh-CN, zh
Connection连接管理Connection: keep-alive
Content-Type请求体的 MIME 类型Content-Type: application/json
Content-Length请求体的字节数Content-Length: 128
Cookie携带的 CookieCookie: session_id=abc123
Referer来源页面 URLReferer: https://www.baidu.com
Authorization认证信息Authorization: Bearer token123
Cache-Control缓存控制Cache-Control: no-cache
Origin请求来源(跨域相关)Origin: https://www.example.com
Content-Type 详解

第三部分:HTTP 响应报文

一、响应报文结构

一个真实的响应报文

HTTP/1.1 200 OK Server: nginx/1.18.0 Date: Mon, 02 Jun 2024 10:00:00 GMT Content-Type: text/html; charset=utf-8 Content-Length: 127 Connection: keep-alive Cache-Control: max-age=3600 <!DOCTYPE html> <html> <head><title>Example</title></head> <body>Hello World</body> </html>

二、状态行(Status Line)

格式协议版本 状态码 状态描述

三、状态码全解

301 vs 302

401 vs 403
状态码含义典型场景
401 Unauthorized需要登录未登录访问需要权限的页面
403 Forbidden登录了但权限不够普通用户访问管理员页面

四、常见响应头

响应头含义示例
Content-Type响应体的 MIME 类型和编码Content-Type: text/html; charset=utf-8
Content-Length响应体的字节数Content-Length: 1024
Server服务器软件信息Server: nginx/1.18.0
Date响应生成时间(GMT)Date: Mon, 02 Jun 2024 10:00:00 GMT
Set-Cookie设置 CookieSet-Cookie: session=abc123; HttpOnly
Cache-Control缓存控制Cache-Control: max-age=3600
Location重定向地址Location: https://www.new-url.com
Access-Control-Allow-Origin跨域允许的来源Access-Control-Allow-Origin: *
Content-Encoding内容压缩方式Content-Encoding: gzip

第四部分:Connection 与长短连接

一、短连接与长连接

请求头:Connection: keep-alive → 请求保持连接
响应头:Connection: keep-alive → 服务器同意保持连接
响应头:Connection: close → 服务器要关闭连接

第五部分:MIME 类型

服务器通过Content-Type告诉浏览器"返回的是什么",浏览器据此决定如何处理(渲染 HTML、显示图片、下载文件等)。

第六部分:用 curl 抓取完整报文

# 抓取完整请求和响应(包括头部) curl -v https://www.example.com # 输出示例: # > GET / HTTP/1.1 ← 请求行(> 表示发出的数据) # > Host: www.example.com ← 请求头 # > User-Agent: curl/7.68.0 # > Accept: */* # > # < HTTP/1.1 200 OK ← 状态行(< 表示收到的数据) # < Content-Type: text/html ← 响应头 # < Content-Length: 1256 # < # <html>... ← 响应体

第七部分:HTTP 面试题

1. Q:GET 和 POST 的区别?

A:GET 获取资源,参数在 URL 中,可缓存、可收藏、幂等;POST 提交数据,参数在请求体中,不可缓存、不幂等。

2. Q:301 和 302 的区别?

A:301 永久重定向(浏览器会记住新地址,搜索引擎更新索引);302 临时重定向(下次还访问原地址)。

3. Q:401 和 403 的区别?

A:401 表示"没登录,请先登录";403 表示"登录了但没权限访问"。

4. Q:HTTP 是无状态的,怎么记住用户?

A:通过 Cookie(服务器返回 Set-Cookie,浏览器下次请求自动带上)或 Token(JWT 等,存在客户端,每次请求携带)。

5. Q:HTTP/1.0 和 HTTP/1.1 的区别?

A:HTTP/1.1 默认长连接(Connection: keep-alive)、增加了 Host 头(一台服务器托管多个网站)、增加了缓存控制(Cache-Control)、支持管道化。

6. Q:Content-Type 的作用?

A:告诉服务器/浏览器"数据是什么格式"。服务端据此解析请求体,浏览器据此决定如何处理响应体。

7. Q:POST 请求的数据格式有哪些?

A:application/x-www-form-urlencoded(默认表单)、multipart/form-data(上传文件)、application/json(RESTful API 常用)。


总结

一、核心要点

主题关键内容
请求报文请求行 + 请求头 + 空行 + 请求体
响应报文状态行 + 响应头 + 空行 + 响应体
请求方法GET/POST/PUT/DELETE,幂等和安全
状态码1xx/2xx/3xx/4xx/5xx,301 vs 302,401 vs 403
关键头部Content-Type、Connection、Cookie、Cache-Control
长连接HTTP/1.1 默认,Connection: keep-alive

二、一句话记忆

HTTP 是请求-响应协议,报文由"行→头→空行→体"四部分组成。GET 获取数据参数在 URL,POST 提交数据参数在体。状态码 2xx 成功、3xx 重定向、4xx 客户端错、5xx 服务器错。HTTP/1.1 默认长连接,Content-Type 决定数据格式。

http://www.jsqmd.com/news/950644/

相关文章:

  • 为什么鲜果鲜榨的山茶油有一股类似哈喇味的怪味? - 中媒介
  • Docker--管理监控平台的应用
  • 执业医师考试哪个课程好?按专业、科目和基础精准匹配 - 医考机构品牌测评专家
  • 如何快速在Windows上安装安卓应用:APK Installer终极指南
  • windows文件资源管理器进入文件夹时加载缓慢问题优化
  • 2026年最新口碑手机阅读器排行榜,哪款才是你的最佳选择?
  • 数据库即时编译JIT
  • 终极英雄联盟本地自动化工具:League Akari 完全指南
  • 执医备考关键期如何选择真题试卷?阿虎医考三款产品以实力作答 - 医考机构品牌测评专家
  • 5分钟快速上手NTRIP:构建你的RTK差分数据传输系统
  • 2026苏州吴中/高新换季瓷砖起拱翘边是什么原因?怎么根治 - 苏易修缮
  • VR-Reversal:跨设备3D内容渲染引擎的技术解析与应用
  • 山茶油适合什么样的人吃? - 中媒介
  • 智能注册不是加个Chatbot!AI工具深度嵌入身份核验、行为建模与反欺诈的4层架构(内附架构图PDF)
  • 2026年6月北海黄金回收白银回收铂金回收权威可靠门店 TOP5 排行榜+联系方式电话
  • Notepad-- 终极指南:如何快速上手这款跨平台代码编辑器
  • B站网关事故背后:OpenResty 与 Lua 的稳定性代价
  • 终极指南:用html-to-docx实现HTML到Word文档的完美转换
  • 租赁企业AI整合倒计时:监管新规Q3生效前必须完成的6项合规性改造清单
  • 新手入门指南:在快马平台上从零开始构建你的第一个17图库网页
  • Docker 核心概念详解:从“会用”到“真正理解”
  • 新考纲背景下值得推荐的执医培训课程全解析 - 医考机构品牌测评专家
  • 3分钟掌握RPG Maker MV解密工具:新手也能轻松提取游戏资源
  • 英托克直流调速器ID271/35A/380V型号的跨电压应用观察
  • 2026上海浦东/闵行/宝山/徐汇瓷砖空鼓是什么原因?梅雨季翘边拱起真相解析 - 苏易修缮
  • 告别繁琐命令:用快马ai生成svn效率工具实现版本管理一键操作
  • 抖音视频下载器技术架构解析与高效应用指南
  • 2026年金属雕塑保养全攻略:让艺术之美历久弥新
  • 如何快速使用Layerdivider:AI智能分层工具提升创意工作效率的完整指南
  • 成都包包回收实测 5 家门店横向比价,收的顶报价同城口碑表现亮眼 - 奢侈品回收评测