GET和POST有什么区别?

简介: GET和POST有什么区别?

前言


在谈到GET和POST之间有什么区别的时候,我们首先应该具体了解一下GET和POST两种方法各自有什么特点。前面两部分先分别谈谈GET和POST方法,最后我们在总结这两种方法的区别。


一、GET方法


1667911793998.jpg

GET 是最常用的 HTTP 方法 . 常用于获取服务器上的某个资源。

1. 我们先谈谈在哪些情况下会构造出 HTTP GET 请求呢?


1.直接在浏览器中输入URL


2.HTML中的link,img,a,script等标签也能够触发HTTP GET请求


3.form表单


4.ajax


5.通过第三方工具,如postman这类工具


6.通过linux下的 wget/curl


7. ......


2. GET请求的特点:


1. 首行的第一部分为GET


2.URL的query string(查询字符串) 可以为空,也可以不为空。


3.header 部分有若干个键值对结构


4.body部分为空(绝大部分),其实也可以不为空。其实通过抓包,会发现其他网站的body基本都为空。


3. URL的长度有限制?这种说法是错的。


可以看到网上有很多帖子都说URL的长度存在上限,这种讲法是错的,在RFC 2616标准中并没有限制URL的长度。只是提到了服务器应该谨慎 URI 长度超过 255 字节,因为一些较旧的

客户端或代理实现可能无法正确支持这些长度。


RFC 2616标准文档:RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1

https://www.rfc-editor.org/rfc/rfc2616

1667911853814.jpg


二、POST方法


1667911903087.jpg

1. 在哪些情况下会构造出 HTTP POST 请求呢?


1.form表单


2.ajax


3.通过第三方工具


4. ......


2. POST请求的特点:


1.首行的第一部分为POST


2.URL的query string 一般为空,但是也完全可以加上。(习惯用法)


3.header 部分有若干个键值对结构


4.body部分为空(绝大部分),其实也可以不为空。


3. body的长度,由请求头中的 Content-Length 字段来表示;body格式由Content-Type字段来表示


POST请求的body 里面的数据格式,可以支持很多格式。格式的类型由请求头中的Content-Type字段来表示。body的长度,由请求头中的 Content-Length 字段来表示。

1667911918348.jpg



三、GET和POST有什么区别?


GET和POST(以及HTTP协议的其他方法之间)之间没有本质区别!!!

但是细节上有细微区别:


1.数据位置:GET习惯把自定义数据放到 query string 中,POST习惯把自定义数据放到 body中


2.语义区别:GET一般用于获取数据,POST一般用于提交数据


3.幂等性:GET请求一般会设计成“幂等”的,POST请求一般不要求设计成幂等的


所谓的幂等,其实是数学上的一种术语,某个请求执行一次和执行多次没有什么区别,如果能做到这一点就称为幂等。比如说转账操作,同一次转账,不管提交几次,始终只会成功一次。因为同一次转账就会被分配一个身份标识,如果服务器对同一次转账收到多次请求,那么就会自动进行去重。因为GET方法一般习惯于是获取数据,所以一般会设计成幂等的


4.可缓存:GET请求一般会被缓存;POST请求一般不能缓存


所谓缓存,也是计算机圈子里面的一个术语,比如,在一般情况下进行一些复杂的计算,得到一些结果。如果这个结果的结算过程代价太大,就可以把这样的结果保存下来,下次直接使用,这样就避免重复计算了。   但是这种也不是绝对的,比如说像搜索广告这种业务场景,虽然也是GET请求,但是计算结果绝对不能缓存,因为搜索广告这种业务是要实时计算的。      


四、打假一些关于GET和POST区别的说法!


1.POST比GET更安全     错!


这样的说法是不科学的. 是否安全取决于前端在传输密码等敏感信息时是否进行加密, 和 GET POST 无关。无论GET是把数据放到query string 还是POST把数据放到body,其实都是不安全。


2.GET传输的数据量小,POST传输的数据量大     错!


这个也是不科学的, 标准没有规定 GET 的 URL 的长度, 也没有规定 POST 的 body 的长度. 传输数据量多少, 完全取决于不同浏览器和不同服务器之间的实现区别。


3.GET只能传输文本数据,POST可以传输二进制数据     错!


这个也是不科学的. GET 的 query string 虽然无法直接传输二进制数据, 但是可以针对二进制数据进行 url encode。


五、HTTP都有哪些常见的方法?以及哪些地方可以带上自定义数据?


常见的方法

PUT 与 POST 相似,只是具有幂等特性,一般用于更新

DELETE 删除服务器指定资源

OPTIONS 返回服务器所支持的请求方法

HEAD 类似于 GET ,只不过响应体不返回,只返回响应头

TRACE 回显服务器端收到的请求,测试的时候会用到这个

CONNECT 预留,暂无使用

可以带上自定义数据的地方:

a) URL path

b)   URL query string

c)   header(可以添加自定义的键值对)

d)   body


相关文章
|
24天前
|
网络协议 数据安全/隐私保护
get和post的区别
get和post的区别
19 0
|
7天前
|
Web App开发 缓存 网络协议
get和post的区别!
get和post的区别!
|
8月前
|
缓存
get和post的区别
`GET` 和 `POST` 是 HTTP 请求方法,常用于客户端(如浏览器)与服务器之间的通信。
|
4月前
|
缓存 安全 数据安全/隐私保护
GET和POST有什么区别
GET和POST有什么区别
|
10月前
|
网络协议 安全 数据安全/隐私保护
GET与POST的区别
GET与POST的区别
97 0
|
10月前
|
Web App开发 网络协议 安全
GET和POST两种基本请求方法的区别
GET和POST两种基本请求方法的区别
|
网络协议 安全
GET 和 POST 的区别
GET 和 POST 的区别
104 0
NSMutableURLRequest实现Post访问
NSMutableURLRequest实现Post访问
61 0
|
网络协议
get和post区别是什么?
get和post区别是什么?
149 0
|
缓存 安全 前端开发
GET和POST的真正区别?
GET和POST的真正区别?
107 0