我有一些服务器到服务器的通信驱动一个错误的PHP程序。
我需要了解可能导致 服务器 触发调用的行为与 浏览器 触发的行为不同通过运行PHP程序完成,URL调用以及如何使服务器触发的调用与浏览器的行为相同。
我正在使用第三方远程Web应用程序,需要花费很长时间才能进行一些计算。当我启动这个Web应用程序(使用REST调用)时,我传递了一个回调PHP程序的URL,它应该触发它在完成时通知我。我的触发回调程序应检索计算结果(使用REST调用),然后更新我自己服务器上的文件。
手动,这很好用。但作为一个自动回叫,它没有。
从apache访问日志中我可以看到远程服务器按预期调用了我的URL,但是我的Apache访问日志显示服务器响应状态为301而我的PHP程序没有运行:
54.235.170.186 - - [10/May/2015:22:20:06 -0700] "GET /apps/_recap/ReCapRetrieveOBJ-markers_v2.php?scanID=slm-mkr-6-2B-cube201505102013 HTTP/1.1" 301 610 "-" "ServerUserAgent"
现在,如果我使用相同的URL和查询字符串并将其输入浏览器,我的PHP代码就能完美运行,我在访问日志中看到这两条记录(第二行是服务器响应状态200) :
173.164.203.50 - - [10/May/2015:23:35:03 -0700] "GET /apps/_recap/ReCapRetrieveOBJ-markers_v2.php?scanID=slm-mkr-6-2B-cube201505102013 HTTP/1.1" 301 635 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36"
173.164.203.50 - - [10/May/2015:23:35:03 -0700] "GET /apps/_recap/ReCapRetrieveOBJ-markers_v2.php?scanID=slm-mkr-6-2B-cube201505102013 HTTP/1.1" 200 3401 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36"
以下是我的问题:
我的PHP代码中的哪种情况会导致301?
如何让触发的回调(使用ServerUserAgent)以与浏览器触发的URL相同的方式响应?
答案 0 :(得分:1)
Dreamhost VPS服务器上发生此问题。我们的旧服务器运行Debian,发生此问题的新服务器正在运行Ubuntu。显然,这两个操作系统之间的Web服务器设置是不同的,因此以前在不再工作之前工作正常的代码。
从上面的评论中,我认为我的代码中有一些东西导致了重定向,但现在我找到了问题的根源,我发现它根本与我的代码无关。相反,它与Dreamhost服务器可以配置为支持对domain.com和www.domain.com的调用这一事实有关,它通过将domain.com重定向到www.domain.com子域来实现。
添加www。我的回调的URL前缀,从而给出了规范的URL,我的问题被消除了(服务器发起的呼叫没有重定向,也没有浏览器发起的呼叫)。
答案 1 :(得分:0)
进行API调用以遵循重定向。例如,如果使用PHP和cURL。
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
或者,清理您的Web服务器配置以不设置重定向。