在阅读了CORS(跨源资源共享)之后,我不明白它是如何提高安全性的.如果发送了正确的ORIGIN标头,则允许跨域AJAX通信.举个例子,如果我发送
服务器检查此域是否在白名单中,如果是,则标头:
Access-Control-Allow-Origin:[收到此处的网址]
被送回,连同响应(这是简单的情况,也有预见的请求,但问题是一样的).
这真的很安全吗?如果有人想要收到这些信息,假冒ORIGIN标题似乎是一项非常简单的任务.此外,该标准表示该策略在浏览器中强制执行,如果Access-Control-Allow-Origin不正确,则阻止响应.显然,如果有人试图获取该信息,他将不会使用标准浏览器来阻止它.
XMLHttpRequest cannot load http://mywebservice. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:9000' is therefore not allowed access.
Run Code Online (Sandbox Code Playgroud)
当我尝试从我的代码中运行我的Web服务时,我收到此错误.我试着找到它并尝试了许多我在网上找到的解决方案.粘贴下面的代码.
<form name="LoginForm" ng-controller="LoginCtrl" ng-submit="init(username,password,country)">
<label>Country</label><input type="text" ng-model="country"/><br/><br/>
<label>UserName</label><input type="text" ng-model="username" /></br></br>
<label>Password</label><input type="password" ng-model="password">
</br>
<button type="submit" >Login</button>
</form>
Run Code Online (Sandbox Code Playgroud)
而控制器形成相应的js是:
app.controller('LoginController', ['$http', '$scope', function ($scope, $http) {
$scope.login = function (credentials) {
$http.get('http://mywebservice').success(function ( data ) {
alert(data);
});
}
}]);
Run Code Online (Sandbox Code Playgroud)
当我从URL栏点击它时,网络服务工作正常.如何解决问题?请帮忙!
我正在开发一个JSON/REST Web API,我特别希望第三方网站能够通过AJAX调用我的服务.因此,我的服务是发送着名的CORS标题:
Access-Control-Allow-Origin: *
Run Code Online (Sandbox Code Playgroud)
这允许第三方站点通过AJAX调用我的服务.到目前为止都很好.
但是,我的web api的一个子部分是非公开的,需要身份验证(OAuth和access_token cookie非常标准).在我的网站的这一部分启用CORS是否安全?
一方面,如果第三方网站可以拥有也与我的这部分服务进行交互的ajax客户端,那将会很酷.但是,首先存在相同原产地政策的原因是这可能存在风险.您不希望之后访问的任何网站能够访问您的私人内容.
我担心的情况是用户登录我的网络API,无论是在网站上还是通过他信任的网站,他忘记退出.这会允许他之后使用现有会话访问其私人内容吗?
所以我的问题:
我现在正遇到一个奇怪的CORS问题.
这是错误消息:
XMLHttpRequest cannot load http://localhost:8666/routeREST/select?q=[...]
Origin http://localhost:8080 is not allowed by Access-Control-Allow-Origin
Run Code Online (Sandbox Code Playgroud)
两台服务器:
有什么想法可能是什么问题?
编辑:
而且...端口是问题所在.谢谢你的回答:)
如果有人也使用Python瓶服务器,你可以按照这篇文章给出的答案来解决CORS问题: Bottle Py:为jQuery AJAX请求启用CORS
我开发了一组宁静的Web服务.由于错误,我无法从远程客户端调用任何这些方法
No 'Access-Control-Allow-Origin' header is present on the requested resource.
这些服务在localhost上完美运行.是否有任何更改或配置要在服务器端解决此问题.即启用跨域请求.
我正在使用WildFly 8,JavaEE 7
我们有一个网站(www.example.com)将用户发送到一系列第三方网页,以验证我们在iframe中执行的付款详细信息.最初,来自www.example.com的本地页面加载到iframe中,并且用户被重定向到第三方URL.一旦用户完成第三方步骤,他们就会被重定向回iframe中我们网站(www.example.com)上的页面.
这适用于我们测试的所有浏览器,除了IE 11,我们的cookie似乎丢失了.我们已经在桌面和"Metro"模式下在Windows 7和8.1下进行了检查,问题出在所有版本中.
当用户浏览我们的网站时,我们设置了一个会话cookie,该cookie正确地发送到最初在iframe中加载的第一方页面.但是,一旦用户浏览了此iframe中的某些第三方网页,会话Cookie就不会与下一个请求一起发送.
如果我们将IE 11的隐私设置设置为最低值,则此问题将消失,并且按预期工作.
到目前为止,我出现的所有潜在解决方案都与P3P标头有关.我们有一个有效且正确的P3P标头和XML策略文件设置,这个问题只发生在IE 11中.
更新:我们使用JS设置了一些其他cookie.这些都像预期的那样持续存在.差异是到期日期(JS cookie为1年,会话cookie为1个月),域(JS cookie明确为"example.com",会话cookie为空)以及它们是否为"仅HTTP"(JS为false) cookies,适用于会话cookie).
我已经尝试根据会话cookie的JS cookie设置所有这些选项,但它没有任何区别.
更新2:经过更多测试后,我无法创建重新创建此问题的测试用例.我尝试在实时代码中测试的任何其他cookie似乎也会被破坏,即使它们设置的代码与JS cookie完全相同.简而言之; 我还没有找到任何有用的cookie和有效的cookie.
一个可能有趣的事情是,cookie没有被删除,它们只是没有被发送到最终请求.如果加载了另一个页面,cookie会神奇地重新出现并被发送; 这让我相信这是一个围绕iframe和P3P的错误.
更新3(第3天): IE 11对cookie的处理继续让我感到困惑.我进入微软的迷宫越远,我就越失去其变幻的墙壁.这里有幽灵.半梦的安全政策的片段,它们已经融入了一些空灵的生物,它在每一个动作中追踪和嘲弄我.起初,我被冻结,惊恐,惊恐地看着刚刚看不见的几乎不可思议的形状,但是每过一个小时,我就会从仅靠近处的知识中获得更多的安慰.这可能是我被派到这里面对的野兽吗?在这种时候我怎么能杀死我唯一的伴侣?
这真让我抓狂.
只是在IE9上测试一个网站,发现'live'版本正在渲染一个我使用的小字体,而不是开发版本.
以下是一系列屏幕抓取:

