我通过Axios
PHP 脚本调用,检查作为参数传递给它的 URL 是否可以嵌入到 iframe 中。该 PHP 脚本以使用$_GET[]
.
奇怪的是,带有cross-origin-opener-policy: same-origin
(如https://twitter.com/)的页面可以打开$_GET[]
,而带有Referrer Policy: strict-origin-when-cross-origin
(如https://calia.order.liven.com.au/)的页面不能。
我不明白为什么,这很烦人,因为对于无法打开的页面,$_GET[]
我无法对它们执行检查 - 脚本失败(意味着我没有得到响应并且Axios
调用运行catch()
块)。
所以基本上有 3 种类型的页面:(1) 允许 iframe 嵌入的那些,(2) 不允许的,以及 (3) 不仅不允许而且甚至无法打开执行的烦人的页面这张支票。
有没有办法用 PHP 打开任何页面,如果没有,我该怎么做才能防止我的脚本在几秒钟后失败?
PHP 脚本:
$source = $_GET['url'];
$response = true;
try {
$headers = get_headers($source, 1);
$headers = array_change_key_case($headers, CASE_LOWER);
if (isset($headers['content-security-policy'])) {
$response = false;
}
else if (isset($headers['x-frame-options']) &&
$headers['x-frame-options'] == 'DENY' ||
$headers['x-frame-options'] == 'SAMEORIGIN'
) {
$response = false;
}
} catch (Exception $ex) {
$response = $ex;
}
echo $response;
编辑:下面是控制台错误。
Access to XMLHttpRequest at 'https://path.to.cdn/iframeHeaderChecker?url=https://calia.order.liven.com.au/' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
CustomLink.vue?b495:61 Error: Network Error
at createError (createError.js?2d83:16)
at XMLHttpRequest.handleError (xhr.js?b50d:84)
VM4758:1 GET https://path.to.cdn/iframeHeaderChecker?url=https://calia.order.com.au/ net::ERR_FAILED