2015-04-04 127 views
1


爲什麼在Heroku託管的PHP腳本收到的另一個域上的html表單正在設置POST參數?在Heroku上收到POST請求作爲GET請求



語境:

我有它的一些用戶數據發送到PHP腳本,我已經把在Heroku上一個簡單的HTML表單。該表單位於不同的網站/域,但據我瞭解,相同來源策略不應違反請求。事實上,我測試過從表單發送請求到我的本地機器,腳本工作正常。

請求大火從HTML表單完全正常,但通過它進入我的PHP腳本的時候,$ _POST數組爲空。在檢查Heroku日誌之後,它實際上看起來像通過我的腳本將POST請求作爲GET接收。

是否有一個簡單的配置/路由我沒有做過的事(我是新來的Heroku)?

我接過一看就像this one一對夫婦的其他問題/答案,但沒有解決辦法還沒有爲我工作。

提前許多感謝幫助



更新1(12年4月4日)

看來,作爲中COR描述了正在移動的POST請求他的回答。我無法弄清楚如何阻止這種情況發生。從研究來看,似乎只有在您不通過https創建POST請求時纔會發生POST請求。

現在我已經提交,並改變了形式方法來獲得,它工作正常。當然很高興知道是否可以在不設置SSL的情況下在他們的Heroku應用上啓用POST請求。



更新2(6/4/12)

我剛剛開了Heroku上與一票找出來支持POST請求的唯一途徑是,如果你啓用SSL。我在這裏問了一些問題之前,當然會在他們的文檔中查看答案,但是沒有提到與CoR回答的有關POST的問題。當他們回到我身邊時,我會在這裏發佈(...)回答。

+0

如果請求被服務器重定向(3xx響應代碼),它可以更改爲GET。 – Danijel 2015-04-04 01:17:17

+0

我該如何阻止? – kylejm 2015-04-04 08:30:45

+0

更新了我的回答:) – CoR 2015-04-05 20:06:19

回答

4

好吧!終於明白了!在超級棒的Heroku團隊中,有一個在10分鐘後回到我身邊,結果證明這是一個愚蠢的錯誤。

我的表單發送請求到http://MYAPP.heroku.com,而Heroku的應用實際上是http://MYAPP.herokuapp.com。就這樣。所以很明顯,當我的請求被髮送到http://MYAPP.heroku.com時,我的請求被移走了。

更重要的是,何時(正確)使用herokuapp.com域,您可以通過HTTPS發送請求,但通過HTTP發送POST請求將正常工作。

SLL Add-On只有在您有自定義域並希望爲其啓用SSL時才適用。

4

我花了幾天嚼URL重定向到理解的定義。 在這裏,他們是:

301 – Permanently moved: breaks POST 
302 – Temporarily moved: legacy, will change POST to GET 
303 - Temporarily moved: WILL change POST to GET 
307 - Temporarily moved: NOT change POST to GET 

編輯:

看來,如果你不 通過HTTPS讓他們這個感人的POST請求,只是偶然。

是的,我忘記了人們通常使用重定向來統一尾部斜線www。並強制執行http或https協議。
正如你可能猜測301或302重定向可以打破POST。通過使用307或寫入網站管理員修復它,他可能會或可能不會'修復它'。
這取決於它是否會打破別的東西,或者該網站希望強制用戶始終使用https!在這種情況下,301是理想的解決方案,因爲通過不安全的http協議發送POST會自動丟棄/轉換爲GET請求。
如果服務器正在使用https,例如首次登錄數據由http發送,則無關緊要。

當然很高興知道是否可以在沒有設置SSL的情況下在他們的Heroku應用上啓用 的POST請求。

儘管技術上可行,但通過http禁用POST並強制它僅使用https是有效的服務器策略。

+0

太棒了,謝謝。我如何解決它?當然你可以獲得POST請求到Heroku應用程序? – kylejm 2015-04-04 09:15:49

+0

嘗試瞭解您的請求被重定向的方式和原因。人們通常會創建自動重定向來添加/刪除www或從url中拖尾。 301和302將始終轉換帖子以獲取標題。 307將保留帖子。 – CoR 2015-04-04 09:22:57