Http核心:Get和Post

1.设计初衷

  • GET:核心目的是获取资源,属于 “查询操作”。遵循 “安全无副作用” 原则 —— 仅读取数据,不修改服务器状态(如查询用户信息、加载图片)。具备幂等性:多次发送相同请求,服务器返回结果一致(不会重复创建 / 修改资源)
  • POST:核心目的是提交数据,属于 “写操作”。会修改服务器状态(如注册用户、发布文章),存在副作用。不具备幂等性:多次发送相同请求,可能产生重复效果(如重复提交订单)

2. 数据传输:位置、格式与限制

特性GetPost
数据位置拼接在 URL 末尾(查询字符串,格式为key=value&key2=value2放在请求体(Body)中,支持多种格式(FormData、JSON、XML 等)
数据长度限制受浏览器 / 服务器限制(多数浏览器 URL 长度上限 2048 字符),HTTP 协议本身无限制无明确长度限制(仅受服务器配置约束),适合传输大量数据
数据可见性参数暴露在 URL 中,肉眼可直接查看参数隐藏在请求体中,URL 无体现
数据格式限制仅支持 ASCII 字符,特殊字符需 URL 编码(如空格→%20支持任意字符(包括二进制数据),可直接传输文件、JSON 等复杂数据

3. 缓存与历史:可复用 vs 不可复用

  • GET:支持浏览器缓存(会被存储在缓存数据库)、可添加为书签、记录在浏览器历史中。优势:重复请求可直接使用缓存,减少服务器压力,提升访问速度。
  • POST:默认不被缓存,不会存入浏览器历史,无法添加为书签。原因:POST 是写操作,缓存可能导致重复提交,历史记录可能泄露敏感数据。

4. 安全性:表面安全 vs 相对安全

  • GET:安全性低。参数暴露在 URL 中,易被日志记录(服务器日志、代理日志)、网络嗅探捕获,不适合传输敏感数据(密码、令牌、银行卡号)。
  • POST:安全性更高(非绝对安全)。参数隐藏在请求体中,不易被直接捕获,但未加密的 POST 数据仍可能被中间人拦截破解。关键提醒:无论 GET 还是 POST,敏感数据都需搭配 HTTPS 加密传输。

5. 其他关键差异

特性GETPOST
浏览器后退 / 刷新无副作用(重复查询)可能触发重复提交(需做防重放处理)
请求次数通常一次请求(直接发送请求体)可能两次请求(先发送 OPTIONS 预检请求,再发送正式请求)
协议规范建议仅用于查询,不允许携带请求体(部分服务器不支持)用于提交数据,可灵活搭配请求体格式
幂等性幂等(多次请求效果一致)非幂等(多次请求可能产生不同结果)
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