我正在使用Font Squirrel @ font-face工具包.正如您所看到的,在查看本地版本的网站时,Firefox,Chrome甚至IE9都可以.
本地版本和实时版本之间的唯一区别是该字体是从实际站点上的不同域加载的(我已正确设置了跨域策略,如其在Firefox和Chrome上运行的事实所示).
我不记得它在IE8中的样子(微软,再次,没有想到开发人员,已经在IE8的顶部安装了IE9而无法同时运行它们)
该网站位于http://enplanner.com,因此您可以查看来源.
任何有关这方面的帮助将非常感激 - 谢谢你提前.
编辑:我已经删除了IE9并发现它在本地和IE8中看起来完全相同.看来IE8有一个优秀的渲染引擎,比IE9更接近FF/Chrome.这是一个令人沮丧的发现.
我正在使用跨域请求$.ajax.它适用于Firefox和Chrome,但不会在IE 7或8上发出呼叫.任何人都可以告诉我以下内容有什么问题吗?
Allow-access-control-origin在我的网站上使用标题了.(没有这些,Chrome和Firefox没有成功请求.)$.ajax({
type: 'GET',
url: "http://anotherdomain.com/Service/GetControl?id=" + zoneID,
cache: false,
contentType: "application/x-www-form-urlencoded",
async: false,
beforeSend: function (request) {
//alert('before send');
//request.setRequestHeader("X-Requested-With", "XMLHttpRequest");
//request.setRequestHeader("X-PINGOTHER", "pingpong");
} ,
success: function (data, status) {
//alert("Data returned :" + data);
//alert("Status :" + status);
if (status == "success" && data != "")
$("#" + div.id).append(data);
else
$("#" + div.id).attr("style", "display:none;");
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(textStatus);
alert(errorThrown);
}
});
Run Code Online (Sandbox Code Playgroud)
我尝试了多个网站上的各种提示,但还没有运气.
Evernote的书签能够做到这一点,因此即使赏金将以非生产性的方式进行,最受欢迎的答案也不会回答这个问题.
我必须从域B.com调用域A.com(使用http设置cookie).我在域名B.com上所做的就是(javascript):
var head = document.getElementsByTagName("head")[0];
var script = document.createElement("script");
script.src = "A.com/setCookie?cache=1231213123";
head.appendChild(script);
Run Code Online (Sandbox Code Playgroud)
这会在我测试的每个浏览器上设置A.com上的cookie,但Safari除外.令人惊讶的是,即使没有P3P标头,这也适用于IE6.
有没有办法在Safari中使这项工作?
似乎已经在stackoverflow上讨论了类似的东西,但我找不到完全相同的东西.
我正在尝试使用CORS(跨源资源共享)发送Cookie,但它无法正常工作.
这是我的代码.
$.ajax(
{
type: "POST",
url: "http://example.com/api/getlist.json",
dataType: 'json',
xhrFields: {
withCredentials: true
},
crossDomain: true,
beforeSend: function(xhr) {
xhr.setRequestHeader("Cookie", "session=xxxyyyzzz");
},
success: function(){
alert('success');
},
error: function (xhr) {
alert(xhr.responseText);
}
}
);
Run Code Online (Sandbox Code Playgroud)
我没有在请求HEADER中看到这个cookie.
cross-domain ×10
ajax ×5
cors ×5
javascript ×4
cookies ×3
jquery ×2
security ×2
angularjs ×1
cross-site ×1
iframe ×1
java-ee-7 ×1
jax-rs ×1
python ×1
safari ×1
web-services ×1
webfonts ×1
wildfly-8 ×1