概述
官方文档:
HTTP请求头信息的名称不区分大小写,并且 _ 会自动转换为 - ,所以下面的写法都是等效的:
$agent = Request::instance()->header('user-agent');
$agent = Request::instance()->header('User-Agent');
$agent = Request::instance()->header('USER_AGENT');
注意:
如果不传具体的key ,则会把所有的header都转为小写,比如下面这样:
// 假如header中的某个key 是:USER_AGENT
$headers = Request::instance()->header();
// 那么这时候通过headers数组获取某个header 就需要用小写和中划线了
$agent = $headers['user-agent']
TP5源码:
/**
* 设置或者获取当前的Header
* @access public
* @param string|array $name header名称
* @param string $default 默认值
* @return string
*/
public function header($name = '', $default = null)
{
if (empty($this->header)) {
$header = [];
if (function_exists('apache_request_headers') && $result = apache_request_headers()) {
$header = $result;
} else {
$server = $this->server ?: $_SERVER;
foreach ($server as $key => $val) {
if (0 === strpos($key, 'HTTP_')) {
$key = str_replace('_', '-', strtolower(substr($key, 5)));
$header[$key] = $val;
}
}
if (isset($server['CONTENT_TYPE'])) {
$header['content-type'] = $server['CONTENT_TYPE'];
}
if (isset($server['CONTENT_LENGTH'])) {
$header['content-length'] = $server['CONTENT_LENGTH'];
}
}
// 转小写
$this->header = array_change_key_case($header);
}
if (is_array($name)) {
return $this->header = array_merge($this->header, $name);
}
if ('' === $name) {
return $this->header;
}
// 转小写 替换下划线
$name = str_replace('_', '-', strtolower($name));
return isset($this->header[$name]) ? $this->header[$name] : $default;
}
题外话:
如果在header中传输的key 包含了下划线,那么服务器是Nginx的情况就需要注意了:
Nginx对header name的字符做了限制,默认 underscores_in_headers 为off,表示如果header name中包含下划线,则忽略掉,部署后就获取不到。
解决方案:
1.在header里不要用 “_” 下划线,可以用驼峰命名或者其他的符号(如- 中划线)代替。
2.在nginx里的 nginx.conf文件中配置http的部分添加 : underscores_in_headers on;(默认值是off)
最后
以上就是朴实薯片为你收集整理的注意:TP5 获取header自动转小写问题的全部内容,希望文章能够帮你解决注意:TP5 获取header自动转小写问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复