【发布时间】:2010-11-18 06:08:01
【问题描述】:
可能的重复:
How should I choose between GET and POST methods in HTML forms?
When do you use POST and when do you use GET?
显然,您应该这样做。但是除了为了满足HTTP协议,还有什么理由这样做呢?减少开销?某种安全问题?
【问题讨论】:
-
有人可以链接到声称的副本吗?
可能的重复:
How should I choose between GET and POST methods in HTML forms?
When do you use POST and when do you use GET?
显然,您应该这样做。但是除了为了满足HTTP协议,还有什么理由这样做呢?减少开销?某种安全问题?
【问题讨论】:
因为 GET 不能根据定义改变服务器的状态。
9.1.1 安全方法
实施者应该意识到 软件代表用户在他们的 互联网上的互动,以及 应小心让用户 注意他们可能采取的任何行动 采取可能有意想不到的 对自己或他人的意义。
特别是,该公约已 确定 GET 和 HEAD 方法不应该有 采取其他行动的意义 比检索。这些方法应该 被认为是“安全的”。这允许用户 代表其他方法的代理, 例如 POST、PUT 和 DELETE,在一个 特殊的方式,使用户成为 意识到一个可能的事实 正在请求不安全的操作。
如果您使用 GET 来更改服务器的状态,那么搜索引擎机器人或网络浏览器中的某些链接预取扩展程序可能会对您的网站和(例如)delete all user data just by following links to your site 造成严重破坏。
【讨论】:
W3C 有一篇关于此的好论文:URIs, Addressability, and the use of HTTP GET and POST。
1.3 选择 HTTP GET 或 POST 的快速清单
- 在以下情况下使用 GET:
- 交互更像是一个问题(即,它是一种安全操作,例如查询、读取操作或查找)。
- 在以下情况下使用 POST:
- 交互更像是一个订单,或者
- 交互以用户感知的方式更改资源的状态(例如,订阅服务),或
- 用户应对交互结果负责
【讨论】:
因为,如果你使用 GET 来改变状态,Google can delete your stuff。
【讨论】:
如果您接受 GET 来执行写入操作,那么恶意黑客可能会在某处注入链接以执行未经授权的操作。您的用户单击一个链接 - 并且从数据库中删除了某些内容。或者,如果用户仍然登录在线银行,可能会从用户的帐户中转出一些金额。
http://superbank.com/TransferMoney?amount=1000&recipient=2342524
发送包含引用此链接的嵌入图像的恶意电子邮件,文档一打开,幕后就发生了一些有趣的事情。
【讨论】:
GET 受限于浏览器/服务器可以处理的 URL 长度。这过去只有 256 个字符。
【讨论】:
至少在一种情况下,您希望 GET 更改服务器上的数据。也就是 GET 返回数据的时候,你需要记录下给用户的是哪些数据,什么时候给的。
如果您使用复杂的数据类型,那么它必须在 POST 中,而不能在 GET 中。例如,只有在合约使用简单数据类型时才能在浏览器中测试 WCF Web 服务。
在预期的地方使用 GET 和 POST 有助于让您的程序易于理解。
【讨论】:
当您使用 POST 时,您可以在网络浏览器的地址栏中看到正在“发布”的信息。当您使用 GET 方法时,[显然] 不是这种情况。
这篇文章在某处http://www.w3schools.com/ 找到它所在的确切页面后,我将重新发布。 :-)
【讨论】: