我创建了一个用于提供静态文件(CSS,图像,字体和JS等)的文件夹。我最终会将该文件夹CNAME到一个子域中,以便在CDN上使用我的Magento 2设置。
我想允许所有域通过CORS进行所有访问 - 跨源策略,我也想缓存数据。这就是我所拥有的。 (我不是要求有关JSONP问题的安全建议或提示 - 我希望全局访问文件目录)
location /cdn-directory/ {
location ~* \.(ico|jpg|jpeg|png|gif|svg|js|css|swf|eot|ttf|otf|woff|woff2|zip|gz|gzip|bz2|csv|xml)$ {
add_header Cache-Control "public";
add_header X-Frame-Options "ALLOW-FROM *";
expires +1y;
}
}
根据documentation,X-Frame-Options
支持ALLOW-FROM uri
,但无法看到使用*
(所有域名)或在此ALLOW-FROM
中添加某些多个域的示例。我需要允许所有域访问我的静态文件文件夹。
答案 0 :(得分:4)
允许所有域嵌入资源(例如,在iframe
等之内)是默认值,因此不需要额外的标头。
X-Frame-Options
HTTP响应标头的唯一目的是防止外部网站将交互式资源嵌入iframe
,因此如果您的意图是ALLOW-FROM *
(确实不应该是一个有效的指令,如上所述),那么你应该完全省略整个标题,任何人都可以随心所欲地从任何域获得对你的静态资源的访问权。
答案 1 :(得分:3)
我没有尝试过我的nginx,但允许当前请求的来源在tomcat中运行:
add_header X-Frame-Options "ALLOW-FROM $http_origin";
答案 2 :(得分:3)
假设您实际上想要CORS(跨源请求共享)而不是仅仅嵌入iframe,配置将是:
location /cdn-directory/ {
location ~* \.(js|css|swf|eot|ttf|otf|woff|woff2)$ {
add_header Cache-Control "public";
add_header Access-Control-Allow-Origin: *
expires +1y;
}
}
答案 3 :(得分:3)
location /cdn-directory/ {
location ~* \.(js|css|swf|eot|ttf|otf|woff|woff2)$ {
add_header 'Cache-Control' 'public';
add_header 'X-Frame-Options' 'ALLOW-FROM *';
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
expires +1y;
}
}
答案 4 :(得分:0)
它可能有点过分,但我在CORS的Magento 1.8.x安装上使用了以下标题:
add_header 'Access-Control-Allow-Origin' "*";
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, DELETE, PUT';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Headers' 'User-Agent,Keep-Alive,Content-Type';