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

HTTP请求报文头和相应报文头

一、HTTP请求报文头

HTTP请求报文由请求行、请求头和请求体组成。请求头包含客户端向服务器发送的附加信息。

1.1 请求行

  • 格式: 方法 请求URI HTTP/版本
  • 示例: GET /index.html HTTP/1.1
      方法: 请求类型,如GET、POST、PUT、DELETE等。
      请求URI: 请求的资源路径。
      HTTP/版本: 使用的HTTP协议版本。

1.2 请求头字段

  • Host: 服务器域名和端口号。
    示例: Host: www.example.com

  • User-Agent: 客户端信息(浏览器、操作系统等)。
    示例: User-Agent: Mozilla/5.0

  • Accept: 客户端可接受的MIME类型。
    示例: Accept: text/html,application/xhtml+xml

  • Accept-Language: 客户端可接受的语言。
    示例: Accept-Language: en-US,en;q=0.5

  • Accept-Encoding: 客户端可接受的编码方式。
    示例: Accept-Encoding: gzip, deflate

  • Connection: 控制连接状态。
    示例: Connection: keep-alive

  • Referer: 请求来源页面的URI。
    示例: Referer: https://www.example.com/previous-page

  • Authorization: 认证信息。
    示例: Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

  • Cookie: 客户端发送的Cookie。
    示例: Cookie: name=value; name2=value2

二、HTTP响应报文头

HTTP响应报文由状态行、响应头和响应体组成。响应头包含服务器返回的附加信息。

2.1 状态行

  • 格式: HTTP/版本 状态码 状态短语
  • 示例: HTTP/1.1 200 OK
       HTTP/版本: 使用的HTTP协议版本。
       状态码: 表示请求结果的三位数字。
       状态短语: 状态码的文本描述。

2.2 响应头字段

  • Server: 服务器软件信息。
    示例: Server: Apache/2.4.1

  • Date: 响应生成的时间。
    示例: Date: Mon, 23 May 2022 22:38:34 GMT

  • Content-Type: 响应体的MIME类型。
    示例: Content-Type: text/html; charset=UTF-8

  • Content-Length: 响应体的字节数。
    示例: Content-Length: 1234

  • Content-Encoding: 响应体的编码方式。
    示例: Content-Encoding: gzip

  • Set-Cookie: 服务器设置的Cookie。
    示例: Set-Cookie: name=value; Path=/

  • Cache-Control: 缓存控制指令。
    示例: Cache-Control: no-cache

  • Location: 重定向目标URI。
    示例: Location: https://www.example.com/new-location

  • WWW-Authenticate: 认证方式。
    示例: WWW-Authenticate: Basic realm=“Access to the staging site”

三、常见状态码

状态码英文描述详解
200OK:请求成功。
301Moved Permanently:资源永久重定向。
400Bad Request:请求无效。
401Unauthorized:请求未认证。
403Forbidden:请求被拒绝。
404Not Found:资源未找到。
500Internal Server Error:服务器内部错误。

四、GET 和 POST 对比

GET 和 POST是 HTTP 协议中最常用的两种请求方法,它们在用途、数据传输方式、安全性等方面有显著区别。以下是 GET 和 POST 的主要区别:

1、 用途

GET:

  • 用于从服务器获取资源。
  • 通常用于请求数据,例如加载网页、查询信息等。
  • 是幂等的(多次请求不会对资源产生副作用)。

POST:

  • 用于向服务器提交数据。
  • 通常用于提交表单、上传文件、修改数据等。
  • 是非幂等的(多次请求可能会对资源产生副作用)。

2、数据传输方式

GET:

  • 数据通过 URL 的查询字符串(Query String)传递。
  • 示例:https://example.com/search?q=hello&page=1
  • 数据附加在 URL 后面,以 ? 开头,参数之间用 & 分隔。
  • 数据可见,会显示在浏览器地址栏中。

POST:

  • 数据通过请求体(Request Body)传递。
  • 示例:表单数据或 JSON 数据。
  • 数据不可见,不会显示在浏览器地址栏中。

