V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
7DLNU56W
V2EX  ›  PHP

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

  •  
  •   7DLNU56W · 2021-01-15 14:20:18 +08:00 · 2399 次点击
    这是一个创建于 1417 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    目前仍然没有弄明白到底是什么原因导致 200 的,不过我有点怀疑会不会是 web 服务导致的?
    dorothyREN
        9
    dorothyREN  
       2021-01-17 11:40:58 +08:00
    这是在搞微信那个域名检测吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5188 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 03:52 · PVG 11:52 · LAX 19:52 · JFK 22:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.