我的服务器中有一个PHP脚本,该脚本使用Location: $url标头中的条目重定向页面。
但是,请求标头未发送到$url。
我看到了用User-Agent,Connection等定义的最小标头。
假设我自定义了一些标题参数。我想在重定向后发送它们。
可能吗?我不想为此使用CURL。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
您在服务器上的PHP脚本利用Location: $url
标头实现页面重定向,但遇到请求头信息未随重定向一起发送到新的URL $url
的问题。您希望在不使用cURL的情况下,能够携带自定义的HTTP头部信息进行重定向。
在PHP中直接通过Location
标头进行HTTP重定向时,确实无法直接携带自定义的HTTP请求头。这是因为HTTP规范中的重定向(如301、302状态码)仅告知客户端新的资源位置,并不会传递或保留原始请求的额外头部信息,除非这些信息是浏览器自动管理的(如Cookie)。
虽然不能直接在简单的重定向中附加自定义头部,但您可以采用一种间接策略来达到目的:
intermediate.php
),该页面的任务是从之前存储的地方读取这些自定义头部信息。intermediate.php
页面再执行实际的请求到目标URL($url),并附加上从存储中恢复的自定义头部信息。这可以通过PHP的stream_context_create
和file_get_contents
函数实现,模拟一个带自定义头部的请求,然后输出响应内容给用户,营造出连续浏览的体验。// intermediate.php 示例代码
session_start();
$url = $_SESSION['redirect_url']; // 假设之前已存储重定向URL
$headers = $_SESSION['custom_headers']; // 获取之前存储的自定义头部信息
unset($_SESSION['redirect_url']); // 清理会话数据
unset($_SESSION['custom_headers']);
$opts = [
'http' => [
'method' => 'GET',
'header' => implode("\r\n", $headers), // 拼接自定义头部
],
];
$context = stream_context_create($opts);
$content = file_get_contents($url, false, $context);
header('Content-Type: ' . $contentType); // 根据实际情况设置响应类型
echo $content; // 输出获取的内容给用户
exit;
尽管直接在标准HTTP重定向中携带自定义头部信息不可行,但通过上述间接方法可以在一定程度上满足您的需求。请根据实际应用场景权衡利弊后选择合适的解决方案。