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


相关文章
|
缓存 前端开发 UED
前端常见的HTTP状态码
【4月更文挑战第6天】HTTP状态码是服务器对请求的响应状态,分为1xx(处理中)、2xx(成功)、3xx(重定向)、4xx(客户端错误)和5xx(服务器错误)五大类。常见的如200(成功)、404(未找到)、500(服务器内部错误)。理解这些状态码有助于优化前端应用的请求处理和调试。
562 1
|
Kubernetes 应用服务中间件 nginx
在K8S里使用filebeat作为sidecar收集nginx日志
通过sidecar方法进行接入,与提供日志的容器部署在同一个pod里,主要是配置statefulset里的containers和configmap里的filebeat.yaml 1.把nginx的日志文件挂载在access_log这个volume里,同时在filebeat这个pod里也挂载access_log这个volume 2.filebeat通过subpath的方法挂载单独一个filebeat.yml到/usr/share/filebeat/filebeat.yml。注意,如果不用subpath挂载单个文件的话,是会覆盖掉/usr/share/filebeat/目录的 3.configm
3000 0
在K8S里使用filebeat作为sidecar收集nginx日志
|
7月前
|
存储 缓存 安全
理解GET和POST区别的全面指南
![理解GET和POST区别的全面指南](https://assets.echoapi.com/upload/user/222825349921521664/log/fb5d7a29-f85c-46e0-835c-a8fdc925ec73.webp) 本文详细解析了REST API中GET和POST方法的区别。GET用于从服务器获取数据,参数在URL中传递,适合查询;POST用于发送数据以创建或更新资源,数据放在请求体中,适合提交表单。两者在安全性、缓存、幂等性等方面有显著差异,理解这些区别有助于设计高效且安全的API。
|
SQL 前端开发 Linux
如何定位前后端的BUG
如何定位前后端的BUG
460 2
|
存储 缓存 调度
虚拟存储
虚拟存储
664 0
|
异构计算
无影云电脑产品使用之购买什么配置可以玩黑神话悟空游戏?
本文汇总了关于阿里云无影云电脑的常见问题及解答,包括所需配置以运行《黑神话:悟空》游戏、不同版本显卡型号、电竞模式库存情况及如何查看云电脑的使用情况等。提供了多个详细解答链接,帮助用户更好地了解和使用无影云电脑。
|
11月前
|
机器学习/深度学习 自然语言处理 网络架构
深度学习中的正则化技术:从理论到实践
在深度学习的海洋中,正则化技术如同灯塔指引着模型训练的方向。本文将深入探讨正则化的核心概念、常见类型及其在防止过拟合中的应用。通过实例分析,我们将展示如何在实践中运用这些技术以提升模型的泛化能力。
|
关系型数据库 MySQL 测试技术
如何进行数据库的升级?
【7月更文挑战第21天】如何进行数据库的升级?
842 1
|
关系型数据库 MySQL 数据库
深入探讨MySQL分表策略与实践
深入探讨MySQL分表策略与实践
704 0
|
存储 监控 Java
JVM 元空间(Metaspace)
JVM 元空间(Metaspace)
1316 5