GET和POST有什么区别?

系列文章目录

Fiddler抓包:下载、安装及使用_crazy_xieyi的博客-CSDN博客

HTTP协议格式、URL格式及URL encode_crazy_xieyi的博客-CSDN博客


文章目录

9b3da124a4254011bcb1eeed1be6eabf.png

 

  • 前言
  • 一、GET方法
  •      1.在哪些情况下会构造出 HTTP GET 请求呢?
  •      2.GET请求的特点
  •      3.URL的长度有限制?这种说法是错的
  • 二、POST方法
  •      1.在哪些情况下会构造出 HTTP POST 请求呢?
  •      2.POST请求的特点
  •      3.body的长度,由请求头中的 Content-Length 字段来表示;body格式由Content-Type字段来表示
  • 三、GET和POST有什么区别?
  • 四、打假一些关于GET和POST区别的说法!
  •       1.POST比GET更安全     错!
  •       2.GET传输的数据量小,POST传输的数据量大     错!
  •       3.GET只能传输文本数据,POST可以传输二进制数据     错!
  • 五、HTTP都有哪些常见的方法?以及哪些地方可以带上自定义数据?

前言

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


一、GET方法

06f0443e5e2e459785fc9d20aeba0054.png

 

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.1https://www.rfc-editor.org/rfc/rfc2616

95393fce433f474eb2ac4d37f27f6a26.png

 

二、POST方法

270ec67accc04fd28259eaf7f17521ec.png

 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 字段来表示。

8b159d0e1bdc4d6d863b771eebd56c41.png

 三、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

 


 

 

  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 20
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

crazy_xieyi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值