由于 MIME 类型,资源被阻止访问?

4
多年来,我一直成功地包含了动态创建的javascript文件。
以下是一个示例: https://granadainfo.com/sups.php?locs=95 正如您所看到的,它能够正常加载。
通常,我会像这样将它们放入HTML文档的头部: 但在最近几天,它们停止工作了。
Firefox调试器控制台显示以下错误消息:
"The resource from “https://granadainfo.com/sups.php?locs=95” was blocked due to MIME type (“text/html”) mismatch (X-Content-Type-Options: nosniff)."
我使用的是a2 Web主机。他们必须对配置进行了某些更改以使其停止工作。
也许我可以在.htaccess文件中加一行来解决这个问题。
A2 hosting建议使用以下命令,但它无效:
Header always unset X-Frame-Options
这个问题只会在有get请求时发生,例如?locs=95。静态文件没有问题。
我尝试将文件名更改为.js并更改.htaccess文件以将.js解析为php,但没有任何区别。

A2 hosting建议使用这行代码,但它并没有起作用。头部信息总是无法取消X-Frame-Options——让人难以理解。他们为什么认为这会有任何区别呢? - Quentin
3个回答

3
A2 hosting的高级支持团队最终回复了我并给出了一个好答案。以下是他们的回复,它解决了问题。
有一个简单的解决方案。
出于安全原因,我们最近在所有服务器上默认设置了“X-Content-Type-Options”为“nosniff”。如果在您的“.htaccess”文件中未手动设置该选项,则站点将默认使用服务器正在使用的选项(nosniff)。这就是导致站点出错的原因。
在此工单的早些时候,您被告知要取消设置“X-Frame-Options”标头,这是错误的,因为该选项仅适用于iframes。您实际需要取消设置的标头是“X-Content-Type-Options”。
这是您需要添加到.htaccess文件顶部的行。
Header always unset X-Content-Type-Options

3

PHP默认使用Content-Type: text/html。如果你不是在提供HTML页面,那么你需要使用header()函数来说明你要提供什么内容。

<?php
    header("Content-Type: application/javascript");

1

我同意你的答案。

最终,我将文件名更改为 .js,并在 .htaccess 文件中使 .js 与 php 解析,如下所示。

RewriteEngine on
AddHandler application/x-httpd-ea-php56 .php4 .php3 .php .phtml .htm .html .cgi .ics 
.js

然后我将这个添加到所有文件的顶部。
header('Content-Type: text/javascript');

现在它可以工作。

所有尝试在 .htaccess 文件中解决 X-Content-Type-Options 问题的努力都失败了。


这不是一个论坛帖子,你不能只为了回复志愿者的答案而发另一篇帖子。 - mickmackusa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接