GET: 获取资源,请求获取一个指定的资源
POST: 传输实体主体,将实体提交到指定的资源 —— 通常导致服务器上的状态变化或副作用
GET
: 用户获取信息,无副作用、幂等的、可缓存
POST
: 修改服务器上的数据, 有副作用、非幂等、不可缓缓存
GET | POST |
---|---|
GET /index.php?name=qiming.c&age=22 HTTP/1.1 | POST /index.php HTTP/1.1 |
name=qiming&age=22 |
当不携带参数的时候,两者的第一行方法名不同而已
GET参数在url后面,POST在request body中。
但是:这个并不是http规范,只是***约定***, 也就是说GET/POST都可以将参数放在url后面和body中,这要看我们的服务器是否支持
本质上,它们是没有区别的, 是基于TCP来进行传输的
。
常见问题
0x00参数位置
: url上的参数写法是固定的么?参数在?后面,用& 分割
解析报文的过程是通过获取TCP数据,用正则等工具从数据中获取Header和Body,从而提取参数。 也就是我们主要自己约定参数能够在服务器解析出来就可以了。
0x01参数长度
:url参数长度限制?
http协议中没有对body和url的长度进行限制,对url限制的大多数是浏览器和服务器的原因。
浏览器:每一种浏览器都会对url的长度有所限制
服务器:url太长,消耗过多资源,为了性能和安全(防止恶意构造长url来攻击)。
0x02可见性/安全性
:POST方法比GET方法安全?
可见性:POST是比GET相对安全的
服务器修改:GET比POST安全,因为GET请求并不会修改服务器状态
传输:它们都不安全,因为http是明文传输 —— https
0x03数据包
:POST会产生两个数据包?
1)GET : 浏览器会把header和data一并发送出去,服务器响应200
2)POST:浏览器先发送header, 服务器响应100 continue,浏览器再发送data,服务器响应200。 常规浏览器操作,firefox只发送一次
```总结```: GET和POST的区别主要是在语义上,一个是获取资源,一个是提交主体,在参数【约定】、缓存、幂等上存在主要差异。本质上http是基于tcp进行传输数据的,所以本质上是没区别的,主要是在语义上不同而产生了两个方法。
参考:
https://blog.fundebug.com/2019/02/22/compare-http-method-get-and-post/)
本文由 mdnice 多平台发布