显然,我完全误解了它的语义.我想到了这样的事情:
好吧,我错了.它根本不起作用.所以,我已经阅读了跨源资源共享,并尝试在w3c推荐中阅读跨源资源共享
有一件事是肯定的 - 我仍然不明白我应该如何使用这个标题.
我完全控制了站点A和站点B.如何启用从站点A下载的javascript代码以使用此标头访问站点B上的资源?
PS
我不想使用JSONP.
有没有办法允许多个跨域使用Access-Control-Allow-Origin标头?
我知道了*,但它太开放了.我真的想只允许一些域名.
举个例子,像这样:
Access-Control-Allow-Origin: http://domain1.example, http://domain2.example
Run Code Online (Sandbox Code Playgroud)
我已经尝试过上面的代码,但它似乎不适用于Firefox.
是否可以指定多个域,或者我只坚持一个?
我正在尝试为所有子域,端口和协议启用CORS.
例如,我希望能够从http://sub.mywebsite.com:8080/运行XHR请求到https://www.mywebsite.com/*
通常情况下,我想启用匹配(并限于)的来源请求:
//*.mywebsite.com:*/*
虽然已经通过API网关设置了CORS并且设置了Access-Control-Allow-Origin标头,但在尝试从Chrome中的AJAX调用API时仍然会收到以下错误:
XMLHttpRequest无法加载http://XXXXX.execute-api.us-west-2.amazonaws.com/beta/YYYYY.请求的资源上不存在"Access-Control-Allow-Origin"标头.因此不允许原点'null'访问.响应具有HTTP状态代码403.
我试图通过Postman获取URL ,它显示上面的标题已成功通过:
并从OPTIONS响应:
如何在不恢复JSON-P的情况下从浏览器调用我的API?
我正在尝试使用jquery创建一个交叉原始请求,但它一直被消息拒绝
XMLHttpRequest无法加载http:// ...请求的资源上不存在"Access-Control-Allow-Origin"标头.原因......因此不允许访问.
我正在使用flask,heroku和jquery
客户端代码如下所示:
$(document).ready(function() {
$('#submit_contact').click(function(e){
e.preventDefault();
$.ajax({
type: 'POST',
url: 'http://...',
// data: [
// { name: "name", value: $('name').val()},
// { name: "email", value: $('email').val() },
// { name: "phone", value: $('phone').val()},
// { name: "description", value: $('desc').val()}
//
// ],
data:"name=3&email=3&phone=3&description=3",
crossDomain:true,
success: function(msg) {
alert(msg);
}
});
});
});
Run Code Online (Sandbox Code Playgroud)
在heroku方面,我正在使用烧瓶,就像这样
from flask import Flask,request
from flask.ext.mandrill import Mandrill
try:
from flask.ext.cors import CORS # The typical way to import flask-cors
except ImportError:
# Path …Run Code Online (Sandbox Code Playgroud) 我无法强迫S3在从桶返回的所有对象上设置CORS头,虽然启用了CORS,因为客户端S3上传工作正常,返回的对象没有CORS头!
我启用的政策是:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Run Code Online (Sandbox Code Playgroud)
示例对象URL https://s3.amazonaws.com/captionable/meme/test
有谁知道什么是错的?
我在多个子域(example.com,blog.example.com和app.example.com)上有一个通用的身份验证表单.登录表单必须将此数据提交给example.com而不管它在何处显示,所以我想到了使用CORS,但是这个:
header("Access-Control-Allow-Origin: http://example.com http://blog.example.com http://app.example.com")
Run Code Online (Sandbox Code Playgroud)
所以我想做下一件事,并在服务器端手动检查Origin标头,并允许Access-Control-Allow-Origin: *可以进行请求,但不幸的是,这在MDN中出现了
重要说明:在响应凭证请求时,服务器必须指定域,并且不能使用通配符.
有没有办法让我的请求跨多个域工作,仍然使用CORS发送凭据?
我正在使用凭据和预检请求实现CORS,我有点不知道为什么预检请求在Firefox 30中始终失败但在Safari(7.0.2)和Chrome 35中有效.我认为这个问题与" 为什么会这样做有所不同" 经过身份验证的CORS请求的预检OPTIONS请求在Chrome中运行但不在Firefox中运行? "因为我没有收到401,而是来自浏览器客户端的特定于CORS的消息:
"跨源请求被阻止:同源策略不允许在http://myurl.dev.com上读取远程资源.这可以通过将资源移动到同一域或启用CORS来解决."
没有显示源代码,这就是我正在做的事情:
在服务器上:
OPTIONS响应的标题:
POST响应的标题:
在浏览器客户端中:
jQuery.ajax({
url: requestUrl,
type: 'POST',
data: getData(),
xhrFields: {
withCredentials: true
}
});
Run Code Online (Sandbox Code Playgroud)
根据规范,这将触发OPTIONS预检请求,该请求需要在其响应中具有CORS头.我已经多次阅读过W3C规范了,在预检响应中我无法确定我做错了什么,如果有的话.
我知道有很多关于CORS的问题,但它们似乎没有回答我的问题.
所以我有一个用Angular编写的客户端应用程序,用于创建移动应用程序(使用Apache Cordova).将从移动设备加载html文件和JavaScript文件.当我模拟这个并且我向REST API服务器发送请求时,我首先得到"No'Access-Control-Allow-Origin'标头出现在所请求的资源上.http://localhost:82因此不允许来源".所以我添加了标题("Access-Control-Allow-Origin:*"); 在我的PHP REST API服务器中.我无法指定特定域,因为请求将来自移动设备.
现在,当凭证标志为真时,我不能在'Access-Control-Allow-Origin'标题中使用"通配符'*'."
我终于找到了一个解决方案,但我不确定这样做是否安全.
在我的PHP REST API服务器中,我添加了这个:
if (isset($_SERVER['HTTP_ORIGIN'])) {
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Origin: " . $_SERVER['HTTP_ORIGIN']);
header("Access-Control-Allow-Headers: *, X-Requested-With, Content-Type");
header("Access-Control-Allow-Methods: GET, POST, DELETE, PUT");
}
Run Code Online (Sandbox Code Playgroud)
请告知这种工作方式.如果它不安全或根本没有好处,请告诉我如何解决这个问题?
非常感谢!
如何设置S3 CORS AllowedOrigin配置,使其动态回显Access-Control-Allow-Origin标头中的请求域?
在帖子"CORS with CloudFront,S3和Multiple Domains"中,建议设置AllowedOrigin为<AllowedOrigin>*</AllowedOrigin>执行此操作.但是,S3会返回Access-Control-Allow-Origin: *.
Access-Control-Allow-Origin: *在我的情况下不起作用,因为我image.crossOrigin = "use-credentials"在JavaScript应用程序中使用.使用此选项,S3返回Access-Control-Allow-Credentials: true.然后对图像的跨源访问失败,因为不允许使用通配符作为允许的来源与凭证一起使用.
为什么需要这样的背景:
在我的设置中,对S3上的图像的访问必须通过我们的域,其中需要验证以限制访问并检查帐户是否被授权访问图像.如果是,则服务器返回302重定向到S3 URL.
要使身份验证生效,image.crossOrigin = "use-credentials"必须进行设置,以便请求使用所需的凭据访问我的服务器.(顺便提一下,当我在Firefox 30.0和Chrome 35.0.1916.153上进行测试时,如果crossOrigin设置为anonymous,则仍然会发送凭据.但是不能在Safari 7.0.4上进行.只能使用use-credentials.获得一致的跨浏览器行为.).
由于浏览器透明地重定向到S3 URL,因此也会发送凭据.