gpt4 book ai didi

validation - 如何在 PHP 中解析/验证/处理 http header

转载 作者:可可西里 更新时间:2023-11-01 16:36:36 27 4
gpt4 key购买 nike

目前,我正在构建自己的 php 框架,并且正在创建 PHP-FIG PSR-7 MessageInterface 的实现。具体来说是 withHeader 方法。它声明该方法可能会抛出异常:\InvalidArgumentException 对于无效的 header 名称或值。

所以我想知道, header 何时有效或无效?值(value)观也一样。或者我应该接受任何 header 和任何 header 值吗?那可能很危险吧?

现在您可以大体上说,如果 header 有多个值,则它们以逗号分隔。但这并不总是适用。例如,如果我查看用户代理 header ,值本身有时会包含一个逗号。但您应该将其视为单个值。

最佳答案

确实,传递标题名称是“危险的”——作为withHeader()的参数,这

  • NULL
  • 不是字符串
  • 是一个空字符串

这同样适用于 header value 参数。它必须是数组或字符串(代表仅一个值,而不是逗号分隔的值列表!)。

关于withHeader方法的实现:

/**
* Return an instance with the provided value replacing the specified header.
*
* ...
*
* @param string $name Case-insensitive header field name.
* @param string|string[] $value Header value(s).
* @return static
* @throws \InvalidArgumentException for invalid header names or values.
*/
public function withHeader($name, $value) {
$this
->validateHeaderName($name)
->validateHeaderValue($value)
;

$clone = clone $this;

$clone->replaceHeader($name, $value);

return $clone;
}

/**
* =================
* Not part of PSR-7
* =================
*
* Validate header name.
*
* @param string $name Case-insensitive header field name.
* @return $this
* @throws \InvalidArgumentException
*/
protected function validateHeaderName($name) {
if (!isset($name)) {
throw new \InvalidArgumentException('No header name provided!');
}

if (!is_string($name)) {
throw new \InvalidArgumentException('The header name must be a string!');
}

if (empty($name)) {
throw new \InvalidArgumentException('Empty header name provided!');
}

return $this;
}

/**
* =================
* Not part of PSR-7
* =================
*
* Validate header value.
*
* @param string|string[] $value Header value(s).
* @return $this
* @throws \InvalidArgumentException
*/
protected function validateHeaderValue($value) {
if (isset($value) && !is_array($value) && !is_string($value)) {
throw new \InvalidArgumentException('The header value must be a string or an array!');
}

return $this;
}

/**
* =================
* Not part of PSR-7
* =================
*
* Replace a header item with a new one.
*
* @param string $name Case-insensitive header field name.
* @param string|string[] $value Header value(s).
* @return $this
* @done
*/
protected function replaceHeader($name, $value) {
$this
->removeHeader($name)
->addHeader($name, $value)
;

return $this;
}

关于validation - 如何在 PHP 中解析/验证/处理 http header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39441117/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com