先说下自己的情况,使用CDN子域加速静态资源,images+css+js

环境是:nginx+php-fpm+M2.0.6+ssl

由于chrome及firefox对跨站攻击的重视,让这些高级浏览器都默认设置了一些防御机制。

导致我使用子域名cdn来加速js的时候,产生了一些浏览器错误。导致资源加载不成功,从而影响访问及使用.

1,由于使用了ssl,也就是https之后,如果页面内有http的资源,浏览器不会加载该资源。

错误提示类似于:

Mixed Content: The page at 'https://www.magentochina.org/bbs/forum.php?mod=viewthread&tid=4746&extra=page%3D1' was loaded over HTTPS, but requested an insecure script 'http://tcss.qq.com/ping.js?v=1VERHASH'. This request has been blocked; the content must be served over HTTPS.

解决办法就是把该资源改为https即可。

2.由于magento默认的nginx配置了X-Frame-Options头为SAMEORIGIN,导致子域资源加载报错。

Magento2的X-Frame-Options头为SAMEORIGIN防止该网站页面被其他网站嵌套,但是使用cdn子域名的时候,会导致后台某些需要iframe框架的时候报错,从而不能使用。

X-Frame-Options 有三个值:

DENY
表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。
SAMEORIGIN
表示该页面可以在相同域名页面的 frame 中展示。
ALLOW-FROM uri
表示该页面可以在指定来源的 frame 中展示。
换一句话说,如果设置为 DENY,不光在别人的网站 frame 嵌入时会无法加载,在同域名页面中同样会无法加载。另一方面,如果设置为 SAMEORIGIN,那么页面就可以在同域名页面的 frame 中嵌套。

修改X-Frame-Options响应头,如果你是nginx只需要修改nginx的conf文件:

add_header X-Frame-Options SAMEORIGIN;
如果你的webserver是apache,修改magento2的.htaccess文件即可。

修改了上面的服务器配置之后,你会发现页面的X-Frame-Options头依然没有变,这时候就需要php文件了。搜索一下SAMEORIGIN,修改掉即可。

如果做了这些改动,你后台的tiny mce依然不能使用,这个时候请修改:

static/adminhtml/Magento/backend/en_US/tiny_mce/tiny_mce_popup.js


3.ajax跨域访问。

浏览器提示错误:

XMLHttpRequest cannot load https://www.magentochina.org/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://cdn.magentochina.org' is therefore not allowed access. 

解决办法:

如果是nginx配置:

add_header Access-Control-Allow-Origin "*";

即可.