使用GET方法上传文件

Pra*_*uja 31 upload post get file-upload

众所周知,文件上传通常是使用POST方法完成的.那么,为什么不能将该GET方法用于文件上传呢?是否有针对HTTP GET上传的特定禁止?

rdl*_*rey 36

GET请求可能包含实体主体

RFC 2616不会阻止实体主体作为GET请求的一部分.这常常被误解,因为PHP因其名称不佳的 $_GET超全球而混淆了水域.$_GET从技术上讲,它与HTTP GET请求方法无关 - 它只不过是来自请求URI查询字符串的url编码参数的键值列表.$_GET即使请求是通过POST/PUT /等进行的,您也可以访问该阵列.很奇怪,对吗?不是很好的抽象,是吗?

为什么GET实体机构是一个坏主意

那么规范对GET方法的说法是什么......好吧:

特别是,已经建立了这样的惯例:GET和HEAD方法不应该具有采取除检索之外的动作的重要性.这些方法应该被认为是"安全的".

因此,GET的重要一点是确保任何GET请求都是安全的.尽管如此,禁止只是"不应该" ......技术上,HTTP仍然允许GET请求导致不严格基于"检索"的动作.

当然,从语义角度来看,使用一个名为GET执行"获取"资源以外的动作的方法也没有多大意义.

当GET实体主体出错时

关于幂等性,规范说:

方法也可以具有"幂等"的属性(除了错误或到期问题)N> 0个相同请求的副作用与单个请求相同.方法GET,HEAD,PUT和DELETE共享此属性.

这意味着对于同一资源的多个请求,GET方法不得具有不同的副作用.因此,无论作为GET请求的一部分存在的实体主体,副作用必须始终相同.在外行的术语中,这意味着如果您向实体主体发送100次GET,则服务器无法创建100个新资源.无论是发送一次还是100次请求都必须具有相同的结果.这严重限制了GET方法用于发送实体主体的有用性.

如有疑问,在评估方法的功效及其产生的副作用时,请始终回到安全性/幂等性测试.

  • 你好。如果请求的最终目的是检索信息。例如,如果我有一个端点接受文件并返回文件中的第一行作为 JSON 响应。那为什么我不应该把它变成 GET 呢? (3认同)