我在我的 CSS 文件中添加了一行文本,垃圾来自浏览器

Posted

技术标签:

【中文标题】我在我的 CSS 文件中添加了一行文本,垃圾来自浏览器【英文标题】:I add a line of text to my CSS file, garbage comes through the browser 【发布时间】:2014-01-29 04:55:36 【问题描述】:

我正在使用 Vagrant 通过 php 5.5 和 nginx 1.4.4 管理 Debian Wheezy 的 VirtualBox 实例。我的本地环境是 Mac OS X 10.9,带有 PHP 5.5 和 Apache 2.2.24。我有一个同步的目录,它指向这个特定项目的文档根目录。

我的本​​地机器有一个 VirtualHost 设置,它也指向该项目的文档根目录。因此,我实际上有两个不同的 URL 可以指向我的浏览器,并且将执行相同的代码。一个 URL 访问虚拟机,而另一个 URL 访问我的本地 Apache 安装。

我已经能够毫无问题地编辑几个 PHP 文件。我在本地进行更改,它们立即显示在虚拟机和我的本地 Web 服务器上。但是,每当我尝试编辑 CSS 时,事情就会变得很奇怪。我正在尝试将单行 CSS 添加到静态 CSS 文件中。大致如下:

.body margin-top:50px

当我进行此更改时,虚拟机会发疯。我不确定它是否发送了一个损坏的文件,或者它只是在 CSS 文件的末尾附加了一堆奇怪的字符,但我什至无法将它们粘贴到这里。我对 CSS 文件的请求进行了 Charles 转储,响应如下所示:

我通过虚拟机查看了vim中的文件。我已经使用多个文本编辑器查看了该文件。对于我的生活,我找不到任何问题。当我通过本地 Apache 安装加载完全相同的文件时,它工作得很好:

注意body 声明出现在buttonfooter 之间,并且文档末尾没有奇怪的字符。

我注意到的另一件事是我的空白在某些时候也被操纵了。有问题的 CSS 文件使用四个空格进行缩进,但在来自虚拟机的响应中,这些行只有两个缩进空格。您无法从图片中看到它,因为它们是由查尔斯格式化的,但我查看了原始数据。这真的很奇怪。

当我的 CSS 文件通过 Vagrant/nginx 组合与我的本地/Apache 组合提供服务时,您是否知道是什么导致了对 CSS 文件的操作?

编辑

我将一些字符粘贴到十六进制转换器中,它将所有字符转换为问号。我尝试了二进制到十进制的转换,它们都变成了�,据我所知,它是“用于替换值未知或在 unicode 中无法表示的字符”。我在文件上运行了file --mime,它返回了rental-application.js: text/plain; charset=us-ascii。那么...可能是 nginx 设置?

我在 javascript 文件中遇到了完全相同的问题。如果我 vagrant destroyvagrant up 是迄今为止我发现解决问题的唯一方法。当我必须在文件保存之间重新启动我的虚拟机时,它无法快速排除故障。

我用来查看文件的每种方法都有效。唯一的问题是当它通过 nginx 提供服务时,这让我觉得我有某种类型的编码设置错误。这主要是库存设置。

更离奇

如果我mv rental-application.js rental-application.html 并在我的浏览器中加载页面,它会完美呈现。如果我将名称更改为rental-application.php,这同样适用。但是,只要我将名称更改为 rental-application.jsrental-application.css,我的更改就会消失,� 字符会重新出现在文档末尾。

更离奇

我可以在 VM 上创建一个 js 文件,它可以通过 VM nginx 服务器正常加载。如果我随后修改刚刚创建的文件并重新加载它,则不会出现更改,只会出现乱码。

如果我将该文件mv 更改为以.js 结尾的其他名称,则乱码问题仍然存在。不过,如果我再把cat重命名文件的内容改成一个原名的新文件,就万事大吉了。

【问题讨论】:

Id 检查它们在 HEX 编辑器中的字节是什么,但我认为这可能是编码问题,或者文件在以二进制而不是 ASCII 形式发送时已损坏,甚至是某处的缓存问题。奇怪的是 body 被删除了 真的很奇怪。我销毁并重建了虚拟机,并且 CSS 文件很好。然后我再次编辑它,现在我遇到了同样的问题。 写出精彩的问题,并进行了彻底的调查。干得好。 【参考方案1】:

如果人们最终因为同样的问题来到这里,他们有解决方法:您需要在您的网络服务器设置中关闭sendfile()

对于 Apache:EnableSendfile off

对于 Nginx:sendfile off

快速解释:https://coderwall.com/p/ztskha

如果您需要更多详细信息,可以在网上找到更多信息。

现在您可以喝杯啤酒,享受您的静态文件被正确传输,而不是更多损坏的文件 :)

【讨论】:

成功了,谢谢:) 这对我有用,尽管我必须vagrant reload 才能进行编辑。谢谢! Docker 和 nginx 有这个问题,设置 sendfile off 没有解决 太棒了,这解决了我在 vagrant/nginx 上的问题。谢谢。 使用 Docker 时,我必须重新启动系统并运行容器,才能让它们识别发送文件关闭更改 @PierredeLESPINAY

以上是关于我在我的 CSS 文件中添加了一行文本,垃圾来自浏览器的主要内容,如果未能解决你的问题,请参考以下文章

在 didselect 行中我的第一行返回标签文本而不是我的自定义标签文本

CSS 在我的角度组件中不起作用

如何在我的不和谐机器人上实时显示来自文件(文本)的信息

如何在一行中添加两个文本输入字段

如何使用 css 在我的文本周围创建边框 [重复]

Chrome 开发工具:来自 javascript 的 [VM] 文件