使用nginx / php-fpm时,浏览器有时会忽略位置标头.为什么?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用nginx / php-fpm时,浏览器有时会忽略位置标头.为什么?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1354字,纯文字阅读大概需要2分钟。
内容图文
![使用nginx / php-fpm时,浏览器有时会忽略位置标头.为什么?](/upload/InfoBanner/zyjiaocheng/950/569e88dd01a8406d919eb5a0d3a9cb25.jpg)
我正在将一个可正常运行的apache / mod-php网站移至nginx / php-fpm.
在Apache / mod-php下,我可以使用header(“ Location:$url”);将浏览器重定向到其他页面,例如在尝试登录后.切换到nginx / php-fpm后,浏览器将不再在某些页面上遵循该重定向.我用Firebug和Httpfox确认响应中实际上已收到标头“ Location:[url]”.此行为也出现在Chrome中(未经IE测试).
因此,我做了一些实验,阅读了一些有关http的内容,并使它起作用,但是我不确定它为什么起作用(或为什么不起作用).
我想出的解决方案是在“ Location:[url]”标题之前发送“ Status:303”标题.这适用于Chrome和Firefox,当我发送“状态:200”或忽略“状态”标头时,它们都忽略了“位置”标头,但是当我将其更改为“状态303”时,便进行了重定向.它与Apache下的Status 200一起使用.
使用Location标头是否需要Status标头?还是Apache正在做其他事情来使其工作?除了标题(“ Status:303”)之外,我没有更改任何涉及的php代码;使其工作的线.这里必须要有其他工作,但是我不知道这可能是什么.
有任何想法吗?
解决方法:
Location标头本身不会触发浏览器重定向.重定向实际上是由3xx系列中的HTTP响应代码触发的. w3c has explanations for all http response codes.
Apache会自动在响应中看到Location标头,并且如果您之前未设置自己的响应代码,则会将响应代码强制为300系列. Nginx不会这样做-它期望您自己设置适当的响应代码.
您可以强制php发送修改后的HTTP响应代码,如下所示:
<?php
header("HTTP/1.0 301 Moved Permanently");
?>
…然后,当然,您需要确保在发送上面显示的HTTP / 1.0 …行之后仍然发送了Location标头.
内容总结
以上是互联网集市为您收集整理的使用nginx / php-fpm时,浏览器有时会忽略位置标头.为什么?全部内容,希望文章能够帮你解决使用nginx / php-fpm时,浏览器有时会忽略位置标头.为什么?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。