我很想在CDN a static.mydomain.com上存储一些.json文件。真相被告知,static.mydomain.com是Amazon S3存储桶前面的CNAME。有没有什么办法从子域加载json?
我知道这违反了JavaScript安全模型。有没有建议的解决方法或设计?我已经看到服务器端的东西建议像PHP脚本通过cURL或file_gets_contents()吸取数据,但这是一个非常蹩脚的方法。有没有办法从外部服务器加载JSON而不太冒昧?
===
更新:这是想法,导致我相信它是子域名跨域问题的线路。
当我在Chrome中访问一个页面(例如static.mydomain.com/json/file.json)时,它会以明文形式显示。当我访问Firefox中的页面时,它试图让我保存.json作为下载。
我在Firebug中看到了一个特殊的结果:A 200响应没有响应主体。
我无法通过浏览器登录直接标题;我的Firefox HTTP头插件在强制下载之前不记录任何内容。但是在这里都可以通过这个jQuery SNIPPIT加载时的标题(值得注意的是,该警报低于不火):
jQuery.get("https://static.mydomain.com/json/file.json",
function(data){
alert("Data: " + data);
}
);
响应头
x-amz-id-2 wSVtjlvFj5ffOtg7ZbKqKw8PexqlzJic7+PxSk975/FcDUnshSV2CiUP2oPWR8yK
x-amz-request-id 8AD81565A783988D
Date Tue, 19 Oct 2010 00:07:22 GMT
Expires Sat, 17 Oct 2015 22:25:37 GMT
Last-Modified Mon, 18 Oct 2010 01:08:13 GMT
Etag "2f1c7adcc1a7b0fd8fc8ce1478e0bf81"
Content-Type application/json
Content-Length 85966
Server AmazonS3
请求头
Host static.mydomain.com
User-Agent Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8
Accept application/json, text/javascript, */*; q=0.01
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive 115
Connection keep-alive
Referer http://mydomain.com/directory/referrer.html
Origin http://mydomain.com
虽然标题似乎对我来说很好,没有响应主体要么获取,发布,或我可以扔在这个通过jQuery的任何东西。将内容类型设置为application/json,text/javascript和text/plain时,我会看到相同的结果。
任何人都可以解释这种行为吗?我想我一定在S3方面做错了什么,但是它可能是JavaScript中的跨域问题,还是我可以排除跨域问题?
什么域名确实是你的应用程序提供服务? – 2010-10-19 02:01:49
我一直认为子域名可以。真正重要的唯一事情就是whatever.com。你甚至尝试过吗? – Gregg 2010-10-19 02:06:27
理想情况下,它将从www.mydomain.com或mydomain.com提供,并且能够从static.mydomain.com中提取静态.json数据。 – buley 2010-10-19 02:06:40