Did*_*ier 5 javascript css security cross-domain
我想将我的网站分散到不同的服务器上,并为此目的使用子域。
xttp://site.com将提供主要的php文件xttp://static.site.com将提供css和js xttp://content.site.com将提供图像等
(xttp可以防止stackoverflow表单认为它是url)
对于为什么,请阅读以下内容。
但是,当我尝试通过javascript访问任何CSS规则时遇到问题。准确地说是NS_ERROR_DOM_SECURITY_ERR。这是一种相对较新的安全措施,与防止跨域脚本编写有关。
过去,有解决此问题的措施,包括仅关闭此保护。这不再起作用。
我的问题:
无论如何,如果它来自其他域而不是主页,则可以通过javascript访问正常加载的CSS规则?
JavaScript:
MUI.getCSSRule=function(selector){
for(var ii=0;ii<document.styleSheets.length;ii++){
var mysheet=document.styleSheets[ii];
var myrules=mysheet.cssRules?mysheet.cssRules:mysheet.rules;
for(i=0;i<myrules.length;i++){
if(myrules[i].selectorText==selector){
return myrules[i]
}
}
}
return false
};
Run Code Online (Sandbox Code Playgroud)
用绝对路径从html加载javascript和css
并且网站网址是“ http://site.com”
这两个域都完全在我的控制之下,但是它们是独立的机器(暂时是虚拟的,但即使有可能,在生产中它们甚至可能不在同一位置)
改写问题:
为什么?因此,我可以轻松地使用具有各自配置,针对其任务进行了优化的不同服务器。一台用于php的快速机器,一台用于静态内容的简单机器,一台用于内容的大型机器。
为什么?费用。静态服务器通常很少需要安全性来防止任何人下载文件。它的内容很少,因此不需要昂贵的阵列。只需将其加载到内存中并从那里进行服务即可。也可以限制内存本身,请尝试一下。至少就我而言,PHP服务器通常将需要大量内存,冗余存储和大量日志记录。内容服务器将需要大量的存储和大量的带宽,但是在CPU能力方面却相对较少。每种硬件/主机要求不同。微调每个参数不仅可以提供更好的性能,而且还可以降低托管成本,对我而言,至少这仍然是运行网站的最大成本之一。
CORS(跨域资源共享)是一种允许站点选择跨域访问资源的标准。我不知道 Firefox 是否将其应用到 CSS 上;我知道它适用于 XMLHttpRequest,并且旨在适用于大多数其他跨域请求限制,但我还没有在您的精确用例中测试它。
您可以将以下标头添加到响应中static.site.com,以允许您的主页访问从那里提供的资源内容:
Access-Control-Allow-Origin: http://site.com
Run Code Online (Sandbox Code Playgroud)
或者甚至,如果您不认为您的任何内容属于static.site.com敏感内容:
Access-Control-Allow-Origin: *
Run Code Online (Sandbox Code Playgroud)
Mozilla 开发者网络上提供了更多信息。