在Heroku上作为GET请求收到POST请求

时间:2015-04-04 00:51:15

标签: php http post heroku http-post


为什么我的PHP脚本收到的另一个域上的html表单设置的POST参数不是由Heroku托管的?



上下文:

我有一个简单的html表单,它将一些用户数据发送到我放在Heroku上的PHP脚本。表单位于不同的站点/域上,但据我所知,同源策略不应该破坏请求。事实上,我已经测试过将表单中的请求发送到我的本地计算机,脚本运行正常。

请求从html表单中正常激活,但是当它到达我的PHP脚本时,$ _POST数组为空。检查Heroku日志后,实际上看起来我的脚本会将POST请求作为GET接收。

是否只是我没有做过的配置/路由(我是Heroku的新手)?

我看了一些其他问题/答案,例如this one,但还没有解决方案对我有效。

非常感谢您的帮助



更新1 (4/4/12)

似乎正在按照CoR在他的回答中描述的那样移动POST请求。我无法弄清楚如何阻止这种情况发生。通过研究,看来只有在你没有通过https进行POST请求时才会发生这种移动请求。

现在我已经提交并将表单方法更改为GET,效果很好。当然很高兴知道是否可以在没有设置SSL的情况下在他们的Heroku应用程序上启用POST请求。



更新2 (6/4/12)

我刚刚与Heroku打开了一张票,以确定支持POST请求的唯一方法是启用SSL。我当然在这里询问之前查看了他们的文档以获得答案,但是当CoR已经回答时,没有任何与POST被移动相关的内容。当他们回到我身边时,我会在这里发帖(...)。

2 个答案:

答案 0 :(得分:4)

我花了几天时间将网址重定向咀嚼成可理解的定义。 他们在这里:

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

编辑:

  

似乎只有你自己才会发生POST请求的移动   没有通过https制作它们。

是的,我忘记了人们通常使用重定向来统一尾随斜线,www。并强制执行http或https协议 正如您可能猜到的那样,301或302重定向可能会破坏POST。使用307或写入网站管理员修复它,他可能会或可能不会修复它' 这取决于它是否会破坏其他东西,或者该网站可能会强迫用户始终使用https!在那种情况下,301是理想的解决方案,因为通过不安全的http协议发送POST被自动丢弃/转换为GET请求 如果服务器使用https,例如第一次登录数据是由http发送的,则无关紧要。

  

当然可以知道是否可以启用POST请求   他们的Heroku应用程序没有设置SSL。

虽然技术上可行,但是通过http禁用POST并强制它仅使用https是有效的服务器策略。

答案 1 :(得分:4)

好!终于明白了!在一个超级棒的Heroku团队在10分钟内回到我身边后,结果证明是一个愚蠢的错误。

我的表单是将请求发送给http://MYAPP.heroku.com,而一个人的Heroku应用实际上是http://MYAPP.herokuapp.com。就这样。显然,当我的请求被发送到http://MYAPP.heroku.com时,我的请求就会被移动。

此外,当(正确)使用herokuapp.com域时,您可以通过HTTPS发送请求,但通过HTTP发送POST请求将正常工作。

仅当您拥有自定义域并希望为其启用SSL时,才会SLL Add-On