摘要:对数据长度的限制是的。安全性与相比,的安全性较差,因为所发送的数据是的一部分。和只是协议中两种请求方式,而协议是基于的应用层协议,无论还是,用的都是同一个传输层协议,所以在传输上,没有区别。
1 前言
众所周知,在我们开发项目的过程中,关于POST与GET请求是我们不得不掌握的知识,那么它们两者之间又有什么区别呢?接下来,我们一起从HTTP报文等角度来探讨学习一下关于两者的不同
2 HTTP请求方法HTTP 定义了一组请求方法, 以表明要对给定资源执行的操作。指示针对给定资源要执行的期望动作. 虽然他们也可以是名词, 但这些请求方法有时被称为HTTP动词. 每一个请求方法都实现了不同的语义, 但一些共同的特征由一组共享:: 例如一个请求方法可以是 safe, idempotent, 或 cacheable.
方法名称 | 用法 |
---|---|
GET | GET方法请求一个指定资源的表示形式. 使用GET的请求应该只被用于获取数据. |
HEAD | HEAD方法请求一个与GET请求的响应相同的响应,但没有响应体. |
POST | 用于将实体提交到指定的资源,通常导致在服务器上的状态变化或副作用. |
PUT | PUT方法用请求有效载荷替换目标资源的所有当前表示。 |
DELETE | DELETE方法删除指定的资源。 |
CONNECT | CONNECT方法建立一个到由目标资源标识的服务器的隧道。 |
OPTIONS | OPTIONS方法用于描述目标资源的通信选项。 |
TRACE | TRACE方法沿着到目标资源的路径执行一个消息环回测试。 |
PATCH | PATCH方法用于对资源应用部分修改。 |
W3school:http://www.w3school.com.cn/ta...
项目 | GET | POST |
---|---|---|
后退按钮/刷新 | 无害 | 数据会被重新提交(浏览器应该告知用户数据会被重新提交)。 |
书签 | 可收藏为书签 | 不可收藏为书签 |
缓存 | 能被缓存 | 不能缓存 |
编码类型 | application/x-www-form-urlencoded | application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。 |
历史 | 参数保留在浏览器历史中。 | 参数保留在浏览器历史中。 |
对数据长度的限制 | 是的。当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。 | 无限制 |
对数据类型的限制 | 只允许 ASCII 字符。 | 没有限制。也允许二进制数据。 |
安全性 | 与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。在发送密码或其他敏感信息时绝不要使用 GET ! | POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。 |
可见性 | 数据在 URL 中对所有人都是可见的。 | 数据不会显示在 URL 中。 |
副作用指对服务器上的资源做改变,搜索是无副作用的,注册是副作用的。
幂等指发送 M 和 N 次请求(两者不相同且都大于 1),服务器上资源的状态一致,比如注册 10 个和 11 个帐号是不幂等的,对文章进行更改 10 次和 11 次是幂等的。因为前者是多了一个账号(资源),后者只是更新同一个资源。
在规范的应用场景上说,Get 多用于无副作用,幂等的场景,例如搜索关键字。Post 多用于副作用,不幂等的场景,例如注册。
5 技术上的不同Get 请求能缓存,Post 不能
Post 相对 Get 安全一点点,因为Get 请求都包含在 URL 里(当然你想写到 body 里也是可以的),且会被浏览器保存历史纪录。Post 不会,但是在抓包的情况下都是一样的。
URL有长度限制,会影响 Get 请求,但是这个长度限制是浏览器规定的,不是 RFC 规定的
Post 支持更多的编码类型且不对数据类型限制
6 首部首部分为请求首部和响应首部,并且部分首部两种通用,接下来我们就来学习一部分的常用首部。
通用首部
通用字段 | 作用 |
---|---|
Cache-Control | 控制缓存的行为 |
Connection | 浏览器想要优先使用的连接类型,比如 keep-alive |
Date | 创建报文时间 |
Pragma | 报文指令 |
Via | 代理服务器相关信息 |
Transfer-Encoding | 传输编码方式 |
Upgrade | 要求客户端升级协议 |
Warning | 在内容中可能存在错误 |
请求首部
请求首部 | 作用 |
---|---|
Accept | 能正确接收的媒体类型 |
Accept-Charset | 能正确接收的字符集 |
Accept-Encoding | 能正确接收的编码格式列表 |
Accept-Language | 能正确接收的语言列表 |
Expect | 期待服务端的指定行为 |
From | 请求方邮箱地址 |
Host | 服务器的域名 |
If-Match | 两端资源标记比较 |
If-Modified-Since | 本地资源未修改返回 304(比较时间) |
If-None-Match | 本地资源未修改返回 304(比较标记) |
User-Agent | 客户端信息 |
Max-Forwards | 限制可被代理及网关转发的次数 |
Proxy-Authorization | 向代理服务器发送验证信息 |
Range | 请求某个内容的一部分 |
Referer | 表示浏览器所访问的前一个页面 |
TE | 传输编码方式 |
响应首部
响应首部 | 作用 |
---|---|
Accept-Ranges | 是否支持某些种类的范围 |
Age | 资源在代理缓存中存在的时间 |
ETag | 资源标识 |
Location | 客户端重定向到某个 URL |
Proxy-Authenticate | 向代理服务器发送验证信息 |
Server | 服务器名字 |
WWW-Authenticate | 获取资源需要的验证信息 |
实体首部
实体首部 | 作用 |
---|---|
Allow | 资源的正确请求方式 |
Content-Encoding | 内容的编码格式 |
Content-Language | 内容使用的语言 |
Content-Length | request body 长度 |
Content-Location | 返回数据的备用地址 |
Content-MD5 | Base64加密格式的内容 MD5检验值 |
Content-Range | 内容的位置范围 |
Content-Type | 内容的媒体类型 |
Expires | 内容的过期时间 |
Last_modified | 内容的最后修改时间 |
结论:GET 和 POST 方法没有实质区别,只是报文格式不同。
GET 和 POST 只是 HTTP 协议中两种请求方式,而 HTTP 协议是基于 TCP/IP 的应用层协议,无论 GET 还是 POST,用的都是同一个传输层协议,所以在传输上,没有区别。
报文格式上,不带参数时,最大区别就是第一行方法名不同
POST方法请求报文第一行是这样的POST /products/create HTTP/1.1
GET方法请求报文第一行是这样的 GET /products?name=zs&age=18 HTTP/1.1
是的,不带参数时他们的区别就仅仅是报文的前几个字符不同而已
带参数时报文的区别呢? 在约定中,GET 方法的参数应该放在 url 中,POST 方法参数应该放在 body 中
举个例子,如果参数是 pname="小米9", pprice=3500
GET 请求方法的报文如下:
POST 请求方法的报文如下:
现在我们知道了两种方法本质上是 TCP 连接,没有差别,也就是说,如果我不按规范来也是可以的。我们可以在 URL 上写参数,然后方法使用 POST;也可以在 Body 写参数,然后方法使用 GET。当然,这需要服务端支持。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/105229.html
摘要:与区别本文参考简单介绍和是与服务器交互的方式,说到方式,有。他们的作用分别是对服务器资源的增删改查。区别分析把请求的数据放在上,即协议头上,其格式为以分割和传输数据,参数之间以相连。请求只能进行编码,而支持多种编码方式。 post与get区别 本文参考:https://segmentfault.com/a/1190000009512784 简单介绍 get和post是HTTP与服务器交...
摘要:与区别本文参考简单介绍和是与服务器交互的方式,说到方式,有。他们的作用分别是对服务器资源的增删改查。区别分析把请求的数据放在上,即协议头上,其格式为以分割和传输数据,参数之间以相连。请求只能进行编码,而支持多种编码方式。 post与get区别 本文参考:https://segmentfault.com/a/1190000009512784 简单介绍 get和post是HTTP与服务器交...
摘要:了解历史和是与服务器交互的方式,说到方式,其实总共有四种。区别分析把请求的数据放在上,即协议头上,其格式为以分割和传输数据,参数之间以相连。在浏览器回退时是无害的,会再次提交请求。请求只能进行编码,而支持多种编码方式。 了解历史 get和post是HTTP与服务器交互的方式, 说到方式,其实总共有四种: post、delete、put、get。 他们的作用分别是对服务器资源的增、删、改...
摘要:九安卓中如何取出日志信息把安卓系统日志信息实时导入到本地运行使用某个,实时获取该的日志信息里面的返回信息接口自动化面试题一按你的理解,软件接口是什么答就是指程序中具体负责在不同模块之间传输或接受数据的并做处理的类或者函数。 ...
阅读 1795·2023-04-26 01:55
阅读 1059·2021-09-30 09:47
阅读 1654·2019-08-30 15:54
阅读 711·2019-08-30 15:53
阅读 668·2019-08-30 15:52
阅读 1105·2019-08-30 15:44
阅读 2385·2019-08-30 14:06
阅读 1029·2019-08-29 16:39