首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >php页面中意外的http响应代码

php页面中意外的http响应代码
EN

Stack Overflow用户
提问于 2022-01-28 21:29:29
回答 2查看 204关注 0票数 1

当我在Azure (php7.4或8.0)上运行以下代码时:

代码语言:javascript
代码运行次数:0
运行
复制
<?php

try {
  throw new Exception('x');
}catch (Exception $e) {
  echo '1 '; // If i comment this line, http status code will be 400...
  http_response_code(400);
}

echo '3 '; 
echo http_response_code();

结果是“13400”,但是当我检查我的http状态代码时,我的200 (在几个浏览器上相同)。

注释行回显'1‘时,http状态代码变为400

从我的观点来看,I总是期望400,因为http状态代码会导致此代码.

EN

回答 2

Stack Overflow用户

发布于 2022-01-28 22:23:14

设置响应代码意味着设置响应头。只有当没有输出发送到客户端时,才能设置这些标头。

要检查,如果可以添加更多的http头,则可以使用函数headers_sent

在你的例子中:

代码语言:javascript
代码运行次数:0
运行
复制
    try {
        throw new Exception('x');
    } catch (Exception $e) {
        echo '1 '; // If i comment this line, http status code will be 400...

        if(headers_sent()) { //check if headers were sent already
            print 'oops, headers have been sent already, not possible to add some more :-(';
        }

        http_response_code(400);
    }
    echo '3 ';
    echo http_response_code();

在某些服务器上,在报头最终被发送之前,可以回显少量的输出。这是因为已经配置了一定大小的输出缓存。(使用output_buffering设置)因此,很可能在服务器上将此设置设置为0。然后,头已经与输出的第一个字节一起发送,即使它是不可见的。

更多信息可以在一个关于发送头和输出的老问题中找到:https://stackoverflow.com/a/8028987

票数 0
EN

Stack Overflow用户

发布于 2022-02-01 16:51:02

在阅读了Akrys的答案之后,我明白这个例外与它无关。

一个更好的问题是:

为什么下面的代码返回http状态代码200

代码语言:javascript
代码运行次数:0
运行
复制
 echo 'A'; 
 http_response_code(400);

以及为什么下面的代码返回http状态代码400

当您回答“在某些服务器上,在报头最终发送之前,有可能回显少量的输出。”

代码语言:javascript
代码运行次数:0
运行
复制
 http_response_code(400);
 echo 'A'; 

这取决于output_buffering设置,这解释了为什么我在本地php服务器上总是有一个http状态代码400 .

谢谢你的回答..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70900496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档