使用HTTP POST时,在URL中传递参数

在使用POST方法时,是否允许通过URL(在问号之后)将参数传递到网页? 我知道它的工作原理(大多数情况下,反正),因为我公司的webapp经常这样做,但我不知道标准是否真的支持它,或者我是否可以依赖这种行为。 我正在考虑实现一个SOAP请求处理程序,该问题处理程序在问号后面使用参数来指示它是SOAP请求而不是普通的HTTP请求。 之所以这么说,webapp是一个IIS扩展,所以所有东西都通过相同的URL访问(例如:example.com/myisapi.dll?command),所以为了处理SOAP请求,我需要指定“命令“参数。 对于SOAP,将会有一个通用命令,而不是每个SOAP动作的特定命令 - 这些将在SOAP请求本身中指定。

基本上,我试图通过让webapp处理HTTP请求,然后将传入的SOAP XML传递给Axis2来处理它是否为SOAP请求,从而将Apache Axis2 / C库集成到我的web应用程序中。 直觉上,我看不出任何理由为什么这不起作用,因为你发布的URL只是一个任意的URL,就所有各种组件而言......这是一个服务器,它赋予了特殊的含义问号后的部分。

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


让我们从简单的东西开始。 HTTP GET请求变量来自URI。 URI是一个被请求的资源,所以任何web服务器应该(和apache一样)将整个URI存储在一些变量中,以供在web服务器内运行的模块或appserver组件使用。

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

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


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

一个这样的例子是发送认证凭证两部分,一个通过GET和另一个通过POST,以便任何劫持会话的企图都需要劫持GET和POST变量。

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


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

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

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

链接地址: http://www.djcxy.com/p/7037.html

上一篇: Passing params in the URL when using HTTP POST

下一篇: How to make an HTTP POST request in node.js?