3、数据长度限制

GET:

  • 受 URL 长度限制(通常为 2048 个字符,具体取决于浏览器和服务器)。
  • 不适合传输大量数据。

POST:

  • 没有长度限制,适合传输大量数据(如文件上传)。

4、安全性

GET:

  • 数据暴露在 URL 中,容易被缓存、记录在浏览器历史或服务器日志中。
  • 不适合传输敏感信息(如密码)。

POST:

  • 数据在请求体中传输,相对更安全。
  • 但仍需结合 HTTPS 来确保数据加密传输。

5、缓存

GET:

  • 请求可以被缓存,浏览器可能会存储 GET 请求的结果。
  • 适合请求静态资源(如图片、CSS 文件)。

POST:

  • 请求默认不会被缓存。
  • 适合提交动态数据。

6、幂等性

GET:

  • 是幂等的,多次请求不会对资源产生影响。
  • 例如:多次请求同一个 URL,返回的结果相同。

POST:

  • 不是幂等的,多次请求可能会对资源产生不同影响。
  • 例如:多次提交表单可能会导致重复创建资源。

7、 浏览器行为

GET:

  • 可以直接通过浏览器地址栏发起请求。
  • 支持书签保存。

POST:

  • 需要通过表单或 JavaScript 发起请求。
  • 不支持直接通过地址栏发起。

8、适用场景

GET:

  • 获取数据(如搜索、分页)。
  • 请求静态资源(如图片、CSS、JS 文件)。

POST:

  • 提交数据(如登录、注册、文件上传)。
  • 修改数据(如创建、更新、删除资源)。

9、示例对比

GET 请求

GET /search?q=hello&page=1 HTTP/1.1
Host: example.com

数据通过 URL 传递。

POST 请求

POST /submit-form HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 27

username=john&password=123

数据通过请求体传递。

10、总结对比表

特性GETPOST
用途获取资源提交数据
数据传输方式URL 查询字符串请求体
数据长度有限制(URL 长度)无限制
安全性较低(数据暴露在 URL 中)较高(数据在请求体中)
缓存可缓存不可缓存
幂等性幂等非幂等
浏览器行为可通过地址栏发起需通过表单或 JS 发起
适用场景获取数据、请求静态资源提交数据、修改数据

11、选择 GET 还是 POST?

  • 如果需要从服务器获取数据,且数据量较小,使用 GET。
  • 如果需要向服务器提交数据,尤其是敏感信息或大量数据,使用 POST。

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

相关文章:

  • 深入探索C语言中的字符串处理函数:strstr与strtok
  • 科研绘图系列:R语言绘制地图和山脊图(map ridge plot)
  • LVS集群(DR/NAT)
  • 知识拓展:设计模式之装饰器模式
  • 【docker知识】快速找出服务器中占用内存较高的容器
  • 我的新书《青少年Python趣学编程(微课视频版)》出版了!
  • sql调优之数据库开发规范
  • vite让每个scss文件自动导入某段内容
  • uniapp实现首行首列冻结效果
  • 能源物联网数据采集网关 多协议对接解决方案
  • 代码随想录算法营Day38 | 62. 不同路径,63. 不同路径 II,343. 整数拆分,96. 不同的二叉搜索树
  • ICLR2022 | IAA | 从数据分布的角度重新思考对抗转移性
  • Qt接入deepseekv3 API 提供openssl 1.1.1g安装包
  • win11 MBR 启动 如何把我的硬盘改 GPT win11 的 UEFI 启动
  • Vulhub靶机 ActiveMQ任意 文件写入(CVE-2016-3088)(渗透测试详解)
  • 使用爬虫获取1688商品分类:实战案例指南
  • PMP冲刺每日一题(8)
  • Java 语言深度剖析与实践应用
  • 一文深入了解DeepSeek-R1:模型架构
  • Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现一次触发控制三个光源开关分别采集三张图像(C#)