【发布时间】:2022-06-11 02:18:27
【问题描述】:
我像这样从浏览器获取请求标头。
<?php
$DataFromBrowser='';
$DataToBrowser='';
$headers = getallheaders();
foreach($headers as $key=>$val){
$DataFromBrowser = $DataFromBrowser . $key . ': ' . $val . "\n";
}
//echo get_raw_http_request();
echo "Data from browser";
echo '<textarea rows="12" style="width:100%;">' . $DataFromBrowser . '</textarea>';
?>
输出将如下所示。
主机:127.0.0.1
用户代理:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:101.0) Gecko/20100101 Firefox/101.0
接受:text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,/;q=0.8
接受语言:en-US,en;q=0.5
接受编码:gzip、deflate、br
连接:保持活动
饼干:foo=bar
升级不安全请求:1
Sec-Fetch-Dest:文档
Sec-Fetch-Mode:导航
Sec-Fetch-Site:无
Sec-Fetch-User:?1
现在我想做完全相同的事情,但对于来自服务器的响应标头。我知道我可以执行以下操作,但它会创建另一个连接,我需要当前服务页面的响应标头。
<?php
$URL = 'https://www.google.com';
$headers = get_headers($URL);
foreach($headers as $value) {
echo $value;
echo "<br>";
}
?>
如果我将上面的内容更改为http://127.0.0.1,它就会陷入僵局,并且会循环直到它崩溃。
响应标头应如下所示。
HTTP/1.1 200 正常
日期:格林威治标准时间 2022 年 6 月 8 日星期三 16:53:45
服务器:Apache/2.4.46 (Win64) OpenSSL/1.1.1j PHP/8.0.3
X-Powered-By:PHP/8.0.3
内容长度:589
保活:超时=5,最大值=100
连接:保持活动
内容类型:文本/html;字符集=UTF-8
【问题讨论】:
-
“如果我将上面的内容更改为127.0.0.1 它就会陷入僵局”是什么意思?您拥有“在您自己的计算机上控制此代码”的能力,因此请了解它实际上在做什么:它是否甚至加载该脚本或是否启动一个完全不同的文件,因为您已经在端口 80 上运行服务器?它是否可以通过 get_headers?您是否打开了警告/错误?等等等等。
-
你的意思是
headers_list()?还要检查apache_response_headers() -
在服务器端 inside 请求时,您无法获取请求的响应标头。包装 PHP 调用(以及任何中间缓存/代理)的 Web 服务器将在 PHP 完成处理后添加标头。你需要所有的标题吗?或者只是 PHP 本身可能添加的那些?
-
html/css/javascript请只使用代码sn-ps。
-
“如果我将上面的内容更改为
http://127.0.0.1,它就会陷入僵局,并且会循环直到它崩溃。” - 这可能不是因为脚本您显示的代码也是通过请求相同的 URL 触发的...?