PHP 中使用 header("location:http://www.example.com/XXXX")为什么有时候返回 302 有时候返回 200 呢?

2021-01-15 14:20:18 +08:00
 7DLNU56W

如题,php 中使用 header("location:http://www.example.com/XXXX"),有时候返回 302,页面直接转跳到对应路径中( URL 也随之变化为目标路径),但有时候就只返回 200,内容时目标地址的内容,但 URL 还是原地址。

到底是什么原因导致这种差异,观察很多次相关代码,也没找到是因为什么导致的。求指点一二。

2208 次点击
所在节点    PHP
9 条回复
mitu9527
2021-01-15 14:43:56 +08:00
自己去看下 header 函数的手册,看完后我估计你就能找到原因了,就算找不到原因可能也知道该如何解决了。
elevioux
2021-01-15 14:47:04 +08:00
盲猜应该是前面的代码已经输出了响应头。

看下有没有错误,像 header already sent 之类的
hbolive
2021-01-15 14:48:50 +08:00
这个时候能怀疑的只能是自己的代码。。
7DLNU56W
2021-01-15 14:53:59 +08:00
我认真观察过很多类似的代码,也看了关于 header 函数的说明,但还是没找到到底是由什么导致的。
我准备晚上专门针对这个问题实验一下,如果有了结果,会在此告知大家的。

PS:我有一种想法,因为 header 函数中有一个要求是此函数前不能输出任何内容,但之前两种情况都没有输出任何内容,不知道后面有输出会不会影响,我初步想针对这个测试一下。
KasuganoSoras
2021-01-16 00:11:52 +08:00
可以试下 Header("Location: http://www.example.com/XXXX", true, 302) 强制指定 302 状态码,并且覆盖之前的所有 Location 字段
7DLNU56W
2021-01-16 11:33:21 +08:00
@KasuganoSoras 并没有效果
msg7086
2021-01-16 17:47:52 +08:00
看上去就是已经输出了内容,比如 3 字节的 BOM 头这种不可见的内容。
7DLNU56W
2021-01-16 17:53:12 +08:00
@msg7086 我对已经输出内容的问题测试过,故意在 header 前面、后面分别输出内容,结果仍然是 302 转跳,不能导致 200 状态。

目前仍然没有弄明白到底是什么原因导致 200 的,不过我有点怀疑会不会是 web 服务导致的?
dorothyREN
2021-01-17 11:40:58 +08:00
这是在搞微信那个域名检测吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/745231

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX