首页 > 解决方案 > 我正在尝试将标头中的 HTTP_X_FORWARDED_FOR 传递给 php 服务器,但没有在服务器中获取其值

问题描述

我在第一台服务器上设置以下 php 脚本来打印所有服务器值

var_dump($_SERVER)

从另一个服务器调用第一个服务器链接

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => FIRST_SERVER_URL,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => array(
    "HTTP_X_FORWARDED_FOR: 111.90.148.19",
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}

但是我没有在 $_SERVER 值中获得 HTTP_X_FORWARDED_FOR 的值

我试过这样的javascript。

var data = null;

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === 4) {
    console.log(this.responseText);
  }
});

xhr.open("GET", FIRST_SERVER_URL);
xhr.setRequestHeader("HTTP_X_FORWARDED_FOR", "111.90.148.19");    
xhr.send(data);

标签: javascriptphpapi

解决方案


您应该根据 HTTP 规则在 JS 中设置标头名称,而不是 PHP 内部名称。标题名称实际上是:

X-Forwarded-For

所以你的 JS 代码应该是这样的:

...
xhr.setRequestHeader("X-Forwarded-For", "111.90.148.19");
...

推荐阅读