2012-03-08 59 views
3

我正在運行一個網站,客戶可以提交表單。我在服務器端使用PHP並使用POST方法(大表單)。問題是,有時候,請求會作爲GET請求發送到我的Web服務器,並且沒有發佈信息。只有在從給定的客戶位置提交表單並且問題是間歇性的(大部分時間工作)時,纔會出現此問題。PHP:由於身份驗證服務器,POST數據丟失

使用小提琴手,我想我確定發生了什麼,但不能想到一個解決方法。張貼在計算器上看看是否有人有想法。

基本上,序列如下:

1- POST請求是在所有適當的數據發送。

2 POST請求似乎被認證代理服務器攔截。

3- Proxy Server向POST請求發送HTTP 302響應並重定向到另一個內部地址進行身份驗證。

4-驗證交易發生(二GET請求,與401響應)

5-代理服務器回答一個302重定向到最終認證請求,該請求重定向到原始請求。

6-但瀏覽器將原始請求作爲GET請求發送,而沒有發佈信息而不是發送POST請求,因爲它原來是發送的。

最終結果是用戶的空白頁面,表單數據丟失。

難道是因爲即使原始請求是一個POST,它確實在URL中包含一些參數(也許browswer認爲它是GET,因爲這些?)?

這是正常行爲嗎?我讀過這是根據標準(瀏覽器總是用GET回答302),但我不相信這是這種情況,因爲在這些情況下沒有針對POST請求的解決方案?

必須有一些方法來解決這個問題,導致非常不好的用戶體驗。讓我知道你的想法。

回答

0

我遇到過這樣的情況,以及使用自定義的ErrorDocument專門爲我的404頁面。顯然有404頁,我假設可能是401?沒有發佈數據發送給他們。我最終做的不是這個,而是以同樣的方式進入404頁面,但我使用重寫規則而不是errordocument。

這裏的重寫規則做同樣的事情的ErrorDocument 404

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteCond %{REQUEST_FILENAME}index.php !-f 
RewriteRule ^(.*?)$ /error404.php [L] 

作爲一個完全邊想,或許,如果你不能避開知道它是否將是文章或讓你可以使用$ _REQUEST代替並且它將能夠處理請求,無論它來自哪個方向。

+0

感謝您回答伊恩。問題是我無法控制攔截髮布請求的身份驗證代理服務器,並返回302以啓動其身份驗證序列。所以我看着兩種方法。 1-尋找一種方法來避免驗證序列或者2-恢復POST數據(仍然在瀏覽器歷史記錄中)。但目前爲止沒有成功。 – PCJISM 2012-03-09 12:41:12