9

使用 POST 方法时,是否允许通过 URL(问号后)向网页传递参数?我知道它可以工作(大多数时候,无论如何),因为我公司的 webapp 经常这样做,但我不知道它是否在标准中得到实际支持,或者我是否可以依赖这种行为。我正在考虑实现一个 SOAP 请求处理程序,它在问号后使用一个参数来指示它是一个 SOAP 请求而不是一个普通的 HTTP 请求。这样做的原因是 webapp 是一个 IIS 扩展,所以一切都通过相同的 URL 访问(例如:example.com/myisapi.dll?command),所以要处理 SOAP 请求,我需要指定“命令”参数。SOAP 会有一个通用命令,

基本上,我试图将 Apache Axis2/C 库集成到我的 webapp 中,方法是让 webapp 处理 HTTP 请求,然后将传入的 SOAP XML 传递给 Axis2 以进行处理(如果它是 SOAP 请求)。直观地说,我看不出有任何原因为什么这不起作用,因为您发布的 URL 只是一个任意 URL,就所有各种组件而言......它是赋予特殊含义的服务器问号后面的部分。

感谢您提供的任何帮助/见解。

4

5 回答 5

7

让我们从简单的东西开始。HTTP GET 请求变量来自 URI。URI 是一个被请求的资源,因此任何网络服务器都应该(和 apache 一样)将整个 URI 存储在一些变量中,这些变量可用于在网络服务器中运行的模块或应用服务器组件。

与 http GET 不同的 http POST 是对网络服务器的单独逻辑调用,但它仍然定义了应该处理该帖子的 URI。一个好的网络服务器(apache 就是其中之一)将再次使 URI 可用于在其中运行的任何模块或应用服务器,然后还将另外提供在 POST 标头中发送的变量。

在您的应用程序在 POST 期间从 apache 获得控制权时,您应该可以访问 GET 和 POST 变量,并且能够执行您希望执行的任何控制逻辑,包括使用 SOAP 协议而不是 HTML 进行回复。

于 2008-11-04T19:10:09.370 回答
3

如果您询问是否可以在单个 HTTP 请求中同时通过 GET 和 POST 发送参数,那么答案是“是”。这是可以可靠地使用 AFAIK 的标准功能。

一个这样的示例是分两部分发送身份验证凭据,一个通过 GET,另一个通过 POST,因此任何劫持会话的尝试都需要劫持 GET 和 POST 变量。

因此,在您的情况下,您可以使用 POST 来包含实际的 SOAP 请求,但根据 GET 中传递的参数(或者换句话说,通过 URL)测试它是否是 SOAP 请求。

于 2008-11-04T19:02:55.937 回答
3

我相信没有标准真正定义“HTTP参数”或“请求变量”的概念。RFC 1738 定义了一个 URL 可能有一个“搜索部分”,它是问号后面的子字符串。HTML 在表单提交协议中指定了处理 FORM 元素的浏览器应该如何提交它。在任何一种情况下,服务器端如何处理搜索部分和 HTTP 正文完全取决于服务器 - 丢弃两者将符合这两个规范(但相当无用)。

为了确定您是否可以将搜索部分发布到特定服务,您需要研究该服务的协议规范。如果服务实际上是通过 HTML 表单定义的,那么您不能混合使用 - 如果 FORM 指定 GET,您甚至不能使用 POST(反之亦然)。如果您发布到 Web 服务,您需要查看 Web 服务的 WSDL——这通常要求 POST;SOAP 消息中的所有数据。等等。

特定的 Web 框架可能有“请求变量”的概念——它们是否会从搜索部分和请求正文中提取这些变量,您需要在产品文档中找到。

于 2008-11-04T19:26:03.363 回答
2

我在英国部署了一个带有 3(移动网络运营商)的 Web 应用程序。它最初使用 POST 参数,但 3 网关剥离了它们(以及 X-headers !)。所以要小心...

于 2008-11-04T19:02:59.870 回答
2

允许吗?当然,这是可行的,但我倾向于规范建议双重方法不一定应该发生或得到支持。RFC2616定义了 HTTP/1.1,我认为每个请求只建议一种方法。如果您从客户端考虑典型的 HTTP 事务,您也可以看到限制:

$ telnet localhost 80
POST /page.html?id=5 HTTP/1.1
host: localhost

如您所见,您只能使用一种方法(POST/GET 等),但是由于各种语言的运行方式,它们可能会提取查询字符串,并将其分配给 GET 变量。但最终,这是一个 POST 请求,而不是 GET。

所以基本上,的,这个功能存在,是有意的吗?我会说不

于 2008-11-04T19:06:23.403 回答