Ben*_*rey 8 javascript php ajax header cross-domain
我试图允许访问我的网站上的每个子域,以允许跨子域AJAX调用.有没有办法指定网站的所有子域,*.example.com
或者,当我列出多个域时,为什么以下不起作用:
header('Access-Control-Allow-Origin: http://api.example.com http://www.example.com');
Run Code Online (Sandbox Code Playgroud)
我已经阅读了以下似乎相似的问题,如果不是与此问题相同,除了我想访问子域这一事实,这个问题涉及一般域.
Access-Control-Allow-Origin多个源域?
如果上述问题是此问题的解决方案,那么我如何从标头中检索原点.似乎$ _SERVER ['HTTP_ORIGIN']非常不可靠,甚至不能跨浏览器.我需要能够在尝试使用javascript发送AJAX调用时在任何可能显示错误的浏览器中查看原点.
Ben*_*rey 20
此问题的解决方案是使用$ _SERVER ['HTTP_ORIGIN']变量来确定请求是否来自允许的域.然后它设置了这个:
$allowed_domains = [/* Array of allowed domains*/];
if (in_array($_SERVER['HTTP_ORIGIN'], $allowed_domains)) {
header('Access-Control-Allow-Origin: ' . $_SERVER['HTTP_ORIGIN']);
}
Run Code Online (Sandbox Code Playgroud)
bei*_*lex 14
这就是我做到的.
该Origin
头是由浏览器指定,将包含要求对其他域的脚本的网站域名:
Origin: http://www.websiteA.com
Run Code Online (Sandbox Code Playgroud)
因此,您可以在服务器端脚本中将多个域"列入白名单":
$allowedOrigins = [
"http://www.websiteA.com",
"https://www.websiteB.com"
// ... etc
];
Run Code Online (Sandbox Code Playgroud)
然后,您可以检查$_SERVER["HTTP_ORIGIN"]
全局是否包含该白名单中的域:
if (in_array($_SERVER["HTTP_ORIGIN"], $allowedOrigins)) {
Run Code Online (Sandbox Code Playgroud)
并将Access-Control-Allow-Origin
响应标头设置为任何Origin
标头值:
header("Access-Control-Allow-Origin: " . $_SERVER["HTTP_ORIGIN"]);
Run Code Online (Sandbox Code Playgroud)
完整脚本:
$allowedOrigins = [
"http://www.websiteA.com",
"https://www.websiteB.com"
// ... etc
];
if (in_array($_SERVER["HTTP_ORIGIN"], $allowedOrigins)) {
header("Access-Control-Allow-Origin: " . $_SERVER["HTTP_ORIGIN"]);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
24126 次 |
最近记录: |