GET 与 POST(计算机网络)

**GET :**从服务器获取指定的资源。

**POST :**根据请求负荷(报文body)对指定的资源做出处理。

GET 和 POST 方法都是安全和幂等的吗?

在 HTTP 协议里安全和幂等的概念:

  • 「安全」:请求方法不会「破坏」服务器上的资源。
  • 「幂等」:多次执行相同的操作,结果都是「相同」的。

从 RFC 规范定义的语义来看:

  • GET 方法安全且幂等的 ,因为它是「只读」操作,无论操作多少次,服务器上的数据都是安全的,且每次的结果都是相同的。所以,可以对 GET 请求的数据做缓存,这个缓存可以做到浏览器本身上(彻底避免浏览器发请求),也可以做到代理上(如nginx),而且在浏览器中 GET 请求可以保存为书签。
  • POST 因为是「新增或提交数据」的操作,会修改服务器上的资源,所以是不安全 的,且多次提交数据就会创建多个资源,所以不是幂等 的。所以,浏览器一般不会缓存 POST 请求,也不能把 POST 请求保存为书签。

GET 方法是安全、幂等、可被缓存的。

POST 不安全,不幂等,(大部分实现)不可缓存。

但是实际过程中,开发者不一定会按照 RFC 规范定义的语义来实现 GET 和 POST 方法。比如:

  • 用 GET 方法实现新增或删除数据的请求,这样实现的 GET 方法就不是安全和幂等。
  • 用 POST 方法实现查询数据的请求,这样实现的 POST 方法就是安全和幂等。

并不能说 GET 不如 POST 安全的。

因为 HTTP 传输的内容都是明文的,虽然在浏览器地址拦看不到 POST 提交的 body 数据,但是只要抓个包就都能看到了。

所以,要避免传输过程中数据被窃取,就要使用 HTTPS 协议,这样所有 HTTP 的数据都会被加密传输。

GET 请求可以带 body 吗?

理论上,任何请求都可以带 body 。只是因为 RFC 规范定义的 GET 请求是获取资源,所以根据这个语义不需要用到 body。

另外,URL 中的查询参数也不是 GET 所独有的,POST 请求的 URL 中也可以有参数的。

相关推荐
lazy H11 小时前
【计算机网络】第 15 篇:Java BIO、NIO 与高并发网络通信——从 Socket 理解 I/O 模型
网络·后端·tcp/ip·计算机网络·nio·408
MicrosoftCloud11 小时前
计网 11|NAT 与 IP 地址转换:私有地址、NAPT 端口映射
计算机网络·考研·ip地址·408·nat·napt·私有地址
cyf3115 小时前
第 02 篇:ARP——IP 地址到 MAC 地址的“翻译官“
tcp/ip·计算机网络·wireshark·以太网·vmware·arp·地址解析协议
2501_915106321 天前
抓包抓到乱码或压缩字节怎么解析,TraceEagle五种查看模式和一键解码
网络协议·计算机网络·网络安全·ios·adb·https·udp
流浪0011 天前
计算机网络篇14:传输层——UDP 协议:8 字节定长报头划出报文边界,16 位端口号完成分用
计算机网络·udp·udp包头结构
MicrosoftCloud1 天前
计网 09|TCP 流量控制与拥塞控制:rwnd 滑动窗口 + 慢开始/拥塞避免/快重传快恢复
计算机网络·考研·tcp·流量控制·拥塞避免·拥塞控制·慢开始
CQU_JIAKE1 天前
10.29计算机网络
计算机网络
流浪0011 天前
计算机网络篇13:应用层——HTTP 不记录用户状态,Cookie 在客户端存凭证、Session 在服务端存数据
计算机网络·cookie·session·http协议
Dwzun2 天前
基于SpringBoot3+Vue3的油莎豆种植管理系统
java·前端·vue.js·spring boot·后端·python·计算机网络
lazy H2 天前
【计算机网络】第 13 篇:NAT 和端口映射是什么?为什么本地服务外网访问不了?
java·网络·网络协议·学习·计算机网络·408