2012-01-30 30 views
6
<link rel="stylesheet/less" href="http://mycdn.s3.amazon.com/css/web/style.less"> 
<script src="http://mycdn.s3.amazon.com/css/less-1.1.5.min.js"></script> 

當我把我的.LESS文件在我的CDN,它說:Less.js不適用於CDN?

的XMLHttpRequest無法加載 http://mycdn.s3.amazonaws.com/media/css/bootstrap/lib/bootstrap.less。 來源http://mydomain.com不允許通過 訪問控制允許來源。

爲什麼?我該如何解決?我不想在服務器端編譯.css文件。我想保留他們的客戶端。

+0

可能的重複http://stackoverflow.com/questions/8176913/xmlhttprequest-origin-is-not-allowed-by-access-control-allow-origin – 2012-01-30 08:44:49

+1

對於任何其他人在這裏注意到:我已經在我的虛擬主機的網絡服務器上得到了同樣的錯誤。這是錯誤地發送空的答覆,因爲'.less'文件/ MIME類型是未知的。配置Web服務器以正確提供.less文件修復它。 (這不是一個跨域請求,所有'.js' /'.less'文件都來自同一個文件夾。) – 2012-06-24 19:44:31

回答

4

這從MDN相當長的文章將幫助你瞭解這是怎麼回事 - https://developer.mozilla.org/En/HTTP_access_control

基本上你已經運行到跨域安全模型

如果你堅持認爲你不想要在服務器上編譯CSS,你可以嘗試從你自己的子域服務,即將子域映射到Amazon CDN,但我不確定這會解決你的問題。

我真的質疑爲什麼你不想編譯.CSS服務器端,因爲這樣會爲你的訪問者帶來最好的性能,並且使你能夠輕鬆地在CDN上託管CSS。

在HTML之後,CSS是進入瀏覽器的下一個最重要的項目,因此它可以開始頁面的佈局和呈現,通過將JS插入到組合中,您可以放慢速度(特別是JS可以阻止並行下載在一些瀏覽器中,並將在執行時阻止UI線程)

+1

預編譯CSS的另一個原因:用戶可能禁用了JavaScript(http:// noscript 。淨)。因此,LESS CSS不會被解析。 – 2012-01-30 16:41:54

+0

您是否認爲Amazon CDN的子域可以解決問題? – TIMEX 2012-02-04 08:53:00

+1

您可以嘗試添加以下HTTP標頭'Access-Control-Allow-Origin:http:// mycdn.s3.amazon.com' – 2012-02-10 11:53:48

0

如果您想修復跨域訪問,那麼您需要查看跨源資源共享(http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing),但這隻能由現代瀏覽器或JSONP支持,但我認爲這對您的CDN是不可能的。

我必須同意@Andy Davies,你爲什麼不編譯.less,因爲這會解決這個問題?這是由於文件大小被傳遞或者你不能編譯.less當你推動文件生活?在Visual Studio中,您可以使用像http://www.mindscapehq.com/products/web-workbench這樣的插件,這些插件會在發生更改時進行編譯。