2008-11-04 81 views
9

當使用POST方法時,是否允許通過URL(問號後)將參數傳遞到網頁?我知道它的工作原理(大多數時候,反正),因爲我公司的webapp經常這樣做,但我不知道它是否真的在標準中被支持,或者我是否可以依賴這種行爲。我正在考慮實現一個SOAP請求處理程序,它在問號後面使用一個參數來指示它是一個SOAP請求,而不是一個正常的HTTP請求。之所以這麼說,webapp是一個IIS擴展,所以所有的東西都通過相同的URL訪問(例如:example.com/myisapi.dll?command),所以爲了處理SOAP請求,我需要指定「命令「參數。對於SOAP,將會有一個通用命令,而不是每個SOAP動作的特定命令 - 這些將在SOAP請求本身中指定。使用HTTP POST時在URL中傳遞參數

基本上,我試圖通過讓webapp處理HTTP請求,然後將傳入的SOAP XML傳遞給Axis2來處理它是否是SOAP請求,從而將Apache Axis2/C庫集成到我的web應用程序中。直覺上,我看不出任何理由爲什麼這不起作用,因爲你發佈的URL只是一個任意的URL,就所有各種組件而言......這是一個服務器,它賦予了特殊的含義問號後的部分。

感謝您提供任何幫助/見解。

回答

6

讓我們從簡單的東西開始。 HTTP GET請求變量來自URI。 URI是請求的資源,所以任何web服務器應該(和apache都)具有存儲在在web服務器內運行的模塊或應用服務器組件可用的一些變量中的整個URI。

與http GET不同的http POST是對web服務器的一個單獨的邏輯調用,但它仍然定義了一個應該處理該帖子的URI。一個好的web服務器(apache是​​一個)將再次使URI可用於其中運行的任何模塊或應用程序服務器,然後將另外提供POST標頭中發送的變量。

在您的應用程序在POST過程中從apache獲取控制權時,您應該可以訪問GET和POST變量,並且可以執行任何您希望的控制邏輯,包括使用SOAP協議而不是HTML進行回覆。

3

如果您詢問是否可以通過GET和POST在單個HTTP請求中發送參數,則答案爲「YES」。這是標準功能,可以可靠地使用AFAIK。

一個這樣的例子是發送身份驗證憑證分爲兩部分,一個通過GET,另一個通過POST發送,因此任何劫持會話的嘗試都需要劫持GET和POST變量。

因此,對於您的情況,您可以使用POST來包含實際的SOAP請求,但是根據在GET中傳遞的參數(或換句話說通過URL)來測試它是否是SOAP請求。

+0

我知道這是一個非常舊的帖子,但有時在身份驗證中,證書不能包含在請求uri [link](https://tools.ietf.org/html/rfc6749#section-2.3.1) 。仍然試圖找出爲什麼... – martin 2016-10-26 08:08:15

2

我在英國部署了一個帶有3(移動網絡運營商)的Web應用程序。它最初使用POST參數,但3網關剝離了它們(還有X-header!)。所以要小心......

2

是否允許?當然,這是可行的,但我傾向於說明雙重方法不一定應該發生或得到支持。 RFC2616定義了HTTP/1.1,我認爲每個請求只能提供一種方法。如果你想從客戶端典型的HTTP事務,你可以看到的限制,以及:

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

,你可以看到,你只能使用一個方法(POST/GET,等...),然而,由於各種語言操作的性質,他們可能會拿起查詢字符串,並將其分配給GET變量。最終雖然,這是一個POST請求,而不是一個GET。

所以基本上,是的這個功能是否存在,是否有意?我會說沒有

+0

您的示例正是我所說的... POST請求,其中URL包含問號後的一些參數。這將取決於服務器來確定它是否有效,對嗎?如果是這樣,我知道它適用於IIS,所以我可以依靠它,對吧? – rmeador 2008-11-04 19:11:58

3

我相信沒有標準實際上定義了「HTTP參數」或「請求變量」的概念。 RFC 1738定義了一個URL可能有一個「搜索部分」,它是問號後面的子字符串。 HTML在表單提交協議中指定處理FORM元素的瀏覽器應如何提交它。無論哪種情況,服務器端如何處理搜索部分和HTTP主體都完全取決於服務器 - 丟棄這兩者都符合這兩個規範(但相當無用)。

爲了確定您是否可以將搜索部分發布到特定服務,您需要研究此服務的協議規範。如果服務實際上是通過HTML表單定義的,那麼您不能使用混合 - 如果FORM指定了GET,則甚至不能使用POST(反之亦然)。如果您發佈到Web服務,您需要查看Web服務的WSDL - 通常會要求POST;所有數據都在SOAP消息中。等

特定的web框架可能有「請求變量」的概念 - 他們是否會從搜索部分和請求體中繪製這些變量,您需要在產品文檔中找到。