PHP:Header函数

PHP Header 函数用于发送 HTTP 标头以响应 HTTP 请求,通常来自浏览器。
必须在将任何输出发送到浏览器之前发送标头。

要发送简单的标头响应,例如用于永久重定向的响应,我们可以使用以下内容:

header('HTTP/1.1 301 Moved Permanently');
header('Location: http://onitroad.com/new-url');

从 PHP 5.4 开始,我们应该使用 http_response_code() 来设置响应代码。
这更容易,因为我们不必确定客户端使用的协议,并且它消除了代码中输入错误的风险:

http_response_code(301);
header('Location: http://onitroad.com/new-url');

标头重定向

重定向是通过 HTTP Location Header 执行的,通常结合相关的状态码,例如 303 See Other 状态码。

header(set_protocol() . ' 303 See Other');
header('Location: http://www.example.com/');

该函数使用 SERVER_PROTOCOL 变量来确定客户端使用的协议:

function set_protocol() {
  $supported_protocols = array(
    'HTTP/2.0' => true,
    'HTTP/1.1' => true,
    'HTTP/1.0' => true,
  );
  $protocol = $_SERVER["SERVER_PROTOCOL"];
  if (!isset($supported_protocols["$protocol"])) {
    $protocol = 'HTTP/1.0';
  }
  return $protocol;
}

如果在 $supported_protocols 数组中找不到协议,此函数将使用 HTTP/1.0 作为响应的后备;这样我们也可以拒绝格式错误的请求或者无法识别的协议。

请注意,HTTP/1.0 规范不要求客户端发送主机标头 — 相反,我们可能希望在无法识别协议时向用户显示错误消息。

我们可以通过从数组中删除应用程序未使用的协议来删除它。
此外,我们可能需要考虑使用 http_response_code 代替,因为协议将由 PHP 自动设置。

响应代码

状态码用于告诉浏览器所请求的资源是否存在、已被修改或者是否已移动到另一个位置。

PHP 脚本的标准响应是 200 OK,但我们可以使用 PHP 标头函数更改它。
我们通常会出于缓存目的执行此操作,或者在移动资源时重定向请求。
要发送 200 ok 消息,我们可以这样做:

header('HTTP/1.1 200 OK');

这也是一种提供其他服务容易理解的错误响应代码的有用方法。
这可能是 404 Not Found 或者臭名昭著的 500 Internal Server Error 。
这里有些例子:

  • header('HTTP/1.1 404 未找到')
  • header('HTTP/1.1 403 Forbidden')
  • header('HTTP/1.1 400 错误请求')
  • header('HTTP/1.1 500 内部服务器错误')
  • header('HTTP/1.1 301 永久移动')
日期:2020-06-02 22:15:41 来源:oir作者:oir