You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
由于数据以不同的方式编码,因此需要不同的解码机制。因此,一般来说,更改提交方法,可能需要更改处理提交的脚本。例如当使用 CGI 接口时,脚本会在使用 GET 时,在环境变量(QUERYSTRING)中接收数据,但是当使用POST时,表单数据在标准输入流(stdin)中传递,并且要读取的字节数由Content-length头指定。
3. 推荐使用
在提交 "幂等" 表单时,建议使用 GET --仅涉及数据库查询的表单。另外一个观点是,几个 幂等的查询和单个查询有着相同的效果。如果数据库更新,或者其他操作例如触发了电子邮件等,建议使用 POST
原文翻译于 GET vs. POST
HTTP
POST
请求在消息正文中将客户端(浏览器)中的附加数据提供给的服务器。相反,GET
请求在URL
中包含所有的请求数据。HTML中的表单均可以使用两者,只要在<form>
标签里指明method="POST"
或者method="GET" (默认值)
即可。指定的方法决定了表单数据如何提交给服务器。当请求方法是 GET 时,所有表单数据将被编码到 URL 中,作为查询字符串参数附加到action
的 URL`中。当使用 POST 时,表单数据出现在 HTTP 请求的消息体中。下面是两个方法的比较:
内容上比较
1. 在表单提交中的不同
基本的不同是 它们对应于不同的HTTP请求,如HTTP规范中所定义一样。两者在提交的过程中都以相同的方式开始---- 一个 表单数据集由浏览器构建,然后以 enctype 属性指定的编码方式进行编码。对于
METHOD="POST"
,enctype 属性可以是multipart/form-data
或者application/x-www-form-urlencoded
。 而对于METHOD ="GET"
,只允许application/x-www-form-urlencoded
。然后将该表单数据集发送到服务器。对于使用 GET 的提交,浏览器通过获取 action 属性的值来构造一个 URL ,添加一个 ?在 URL 后面,然后添加 表单数据集在问号后面。接着,浏览器处理这个 URL,就好像跟随一个链接(或者就像用户自己直接输入了 URL一样)。浏览器将 URL 划分为不同部分,并识别主机,然后向该主机发送一个 GET 请求,其余的 URL 作为参数。注意:此过程意味着表单数据仅限于 ASCII 代码。
POST 请求将使用 action属性值和根据 enctype 属性指定的内容类型来创建发送消息以发送 POST 请求
来个视频解解闷Differences Between Get and Post - Web Development
2. 服务器端处理的差异
由于数据以不同的方式编码,因此需要不同的解码机制。因此,一般来说,更改提交方法,可能需要更改处理提交的脚本。例如当使用 CGI 接口时,脚本会在使用 GET 时,在环境变量(QUERYSTRING)中接收数据,但是当使用POST时,表单数据在标准输入流(stdin)中传递,并且要读取的字节数由Content-length头指定。
3. 推荐使用
在提交 "幂等" 表单时,建议使用 GET --仅涉及数据库查询的表单。另外一个观点是,几个 幂等的查询和单个查询有着相同的效果。如果数据库更新,或者其他操作例如触发了电子邮件等,建议使用 POST
来自 Dropbox developer blog:
GET 经常会缓存,而 POST 几乎不。对于查询系统来说,这可能产生相当大的效率影响,特别是如果查询字符串很简单,因为缓存可能会提供最常见的查询
在某些情况下,即使使用幂等查询也建议使用 POST:
4. HTTPS呢?
POST 提供更高的安全性吗?这是一个有趣的问题。我们来看看一个 GET 请求
设想你的网络连接被监视,那么请求的哪些信息将提供给窥探者呢?如果使用 POST ,并且用户和密码数据包含在 POST 的变量中,那么在HTTPS连接的情况下会更安全吗?
答案是 no ,如果你使用 GET 请求,只有以下信息才能被攻击者知道:
URL的路径部分 -- 即请求的实际页面以及查询字符串 --- 是被保护的(加密的),而它们是 在线的,即在到达目的服务器的途中传输。POST 请求的情况也是完全一样
当然,web服务器往往会在访问日志中以纯文本的格式记录整个 URL;所以通过 GET 请求发送敏感信息也不是一个好主意。无论 HTTP 或 HTTPS 都适用
引用
The text was updated successfully, but these errors were encountered: