我很想在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