【问题标题】:Docker web server always returns status 200Docker Web 服务器总是返回状态 200
【发布时间】:2021-12-18 04:51:19
【问题描述】:

我在php:8.0-apache docker 容器中托管的 Web 服务器有问题,即使它设置为不同的值,它总是返回状态代码 200。 容器外的相同代码可以正常工作

我的php.ini 文件是:

log_errors=On
error_log=/dev/stderr

而php代码是:

... some code ...

http_response_code(400);
exit;

但我收到回复:

HTTP/1.1 200 OK

你知道我的设置有什么问题吗?

编辑: 码头文件:

FROM php:8.0-apache

RUN echo "<?php echo '{some json content}'; http_response_code(400); exit; ?>" >> /var/www/html/index.php

COPY php.ini /usr/local/etc/php/

【问题讨论】:

  • 我们可以看看你的 dockerfile 吗?
  • 你确定http_response_code(400);被执行了吗?请分享一个最小可重现的 php 代码,以便我们帮助找出根本原因。
  • @AliTou docker 文件附件
  • @TruongHua 是的,肯定被执行了
  • 您检查过其他错误吗?您配置了哪个错误报告级别?

标签: php docker apache


【解决方案1】:

我想出了问题所在:

当我调用 echo "..." 时,已经发送了状态为 200 的标头,因此 http_response_code(400) 被忽略了。

要解决这个问题(以及它在我的电脑上使用默认配置的原因)是将php.ini 中的output_buffering 设置为某个值,因此不会立即发送输出。

log_errors=On
error_log=/dev/stderr
output_buffering=4096

见:https://stackoverflow.com/a/8028987/1557025

【讨论】:

  • 是的,这是一个解决方案,但如果您可以将更改响应代码的逻辑移动到第一个回显之前,您将能够关闭输出缓冲,从而更快地将响应发送到您的客户端并减少服务器中的内存占用。
猜你喜欢
  • 2015-04-28
  • 2015-10-28
  • 2016-07-28
  • 1970-01-01
  • 1970-01-01
  • 2018-12-26
  • 2015-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多