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