2015-04-04 148 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