我在我的 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
声明出现在button
和footer
之间,并且文档末尾没有奇怪的字符。
我注意到的另一件事是我的空白在某些时候也被操纵了。有问题的 CSS 文件使用四个空格进行缩进,但在来自虚拟机的响应中,这些行只有两个缩进空格。您无法从图片中看到它,因为它们是由查尔斯格式化的,但我查看了原始数据。这真的很奇怪。
当我的 CSS 文件通过 Vagrant/nginx 组合与我的本地/Apache 组合提供服务时,您是否知道是什么导致了对 CSS 文件的操作?
编辑
我将一些字符粘贴到十六进制转换器中,它将所有字符转换为问号。我尝试了二进制到十进制的转换,它们都变成了�
,据我所知,它是“用于替换值未知或在 unicode 中无法表示的字符”。我在文件上运行了file --mime
,它返回了rental-application.js: text/plain; charset=us-ascii
。那么...可能是 nginx 设置?
我在 javascript 文件中遇到了完全相同的问题。如果我 vagrant destroy
和 vagrant up
是迄今为止我发现解决问题的唯一方法。当我必须在文件保存之间重新启动我的虚拟机时,它无法快速排除故障。
我用来查看文件的每种方法都有效。唯一的问题是当它通过 nginx 提供服务时,这让我觉得我有某种类型的编码设置错误。这主要是库存设置。
更离奇
如果我mv rental-application.js rental-application.html
并在我的浏览器中加载页面,它会完美呈现。如果我将名称更改为rental-application.php
,这同样适用。但是,只要我将名称更改为 rental-application.js
或 rental-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 文件中添加了一行文本,垃圾来自浏览器的主要内容,如果未能解决你的问题,请参考以下文章