在我的网站上,我想允许用户使用Google帐户登录.我打算使用openid,但我想允许使用google登录,因为它有更多好处.我曾经注意到一些网站能够使用google(gmail)帐户和IIRC登录,虽然他们不支持openID(但我可能错了).
如何实施"使用谷歌登录"?
我正试图从"远程"网站获取一些json数据.我在99000端口上运行我的Web服务然后,我在99001端口上启动我的网站(http:// localhost:99001/index.html).
我收到以下消息:
XMLHttpRequest cannot load http://localhost:99000/Services.svc/ReturnPersons. Origin http://localhost:99001 is not allowed by Access-Control-Allow-Origin.
Run Code Online (Sandbox Code Playgroud)
即使我将我的网页作为HTML文件启动,我也会这样:
XMLHttpRequest cannot load http://localhost:99000/Services.svc/ReturnPersons.Origin null is not allowed by Access-Control-Allow-Origin.
Run Code Online (Sandbox Code Playgroud)
Web服务返回数据.我尝试捕获这样的数据项:
var url = "http://localhost:99000/Services.svc/ReturnPersons";
$.getJSON(url, function (data) {
success: readData(data)
});
function readData(data) {
alert(data[0].FirstName);
}
Run Code Online (Sandbox Code Playgroud)
而我正试图得到这种结构:
[{"FirstName":"Foo","LastName":"Bar"},{"Hello":"Foo","LastName":"World"}]
Run Code Online (Sandbox Code Playgroud)
你知道我为什么会收到这个错误吗?
出于开发目的,我需要在我的机器上的Safari(在Windows上)禁用同源策略.
在Chrome中,可以通过使用标志启动来完成此操作--disable-web-security.Safari中是否有等效的标志或隐藏设置?
我正在研究一些Javascript在我的电脑上本地运行.我正在使用jQuery CSV插件(http://plugins.jquery.com/project/csv)将csv文件加载到javascript数组中.脚本很简单:
$(function(){
$.get("file.csv", function(data){
stuff = $.csv()(data);
})
})
Run Code Online (Sandbox Code Playgroud)
在Firefox中它工作正常,但在Chrome中它说"Access-Control-Allow-Origin不允许使用Origin null".那是什么意思?我找到了与此错误相关的跨服务器内容的各种线程,但我只是使用本地文件.
如何使用Angular 2创建跨域请求?
你能提供一个例子吗?
就像localhost:3000和localhost:8000跨域之间的请求一样
我正在SimpleHTTPServer测试一些我正在研究的网页.它工作得很好,但我需要做一些跨域请求.这需要设置Access-Control-Allow-Origin允许页面访问的域的标头.
有一种简单的方法可以使用SimpleHTTPServer设置标头并提供原始内容吗?每个请求的标头都是相同的.
首先,让我使用此图解释如何实现异步文件上传:
抱歉.我关闭了我的一个域名,图像现在已经消失了.这是一个非常好的形象.这是在我发现Stack Overflow允许通过Imgur上传图像之前.
正如您所看到的,诀窍是让HTTP响应加载到隐藏的IFRAME元素而不是页面本身.(这是通过target在使用JavaScript提交FORM时设置FORM元素的属性来完成的.)
这有效.但是,我面临的问题是服务器端脚本位于不同的域上.FORM-submit是一个跨域HTTP请求.现在,服务器端脚本启用了CORS,这使我的网页有权读取从我的页面到该脚本发出的HTTP请求的响应数据 - 但这只有在我通过Ajax接收HTTP响应时才有效, ergo,JavaScript.
但是,在这种情况下,响应指向IFRAME元素.一旦XML响应进入IFRAME,其URL将是删除脚本 - 例如http://remote-domain.com/script.pl.
不幸的是,CORS没有涵盖这种情况(至少我认为) - 我无法读取IFRAME的内容,因为它的URL与页面的URL(不同的域)不匹配.我收到此错误:
不安全的JavaScript尝试使用URL hxxp://my-domain.com/outer.html从具有URL hxxp://remote-domain.com/script.pl的框架访问框架.域,协议和端口必须匹配.
由于IFRAME的内容是一个XML文档,因此IFRAME中没有可以使用的JavaScript代码postMessage.
所以我的问题是:如何从IFRAME获取XML内容?
正如我上面所说,我能够直接检索跨域HTTP响应(启用CORS),但似乎我无法在加载到IFRAME后读取跨域HTTP响应.
好像这个问题不够无法解决,让我排除这些解决方案:
easyXDM和类似技术需要远程域上的端点,
改变XML响应(包括SCRIPT元素),
服务器端代理 - 我知道我的域可以有一个服务器端脚本,可以作为代理.
那么,除了这两个解决方案,这可以做到吗?
事实证明,可以伪造一个模仿multipart/form-dataFORM提交的XHR请求(Ajax请求)(在上面的图像中用于将文件上传到服务器).
诀窍是使用FormData构造函数 - 阅读此Mozilla Hacks文章以获取更多信息.
这是你如何做到的:
// STEP 1
// retrieve a reference to the file
// <input type="file"> elements have a "files" property
var file = input.files[0];
// STEP 2
// …Run Code Online (Sandbox Code Playgroud) 在http://www.a.com/service.asmx上创建Web服务,并从http://www.b.com向其发送跨域ajax请求.检查Firebug中的标头,或Live HTTP标头或您希望的任何其他插件.
请求标头中没有X-Requested-With HTTP标头字段的跟踪.
但是,如果您从同一域(例如http://www.a.com/about)向同一服务发送ajax请求,您将看到该头字段.
为什么跨域ajax请求省略了X-Requested-With头字段?
更新:我知道JSONP调用本质上不是AJAX调用.因此,在JSONP调用中,您将看不到任何X-Requested-With标头字段.
我试图用jQuery访问谷歌文档.这是我到目前为止所拥有的:
var token = "my-auth-token";
$.ajax({
url: "http://docs.google.com/feeds/documents/private/full?max-results=1&alt=json",
dataType: 'jsonp',
beforeSend: function(xhr) {
xhr.setRequestHeader("Authorization", "GoogleLogin auth=" + token);
},
success: function(data, textStatus, XMLHttpRequest) {
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
}
});
Run Code Online (Sandbox Code Playgroud)
如果我设置dataType为jsonp(来自使用jQuery创建跨域Ajax请求),它不允许我设置标头.如果我遗漏jsonp,我无法提出跨域请求.如果我使用jQuery.getJSON,我不能传入任何标题...
在制作跨域ajax请求时(在jQuery中)有没有办法定义自定义标头?
在chrome 22&safari 6中.
使用支持CORS的S3存储桶从s3加载图像以在画布中使用(以提取为主要目的),具有以下代码:
<!-- In the html -->
<img src="http://s3....../bob.jpg" />
// In the javascript, executed after the dom is rendered
this.img = new Image();
this.img.crossOrigin = 'anonymous';
this.img.src = "http://s3....../bob.jpg";
Run Code Online (Sandbox Code Playgroud)
我观察到以下情况:
然后在启用缓存的情况下尝试:
如果我修改代码的javascript部分以附加查询字符串,如下所示:
this.img = new Image();
this.img.crossOrigin = 'anonymous';
this.img.src = "http://s3....../bob.jpg?_";
Run Code Online (Sandbox Code Playgroud)
一切正常,即使完全启用了缓存.我通过使用http代理继续进行缓存是一个问题,并观察到在失败的情况下,实际上没有从服务器请求图像.
我不得不得出的结论是,图像缓存正在保存原始请求头,然后将其用于后续启用CORS的请求 - 并且由于违反相同的源策略而生成安全性异常.
这是预期的行为吗?
编辑:在Firefox中工作.
Edit2:关于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>
</CORSRule>
</CORSConfiguration>
Run Code Online (Sandbox Code Playgroud)
我正在使用大开放,因为我现在只是从我当地的盒子进行测试.这还没有投入生产.
Edit3:更新了cors策略以指定原点
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>http://localhost:5000</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
</CORSRule>
</CORSConfiguration>
Run Code Online (Sandbox Code Playgroud)
已验证的传出标题
Origin …Run Code Online (Sandbox Code Playgroud) cross-domain ×10
cors ×3
javascript ×3
ajax ×2
jquery ×2
amazon-s3 ×1
angular ×1
canvas ×1
file-upload ×1
gmail ×1
google-oauth ×1
header ×1
html ×1
html5 ×1
http ×1
http-headers ×1
iframe ×1
json ×1
login ×1
openid ×1
python ×1
safari ×1