php - 为什么 symfony 请求标头设置为二进制值,目的是什么?
问题描述
const HEADER_FORWARDED = 0b00001; // When using RFC 7239
const HEADER_X_FORWARDED_FOR = 0b00010;
const HEADER_X_FORWARDED_HOST = 0b00100;
const HEADER_X_FORWARDED_PROTO = 0b01000;
const HEADER_X_FORWARDED_PORT = 0b10000;
const HEADER_X_FORWARDED_ALL = 0b11110; // All "X-Forwarded-*" headers
const HEADER_X_FORWARDED_AWS_ELB = 0b11010; // AWS ELB doesn't send X-Forwarded-Host
我无法理解这一点,为什么他们设置它?
解决方案
他们这样做是为了能够使用按位运算符。
在Symfony\Component\HttpKernel\HttpCache\SubRequestHandler\handle
我们可以找到这个:
// save global state related to trusted headers and proxies
$trustedProxies = Request::getTrustedProxies();
$trustedHeaderSet = Request::getTrustedHeaderSet();
// remove untrusted values
$remoteAddr = $request->server->get('REMOTE_ADDR');
if (!IpUtils::checkIp($remoteAddr, $trustedProxies)) {
$trustedHeaders = array(
'FORWARDED' => $trustedHeaderSet & Request::HEADER_FORWARDED,
'X_FORWARDED_FOR' => $trustedHeaderSet & Request::HEADER_X_FORWARDED_FOR,
'X_FORWARDED_HOST' => $trustedHeaderSet & Request::HEADER_X_FORWARDED_HOST,
'X_FORWARDED_PROTO' => $trustedHeaderSet & Request::HEADER_X_FORWARDED_PROTO,
'X_FORWARDED_PORT' => $trustedHeaderSet & Request::HEADER_X_FORWARDED_PORT,
);
foreach (array_filter($trustedHeaders) as $name => $key) {
$request->headers->remove($name);
}
}
二进制符号本身只是一种使其显而易见的方式,从 PHP 的角度来看,它只是一个常规整数。
推荐阅读
- linux - 在 linux 中使用 grep 和 awk 命令在文件中搜索完全匹配
- javascript - 我怎么能只有某些管理员能够创建和删除其他管理员,而其他管理员不能
- javascript - 奇怪的语法错误 sqlite3 NodeJS 错误:SQLITE_ERROR:靠近“(”:语法错误
- javascript - 如何知道一段 JS 是在 ES Module 中执行还是在常规脚本中执行?
- java - java串行通信中超过127的值显示为“ef bf bd”的问题
- java - Java 对象创建:如何在 Java 中为此类场景建模?| 使用 DyanmoDB 对 SQL 数据进行建模
- chatbot - RASA X 运行问题:确保使用有效数据以及有效域和配置文件启动 Rasa X
- maven - 通过 ci-pipeline 发布声纳报告后对 sonarQube 的覆盖率为零
- debugging - 用gdb调试armcc编译的elf
- python - 循环遍历多个文件夹并将表格数据提取到数据框中并将路径保存到数据框中