在POST请求中发送GET参数的W3C立场是什么?

时间:2014-04-03 22:23:27

标签: php ajax http

标题几乎总结了它。许多Web语言支持在POST请求中发送/接收URL编码的GET参数。根据HTTP标准,这是一种可接受的做法吗?

3 个答案:

答案 0 :(得分:2)

HTTP 而言,没有“GET参数”这样的东西。 URL标识资源,您可以对该资源执行各种操作,包括GET,以及POST数据。从这个角度来看,将资源标识为https://api.example.com/item?id=42并执行POST请求以更新该项目是完全有效的。它可能会在所谓的“RESTful API”中使用,但更常见的是https://api.example.com/item/42等动态URL可能更受欢迎。

URL的查询字符串部分有时被视为“GET参数”的原因是因为它是使用method="get" HTML 中提交表单时生成的部分。表单可以包含已添加查询字符串的action网址,以及method表明应使用POST请求将数据发送到该网址的method。拥有现有查询字符串和"get" $_GET会导致浏览器必须确切地决定如何将两者结合起来,但查询字符串+“帖子”不会产生冲突。

最后,您提交的页面需要实际处理您的数据。许多简单的CGI库会将从查询字符串和POST提交的表单中解析的变量合并在一起。这可能是您想要的,或者您可能希望将它们视为两个单独的“命名空间”。例如,PHP允许两种方法,提供$_POST(查询字符串变量,不管HTTP方法)和$_REQUEST(POST表单数据)以及{{1}},它们结合了两者以可配置的方式。

答案 1 :(得分:1)

根据规范 - 允许:

Request-Line   = Method SP Request-URI SP HTTP-Version CRLF

Request-URI    = "*" | absoluteURI | abs_path | authority

absoluteURI   = scheme ":" ( hier_part | opaque_part )

hier_part     = ( net_path | abs_path ) [ "?" query ]

参考文献:

答案 2 :(得分:0)

不仅允许向POST in url-encoded format发送参数,它还是the default for encoding POST data。引用HTML表格:

  

enctype = content-type [CI]   此属性指定用于将表单提交到服务器的内容类型(当方法的值为" post")时。此属性的默认值为" application / x-www-form-urlencoded"。值" multipart / form-data"应与INPUT元素结合使用,键入=" file"。