2012-01-30 39 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这样的插件,这些插件会在发生更改时进行编译。