我有一个涉及的设置
前端服务器(Node.js,domain:localhost:3000)<--->后端(Django,Ajax,域:localhost:8000)
浏览器< - webapp < - Node.js(服务应用)
浏览器(webapp) - > Ajax - > Django(服务ajax POST请求)
现在,我的问题在于CORS设置,webapp使用它来向后端服务器进行Ajax调用.在chrome中,我一直在努力
当credentials标志为true时,无法在Access-Control-Allow-Origin中使用通配符.
在Firefox上也不起作用.
我的Node.js设置是:
var allowCrossDomain = function(req, res, next) {
res.header('Access-Control-Allow-Origin', 'http://localhost:8000/');
res.header('Access-Control-Allow-Credentials', true);
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
};
Run Code Online (Sandbox Code Playgroud)
webapp发出如下请求:
$.ajax({
type: "POST",
url: 'http://localhost:8000/blah',
data: {},
xhrFields: {
withCredentials: true
},
crossDomain: true,
dataType: 'json',
success: successHandler
});
Run Code Online (Sandbox Code Playgroud)
因此,webapp发送的请求标头如下所示:
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: "Origin, X-Requested-With, Content-Type, Accept"
Access-Control-Allow-Methods: 'GET,PUT,POST,DELETE'
Content-Type: application/json
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: …Run Code Online (Sandbox Code Playgroud) 我在他们设置的平台上对我自己的服务器进行ajax调用,阻止这些ajax调用(但我需要它从我的服务器获取数据以显示从我服务器的数据库中检索的数据).我的ajax脚本正在运行,它可以将数据发送到我服务器的php脚本以允许它处理.但是,由于它被阻止,它无法获取已处理的数据"Access-Control-Allow-Origin"
我无法访问该平台的源/核心.所以我无法删除它禁止我这样做的脚本.(P/SI使用谷歌Chrome控制台,发现此错误)
Ajax代码如下所示:
$.ajax({
type: "GET",
url: "http://example.com/retrieve.php",
data: "id=" + id + "&url=" + url,
dataType: 'json',
cache: false,
success: function(data)
{
var friend = data[1];
var blog = data[2];
$('#user').html("<b>Friends: </b>"+friend+"<b><br> Blogs: </b>"+blog);
}
});
Run Code Online (Sandbox Code Playgroud)
或者JSON上面的ajax脚本是否有相同的代码?我认为JSON是允许的.
我希望有人可以帮助我.
XMLHttpRequest cannot load http://localhost:8080/api/test. Origin http://localhost:3000 is not allowed by Access-Control-Allow-Origin.
Run Code Online (Sandbox Code Playgroud)
我阅读了有关跨域ajax请求的信息,并了解了基础安全问题.就我而言,2台服务器在本地运行,并且喜欢在测试期间启用跨域请求.
localhost:8080 - Google Appengine dev server
localhost:3000 - Node.js server
Run Code Online (Sandbox Code Playgroud)
我正在localhost:8080 - GAE server从节点服务器加载我的页面时发出一个ajax请求.什么是最简单,最安全的(不想用disable-web-security选项启动chrome ).如果我必须改变'Content-Type',我应该在节点服务器上做吗?怎么样?
我正在设计一个网站(例如mywebsite.com),这个网站从另一个网站(比如anothersite.com)加载font-face字体.我在Firefox中遇到字体字体加载问题,我在这个博客上看到:
Firefox(支持v3.5中的@ font-face)默认情况下不允许跨域字体.这意味着必须从同一域(和子域)提供字体,除非您可以向字体添加"Access-Control-Allow-Origin"标头.
如何将Access-Control-Allow-Origin标头设置为字体?
在我的web.config中,我想为access-control-allow-origin指令指定多个域.我不想用*.我试过这个语法:
<add name="Access-Control-Allow-Origin" value="http://localhost:1506, http://localhost:1502" />
Run Code Online (Sandbox Code Playgroud)
这个
<add name="Access-Control-Allow-Origin" value="http://localhost:1506 http://localhost:1502" />
Run Code Online (Sandbox Code Playgroud)
这个
<add name="Access-Control-Allow-Origin" value="http://localhost:1506; http://localhost:1502" />
Run Code Online (Sandbox Code Playgroud)
还有这个
<add name="Access-Control-Allow-Origin" value="http://localhost:1506" />
<add name="Access-Control-Allow-Origin" value="http://localhost:1502" />
Run Code Online (Sandbox Code Playgroud)
但它们都不起作用.什么是正确的语法?
我试图让在node.js的CORS但问题是,我不能设置*到Access-Control-Allow-Origin,如果Access-Control-Allow-Credentials设置.
另外规范说我不能做一个数组或逗号分隔值,Access-Control-Allow-Origin建议的方法是做类似于这个Access-Control-Allow-Origin多个原始域的东西?
但我似乎无法在node.js中这样做
["http://mydomain.com:9001", "http://mydomain.com:5001"].map(function(domain) {
res.setHeader( "Access-Control-Allow-Origin", domain );
});
res.header( "Access-Control-Allow-Credentials", true );
Run Code Online (Sandbox Code Playgroud)
这里的问题是它被数组中的最后一个值覆盖,因此标题将被设置为 res.setHeader( "Access-Control-Allow-Origin", "http://mydomain.com:5001" );
客户端浏览器出错:
XMLHttpRequest无法加载http://mydomain.com:9090/api/sync."Access-Control-Allow-Origin"标头的值" http://mydomain.com:5001 "不等于提供的原点.因此,不允许来源" http://mydomain.com:9001 "访问.
我正在尝试创建一种在我的网站上使用的字体存储库,这样我就可以在我的css中调用存储库中的任何字体而无需任何其他设置.为此,我创建了一个子域,在该子域中,我为存储库中的每种字体放置了文件夹,其中包含每种字体的各种文件类型.我还在子域的根上放置了一个名为font-face.css的css文件,并用@font-face每个字体的声明填充它,字体与绝对链接链接,以便可以在任何地方使用它们.
我的问题是,我似乎只能使用它们所在的子域上的字体,在我的其他网站上没有显示字体.使用firebug我确定font-face.css文件已成功链接并加载.那么为什么字体没有正确加载?对字体文件有什么保护吗?我正在使用我应该允许执行此操作的所有字体,因此我不明白为什么会发生这种情况.也许它是一个apache问题,但我可以在链接到它时下载字体.
哦,只是为了澄清,我没有通过设置这个版权来侵犯任何版权,我使用的所有字体都被许可允许这种事情.然而,我想设置一种方式,只有我可以访问这个字体存储库,但这是另一个项目.
由于某种原因,字体已停止在我的网站上呈现.字体存储在本地,与站点位于同一服务器上.
我查了一下这个问题似乎是一个Missing Cross-Origin Resource Sharing (CORS) Response Header但是我无法理解这个问题的解决方案.
所有各种网站都说要做的就是使用: Access-Control-Allow-Origin:*
但由于我主要是前端,我不知道该放在哪里.这是我的主人可以帮助的东西吗?
我该怎么做才能解决这个问题?
编辑:
有问题的网站是:http://cyclistinsuranceaustralia.com.au/
例如,右上角的电话号码应为Bebas字体,但默认为Impact.
在控制台中,我得到错误:
来自" http://www.cyclistinsuranceaustralia.com.au "的字体已被跨源资源共享策略阻止加载:"Access-Control-Allow-Origin"标题的值为" http:// www. cyclistinsuranceaustralia.com.au '不等于提供的原产地.因此,不允许来源" http://cyclistinsuranceaustralia.com.au "访问.
我联系我的主持人说:
Access-Control-Allow-Origin "http://www.cyclistinsuranceaustralia.com.au"
Run Code Online (Sandbox Code Playgroud)
在我的.htaccess文件中,但这没有变化.
我想知道来自第三方网站的传入HTTP_REQUEST调用是否来自我定义的域列表.
我知道HTTP_REFERER可以用来找出第三方域的位置,但它不够安全.人们可以欺骗它或使用Telnet伪造它.
那么,HTTP_ORIGIN怎么样?是从所有浏览器发送的吗?它安全吗?
此外,人们可以在HTTP_REQUEST调用中伪造REMOTE_ADDR吗?
这个问题之前已经在这里提出并给出了一系列好的答案,主要是: Access-Control-Allow-Origin多个原始域?
但是,在应该采用的核准方法方面似乎存在着解释上的差距.通过W3文档阅读,我认为这是一种指导冲突.
首先,我们在许多先前的答案中看到了给出答案的正确方法,该答案规定主机服务器必须动态回显给定的"Origin"(如果它出现在预定义的"白名单"上). http://www.w3.org/TR/cors/#resource-implementation
然而,所使用的许多答案和方法也提到了空格分隔列表,该列表也可以用作将多个"起源"传递给允许的方法.如果我们看一下http://www.w3.org/wiki/CORS_Enabled上的另一篇W3文档,我们在页面的第一部分看到了一个例子:
Access-Control-Allow-Origin: http://example.com:8080 http://blah.example.com http://foo.example.com
Run Code Online (Sandbox Code Playgroud)
在这两种方法中,我同样很乐意将其纳入其中,但是可能会有大量的URL需要列入其中,因此我希望确保我第一次正确地执行此操作.如果有人对上述两种方法有任何见解,我将非常感谢您在选择中听到决定,以及是否有可能错过的推荐方法的明确指南.