我知道http
动词的使用是基于标准规范的。但我的问题是,如果我使用";CCD_ 2";对于更新操作和编写代码逻辑进行更新,在任何情况下都会产生问题吗?除了标准之外,还有什么理由只为特定目的使用这些动词呢?
如果我使用"获取";对于更新操作和编写代码逻辑进行更新,在任何情况下都会产生问题吗?
是。
一个简单的例子——假设客户端和服务器之间的网络不可靠;具体地说,在一段时间内,HTTP响应正在丢失。通用组件(如web代理(可能会超时,然后,注意到请求的方法令牌是GET,请第二次/第三次/第四次重新发送请求,服务器会对每个GET请求执行更新。
让我们进一步假设,这些多次更新操作会导致不希望的结果;我们该在哪里指责?
第二个例子:你向某人发送一份更新操作的链接副本,这样他们就可以在适当的时候向你发送请求。但是,假设您在电子邮件中向他们发送该链接,并且电子邮件客户端识别出uri并(作为性能优化(预取链接,从而过早触发更新操作。我们应该把责任归咎于哪里?
HTTP并不试图要求GET的结果是安全的。它所做的是要求操作的语义是安全的,因此,如果结果发生任何导致财产损失的事情,这是实现的错误,而不是接口或该接口的用户的错误——Fielding,2002
在这些和其他示例中,指责被正确地附加到服务器上,因为GET具有标准化的含义,其中包括请求的语义是安全的约束。
这并不是说在处理GET请求时不会产生副作用"命中计数器";几乎和网络本身一样古老。您在执行过程中有很大的自由度;只要你尊重统一的界面,就不会有太多麻烦。
经验报告:我们的一个内部工具使用GET请求来触发调度;在我们精心控制的上下文中(这是而不是网络规模(,我们侥幸逃脱了它,并且已经度过了很长一段时间。
借用你的语言,肯定有一些场景会给我们带来问题;但考虑到我们的控制,我们设法避开了它们。
不过,如果请求开始来自我们精心控制的环境之外,我不希望我们有机会。
我认为这是一个不错的问题。你在问一个假设:除了我们同意使用GET
进行获取之外,做正确的其他还有什么价值吗?例如:除了"语义上很好"这一事实之外,还有价值吗。HTML中类似的问题可能是:;用<div>
和onclick
代替<button>
可以吗?(答案是否定的(。
当然有。客户端、服务器和中间用户都会根据使用的方法来改变他们的行为。即使您的服务器可以处理GET
进行更新,并且您构建了一个使用它的客户端,您的浏览器可能仍然会感到困惑。
如果你对这个话题感兴趣,不要在论坛上提问;阅读规范。HTTP规范告诉客户端、服务器和代理在遇到某些方法、状态和头时应该做什么。
从RFC7231 开始