【问题标题】:Refused to execute script because strict MIME type checking is enabled拒绝执行脚本,因为启用了严格的 MIME 类型检查
【发布时间】:2018-07-15 12:55:49
【问题描述】:

我已经通过另一个域名 (www.bbb.com) 为 Web 服务 (www.aaa.com) 设置了 NGINX 反向代理,同时向后者添加了一些额外的页面。

请求来自www.bbb.com(nodejs 应用程序),但它们需要看起来像是来自www.aaa.com,否则我将遇到 CORS(跨源资源共享)问题。因此 NGINX 会调整标头。

NGINX 配置

worker_processes 1;
events {
    worker_connections 1024;
}
http {
    include mime.types;
    include servers/*;
    default_type application/octet-stream;
    sendfile on;
    keepalive_timeout 65;

    server {
        listen 443 ssl;
        server_name www.bbb.com;
        ssl_certificate /etc/pki/nginx/server.crt;
        ssl_certificate_key /etc/pki/nginx/private/server.key;
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout 5m;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;

        location / {
            proxy_set_header X-Real-IP 127.0.0.1;
            proxy_set_header Host www.aaa.com;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_pass https://www.aaa.com;
            proxy_http_version 1.1;
        }
    }
}

看起来其中一个资源没有通过反向代理获得正确的 MIME 类型 https://www.aaa.com/scripts/some.script.api.js

错误

拒绝执行来自 'https://www.bbb.com/scripts/some.script.api.js' 的脚本,因为它的 MIME 类型 ('text/html') 不可执行,并且启用了严格的 MIME 类型检查。

text/html 确实不正确,我期待application/javascript

1.为什么会这样? 我认为 MIME 类型只是自动设置的?难道是 www.aaa.com 实施了一些新的 CORS 安全规则?

2。有没有办法告诉 NGINX 为该特定文件设置正确的 MIME 类型?我尝试了一些方法无济于事。

例如

add_header Content-Type application/javascript;

但我可能用错了。 有什么指点吗?

另一个Stackoverflow question描述的类似问题

【问题讨论】:

  • 感谢您的接受,以及之前的赏金。那么,问题的根源到底是什么?

标签: nginx reverse-proxy mime-types


【解决方案1】:

您可以尝试使用http://nginx.org/r/default_type;想到的另一件事是http://nginx.org/r/proxy_hide_headers

我还建议首先确定此问题的根本原因 - 是否来自上游的错误 MIME 类型?然后看看那里。

否则,我的猜测是您收到 text/html 的原因是因为您的配置有其他问题,并且为您的 .js 文件(甚至可能是 403 Forbidden)生成了 404 Not Found 响应由上游或500 由nginx),从而产生text/html MIME 类型。

【讨论】:

  • 问题已演变为ancestor violates the following Content Security Policy directive: "frame-ancestors www.aaa.com。解释起来太长了。但是,您的指示使我隐藏了包含该指令 proxy_hide_header "X-Frame-Options"; 的标头,这解决了我的问题。
猜你喜欢
  • 2017-03-27
  • 2017-10-02
  • 2021-05-30
  • 2020-06-30
  • 2018-09-30
  • 2018-09-20
  • 2020-04-23
  • 2014-09-28
相关资源
最近更新 更多