为什么REQUEST_URI会被修改?

3
当我在req.php中运行以下代码时:
<?php
  echo("Request:\n");
  print_r($_SERVER['REQUEST_URI']);
?>

请求:

curl "http://localhost/req.php/postcode/14482/city/./country/de/"

我收到了这个响应:
Request:
/req.php/postcode/14482/city/country/de/

当我在/city后使用两个点时:
Request:
/req.php/postcode/14482/country/de/

在 /city 后面加上三个点:

Request:
/req.php/postcode/14482/city/.../country/de/

为什么 REQUEST_URI 被修改而不是保持不变?编辑:看来 cURL 正在编辑 REQUEST_URI - 是否有设置可以禁用此行为的 cURL php 库?
1个回答

3
为什么 REQUEST_URI 被修改而不是原封不动地传递?实际上并没有被修改。URL 的更改是由 cURL 在到达服务器之前进行的。请求中从未包含“./”。"./"表示“当前路径段”,因此是多余的。客户端(cURL)在发出请求之前对其进行了规范化。通过比较使用curl发送请求和手动构造HTTP请求的响应,您可以看到这一点。
%  telnet localhost 7007
Trying ::1...
Connected to localhost.
Escape character is '^]'.
GET /index.php/req.php/postcode/14482/city/./country/de/

HTTP/0.9 200 OK
Date: Wed, 04 Apr 2018 07:53:23 +0000
Connection: close
X-Powered-By: PHP/7.1.7
Content-type: text/html; charset=UTF-8

Request:
/index.php/req.php/postcode/14482/city/./country/de/
Connection closed by foreign host.

cURL

%  curl http://localhost:7007/index.php/req.php/postcode/14482/city/./country/de/
Request:
/index.php/req.php/postcode/14482/city/country/de/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接