Javascript 访问控制不允许原点允许原点
我正在一个2应用程序中向远程PHP服务器发出一个Javascript 访问控制不允许原点允许原点,javascript,ajax,cors,xmlhttprequest,cross-domain,Javascript,Ajax,Cors,Xmlhttprequest,Cross Domain,我正在一个2应用程序中向远程PHP服务器发出一个Ajax.request(包装在中) 服务器的响应如下所示: 无法加载XMLHttpRequest。来源http://localhost:8888是访问控制允许原点不允许的 如何解决此问题?这是因为。更多关于或 基本上,在您的示例中,您需要加载http://nqatalog.negroesquisso.pt/login.php页面仅来自nqatalog.negroesquisso.pt,而不是localhost我不久前写了一篇关于这个问题的文章 如
Ajax.request
(包装在中)
服务器的响应如下所示:
无法加载XMLHttpRequest。来源<代码>http://localhost:8888是访问控制允许原点不允许的
如何解决此问题?这是因为。更多关于或
基本上,在您的示例中,您需要加载
http://nqatalog.negroesquisso.pt/login.php
页面仅来自nqatalog.negroesquisso.pt
,而不是localhost
我不久前写了一篇关于这个问题的文章
如果您控制了响应服务器,则处理此问题的最简单方法是为以下内容添加响应头:
Access-Control-Allow-Origin: *
这将允许跨域。在PHP中,您需要修改响应,如下所示:
<?php header('Access-Control-Allow-Origin: *'); ?>
如果无法控制服务器,只需将此参数添加到Chrome启动器中:
--禁用web安全性
请注意,我不会将此用于正常的“网上冲浪”。有关参考信息,请参阅以下帖子:
如果您使用Phonegap实际构建应用程序并将其加载到设备上,这将不是问题。由于Matt Mombrea在服务器端是正确的,您可能会遇到另一个问题,即拒绝白名单 您必须配置phonegap.plist。(我正在使用旧版本的phonegap) 对于cordova,命名和目录可能会有一些更改。但步骤应该大致相同 首先选择支持文件>PhoneGap.plist 然后在“外部主机”下 添加一个值可能为“”的条目 我使用*仅用于调试目的
如果您使用的是Apache,只需添加:
<ifModule mod_headers.c>
Header set Access-Control-Allow-Origin: *
</ifModule>
在使用各种API时,我曾多次遇到过这种情况。通常,快速修复方法是在字符串末尾添加“&callback=?”。有时,符号必须是字符代码,有时是“?”:“?callback=?”(请参阅)我们在chrome中测试的phonegap应用程序也有同样的问题。 在打开Chrome之前,我们每天都会使用下面的批处理文件。 请记住,在运行此程序之前,您需要从任务管理器中清除所有chrome实例,或者您可以选择chrome以不在后台运行 批次:(使用cmd)
如果您在Angular.js中得到了这个,那么请确保像这样转义端口号:
var Project = $resource(
'http://localhost\\:5648/api/...', {'a':'b'}, {
update: { method: 'PUT' }
}
);
有关详细信息,请参阅。这是我在尝试使用作为数据源解决同一问题时遇到的第一个问题/答案。我意识到这并不能解决问题,但它的关联性足以使其具有价值 我正在使用ASP.NETMVC。这条路对我有用。最终,您将创建一个属性,
[HttpHeaderAttribute(“访问控制允许来源”、“*””)
,您可以将该属性添加到控制器操作中
例如:
public class HttpHeaderAttribute : ActionFilterAttribute
{
public string Name { get; set; }
public string Value { get; set; }
public HttpHeaderAttribute(string name, string value)
{
Name = name;
Value = value;
}
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
filterContext.HttpContext.Response.AppendHeader(Name, Value);
base.OnResultExecuted(filterContext);
}
}
然后将其用于:
[HttpHeaderAttribute("Access-Control-Allow-Origin", "*")]
public ActionResult MyVeryAvailableAction(string id)
{
return Json( "Some public result" );
}
这对于任何需要为“www”和“非www”版本的推荐人提供例外情况的人来说可能很方便:
$referrer = $_SERVER['HTTP_REFERER'];
$parts = parse_url($referrer);
$domain = $parts['host'];
if($domain == 'google.com')
{
header('Access-Control-Allow-Origin: http://google.com');
}
else if($domain == 'www.google.com')
{
header('Access-Control-Allow-Origin: http://www.google.com');
}
如果您有/应用程序,则可以通过Web.config文件包含此标头:
<system.webServer>
...
<httpProtocol>
<customHeaders>
<!-- Enable Cross Domain AJAX calls -->
<remove name="Access-Control-Allow-Origin" />
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
</system.webServer>
...
在中,您可以在控制器中执行以下操作:
headers['Access-Control-Allow-Origin'] = '*'
我会给你一个简单的解决方案。就我而言,我没有访问服务器的权限。在这种情况下,您可以更改浏览器中的安全策略以允许访问控制允许源。这很简单:
“C:\Program Files\Google\Chrome\Application\Chrome.exe”--允许从文件访问文件--禁用web安全性
位置可能不同。现在,单击该快捷方式打开Chrome。如果您正在编写Chrome扩展并出现此错误,请确保已将API的基本URL添加到您的
manifest.json中,例如:
"permissions": [
"https://itunes.apple.com/"
]
当您收到请求时,您可以
var origin = (req.headers.origin || "*");
而不是当你必须做出这样的回应时:
res.writeHead(
206,
{
'Access-Control-Allow-Credentials': true,
'Access-Control-Allow-Origin': origin,
}
);
您可以通过在HTTP选项的响应中使包含头访问控制允许源代码:
的broswer在不修改服务器的情况下工作
在铬合金中,使用。如果您使用的是Mozilla,请检查Ruby中的。
为所有人或
response['Access-Control-Allow-Origin'] = 'http://yourdomain.name'
如果您在apache下,只需向目录中添加一个包含以下内容的.htaccess文件:
Header set Access-Control-Allow-Origin: *
Header set Access-Control-Allow-Headers: content-type
Header set Access-Control-Allow-Methods: *
但是我需要从移动设备加载webservice,我会绕过它吗?你需要做一些服务器端更改或使用JSONP,我会联系我的服务器提供商。谢谢这有什么安全问题吗,例如,说“出于安全原因,JavaScript受到“同源策略”的限制,例如,恶意脚本无法联系远程服务器并从您的站点发送敏感数据。”太棒了,我只是把它放在我的node.js服务器文件中:response.writeHead(200,{'Content Type':contentType,'Access Control Allow origin':'*');它成功了。谢谢约翰,是的,通配符将允许任何域向您的主机发送请求。我建议用运行脚本的特定域替换星号。有趣的是,您认为通配符甚至不应该建议@jfrej。这完全取决于你的目标。例如,我们之所以使用通配符(并发布此答案),是因为我们正在为任何站点构建一个嵌入式小部件。谢谢。但是我的应用程序正在移动设备上运行,我无法将参数传递给我的webview包装器。你不先在浏览器中测试你的应用程序吗?如何调试?是的,我在Chrome浏览器中调试,但应用程序不会在Chrome上运行。它将出现在我无法控制的phonegap网络视图上。阅读答案:您只需将此参数添加到您的Chrome启动器中即可。这里面没有设置,当然不安全。OP正在寻找绕过安全措施的方法。在使用jQuery时,设置res.writeHead(
206,
{
'Access-Control-Allow-Credentials': true,
'Access-Control-Allow-Origin': origin,
}
);
response['Access-Control-Allow-Origin'] = '*'
response['Access-Control-Allow-Origin'] = 'http://yourdomain.name'
Header set Access-Control-Allow-Origin: *
Header set Access-Control-Allow-Headers: content-type
Header set Access-Control-Allow-Methods: *