众所周知,文件上传最常使用POST
方法。那么,为什么不能GET
方法可以用来代替文件上传吗?是否有针对 HTTP 的具体禁止GET
上传?
GET 请求可能包含实体主体
RFC 2616 不阻止实体正文作为 GET 请求的一部分。这经常被误解,因为 PHP 的特性把水搅浑了。名字不好的 $_GET
超全球。$_GET
技术上与 HTTP 无关GET
请求方法——它只不过是来自请求 URI 查询字符串的 url 编码参数的键值列表。您可以访问$_GET
即使请求是通过 POST/PUT/etc 发出的。很奇怪,对吧?这不是一个很好的抽象,不是吗?
为什么 GET 实体主体是一个坏主意
那么什么是关于 GET 方法的规范说明 http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.1.1... 出色地:
特别是,已经建立了这样的约定:GET 和 HEAD 方法不应该具有执行检索以外的操作的意义。这些方法应该被认为是“安全的”。
因此,对于 GET 来说,重要的是确保任何 GET 请求都是安全的。尽管如此,禁令还是
仅有的“不应该”...从技术上讲,HTTP 仍然允许 GET 请求导致不符合的操作
严格基于“检索”。
当然,从语义的角度来看,使用名为GET
执行除
“获取”资源也没有多大意义。
当 GET 实体主体完全错误时
关于幂等性,规范说:
方法还可以具有“幂等性”属性(除了错误或过期问题)
N > 0 个相同请求的副作用与单个请求的副作用相同。方法 GET、
HEAD、PUT 和 DELETE 共享此属性。
这意味着 GET 方法must not对于多个请求有不同的副作用
相同的资源。因此,无论实体主体作为 GET 请求的一部分出现如何,副作用
必须始终相同。通俗地说,这意味着如果您发送带有实体主体的 GET
100次服务器无法创建100个新资源。无论发送一次还是 100 次请求都必须
得到相同的结果。这严重限制了 GET 方法发送实体主体的有用性。
如有疑问,在评估功效时始终回溯到安全性/幂等测试
方法及其产生的副作用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)