- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我们有一个由 xyz 网站管理员部署在生产环境中的网站。以下是在两个不同实例中发生错误时 Web 控制台的两个屏幕截图。
我们时断时续地而不是始终如一地面对这个问题。此外,这种情况发生在少数用户而不是所有用户身上(我不知道这是否与地区有关)。发生此问题时,页面无法正确加载。在几次刷新尝试后,页面正确加载并且其他一切都按预期工作。
众所周知,网站管理员启用了严格的 MIME 类型检查。
所有资源(.js 和 .css 文件)的 URL 路径都是准确的。这些文件的原始 MIME 类型设置是正确的。下面是引用这些文件的 .jsp 页面的代码片段。
<link rel="stylesheet" href="${pageContext.request.contextPath}/static/css/bootstrap/bootstrap.min.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/static/css/jquery/jquery-ui.css" type="text/css" />
<script src="${pageContext.request.contextPath}/static/js/jquery/jquery.min.js" type="text/javascript" ></script>
<script src="${pageContext.request.contextPath}/static/js/bootstrap/bootstrap.min.js" type="text/javascript"></script>
<script src="${pageContext.request.contextPath}/static/js/jquery/jquery.slimscroll.min.js" type="text/javascript"></script>
<script src="${pageContext.request.contextPath}/static/js/jquery/jquery.dataTables.min.js" type="text/javascript"> </script>
根据我的理解,请求流程就像这张小图一样。
我怀疑问题是由网站管理员服务器在将响应发送回客户端浏览器时引起的(第 4 步)。在他们从应用程序服务器读取响应后,我怀疑他们的服务器无法维护文件 (.css/.js) 的相同内容类型。在我声明这一点之前,我想确认我的理解,但我没有工具来证明这一点,因为它只发生在生产中。我们在调试的开发环境中没有看到这个问题!!!
根据网站管理员的说法,问题出在应用程序的代码中。我在代码中看到的是 .jsp 文件中每个 .js/.css 文件的类型。我看到的是浏览器不接受网站管理员的响应。因为我们正在维护 rel="stylesheet"type="text/css"for CSS files 和 type="text/javascript"for all javascript文件,我没有在应用程序服务器中看到问题!!
提前感谢您的建议。
编辑 1:在web.xml中添加mimetypes,如下:
<mime-mapping>
<extension>js</extension>
<mime-type>application/javascript</mime-type>
</mime-mapping>
<mime-mapping>
<extension>css</extension>
<mime-type>text/css</mime-type>
</mime-mapping>
在 liberty server 的 server.xml 中添加了 mimetypes,如下供引用。
<mimeTypes>
<type>js=application/javascript</type>
<type>css=text/css</type>
</mimeTypes>
尽管如此,我们经常在浏览器中遇到 mime 类型不匹配的情况。网站管理员团队声称应用服务器必须发送错误的内容,没有任何合理的信息。
编辑 2:然后我测试了资源(js/css 文件)使用以下命令发送的 header 是什么。
curl -I https://myapplication/static/js/angular/angular.min.js以下是我得到的回复。当我运行循环 100 次时,它始终返回相同的响应。
HTTP/1.1 200 OK
X-Backside-Transport: OK OK
Content-Language: en-US
Content-Length: 168517
**Content-Type: application/javascript**
Date: Tue, 19 Jun 2018 10:38:25 GMT
Last-Modified: Tue, 29 May 2018 17:04:10 GMT
X-Powered-By: Servlet/3.1
X-Global-Transaction-ID: 1178221711
Connection: close
所以,我没有看到应用程序服务器端有任何问题。
- 编辑 3:当网站管理员建议过时的缓存可能会导致此类问题时,他们会禁用缓存。我另外编写了服务器端代码以确保缓存被禁用。以下是供引用的代码片段:
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setHeader("Expires", "0"); // Proxies.
要确保资源是从服务器而不是缓存加载的,请查看开发人员工具中的网络选项卡。如果资源指示 200 状态代码,则它已成功从服务器加载。如果状态码为 304,则表示从缓存中加载。
- 编辑 4:我不知道网站管理员如何建立 ssl 连接。当未正确建立 SSL 连接时,它会以文本/html 形式提供内容。在这个阶段,我不知道是不是这样。我正在寻找所有可能的领域来解决问题!!!
最佳答案
发起请求的客户端请求 (HTML/XML) 通常几乎没有意义,并且设置另一个文件请求的 mime 是没有希望的。 服务器的响应 最终决定了 mime 类型的响应。通常有两种方法可以做到这一点。
在大多数情况下,对于 Apache HTTP 服务器,所有具有相同扩展名的文件都具有相同的 mime 类型,因此所有 *.js 文件在示例中都将具有 application/javascript
mime 类型。
通过 Apache .htaccess
文件设置 mime 类型:
AddType text/css .css
AddType application/javascript .js
有时人们使用 Apache 重写或其他高级方法,有时没有任何文件扩展名。 MIME 类型可以单独添加到文件中。
通过 PHP 设置 mime 类型:
header('Content-Type: text/css; charset=UTF-8');//Use only in .css files.
header('Content-Type: application/javascript; charset=UTF-8');//Use only in .js files.
如果出于某种原因你需要在 .css
文件中运行 PHP,你可以在 .htaccess
文件中使用它,然后使用上面的代码来确保文件的标题告诉浏览器正确的 MIME 类型是什么。
AddType application/x-httpd-php5 .css .html
至于导致间歇性问题的原因,我不确定,因为我编写了我自己的代码所有,明确目的是避免您遇到的这个问题和其他问题。当然,大多数人没有这个选择。因此,在查找导致问题的原因时,我可以推荐的最佳情况是确定是什么设置了文件的 header (例如将 CSS 文件用作 HTML)。如果您已经在这些文件中运行了诸如 PHP 之类的服务器代码,那么您将需要覆盖它(例如上面的 PHP)。 关键理解在发送任何内容之前必须首先发送 header ,否则充其量 header 将看不见,更糟糕的是会破坏文件请求。我怀疑您遇到问题的文件中可能包含服务器端代码;如果这不是设计的,我建议通过 FTP 下载它们并直接查看以确保您的实时服务器上的内容与您的开发机器上的内容相匹配(例如,这些文件是否被黑客入侵)。
此外,您发布的 XML 对服务器请求的任何内容都没有影响(除非在某处声明为亚马逊服务器正式支持的内容)。
关于html - 拒绝应用样式,因为其 MIME 类型 "text/html"不支持样式表 MIME 类型,并且启用了严格的 MIME 检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50813133/
我喜欢调整 目录的样式(例如背景颜色、字体)预订 , Gitbook 风格 HTML 文档。 这可能吗?如果是这样,有人可以善意地指出我可以开始这样做的地方吗? 谢谢你。 最佳答案 两个步骤: 1)
是否可以使用纯 CSS 选择器根据子节点的兄弟节点数量为节点子节点(在我的例子中为 UL)提供不同的属性,特别是高度? 例如,如果一个节点有 1 个子节点,则 UL 的高度是自动的,但是如果该节点有
我正在与 Vala 一起工作,它首先编译为 C,然后正常从 C 编译。 valac 的一项功能(Vala 编译器)是为 .vala 生成“fast-vapi”文件。 fast-vapi 本质上是为 .
我有两个具有 .body 类的 div,但是,一个位于另一个具有 .box 类的 div 中 - 如下所示: 我只想为 .box 内部的 .body 设置样式...但我在下面所
**注意所有 <> 标签已被删除以允许代码显示**我已经玩了好几个小时了,如果不在设计结束时使用解决方法(即 Corel 绘图),我就无法真正让它工作 *在我继续之前, 首先,网站 URL 是 Adv
我从一个服务中接收到一个字符串,该字符串显然使用 UTF-32 编码对其 unicode 字符进行编码,例如:\U0001B000(C 风格的 unicode 编码)。但是,为了在 JSON 中序列化
我在应用程序资源中有一种样式,我想将其应用于许多不同的饼图。样式如下所示: 为了简单起见,我排除了更多的属性。这一切都很好。现在,我的一些馅饼需要有一个不同的“模型
想象一下,我有一个名为“MyCheckBoxStyle”的 CheckBox 自定义样式。 如何制作基于 MyCheckBoxStyle 嵌入自定义 DataGridCheckBoxColumn 样式
我有一个 Button我在 WPF 中开发的样式,如 this question 中所述.我想用这种风格做的另一件事是拥有 Button缩小一点点,使其看起来像被点击一样被点击。现在,转换代码如下所示
我为超链接控件创建了一个样式:
不知道为什么,但我的 typeahead.js 远程自动完成停止工作。我没有更改任何关于 typeahead.js 的代码,但既然它坏了,我一定是错的。你能看看我的site here吗? ?我会创建
有没有办法创建扩展当前样式的样式,即不是特定样式? 我有一个 WPF 应用程序,我在其中创建样式来设置一些属性,例如边框或验证。 现在我想尝试一些主题,看看哪
我正在为一个网站提出问题,并希望 var reltext 中的正确/再试消息具有不同的颜色,即绿色表示正确,红色表示错误,并且每个旁边可能有一个小 png。 有什么想法吗? A local co
我想到达列表的父节点(使用 id 选择器)并使用纯 JavaScript 添加背景颜色来设置其样式。这是我的代码,但不起作用。 var listParentNode; listPare
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 4 年前。 Improve th
过去几天我一直在与这段代码作斗争,我真的不知道该如何处理它。 基本上,当用户将鼠标滚动到主导航菜单中的某个 LI 元素上时,就会运行一个 Javascript 函数,并根据触发该函数的元素将链接放入下
使用这个可爱的 html 和 css 作为指南,我能够在我的照片上显示我的姓名首字母。 这很好,但是,如果图像不存在,我只想显示首字母;如果图像存在,则不应渲染 peron 首字母。 换句话说,当该图
使用这个可爱的 html 和 css 作为指南,我能够在我的照片上显示我的姓名首字母。 这很好,但是,如果图像不存在,我只想显示首字母;如果图像存在,则不应渲染 peron 首字母。 换句话说,当该图
是否有人尝试过将 JButton 设计为看起来像 NetBeans 工具栏按钮?这将只显示一张图片,当您将鼠标悬停在它上面时,会显示 1px 圆形角灰色边框,并且按钮顶部和底部的背景不同......似
在 Ax2012 中使用图表,它们工作正常。但我想更改它在启动时显示的图表类型,例如“样条”图表,而不是默认的“柱状图”图表。 这是我现在拥有的: http://i.stack.imgur.com/R
我是一名优秀的程序员,十分优秀!