【问题标题】:I add a line of text to my CSS file, garbage comes through the browser我在我的 CSS 文件中添加了一行文本,垃圾来自浏览器
【发布时间】: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 文件很好。然后我再次编辑它,现在我遇到了同样的问题。
  • 写出精彩的问题,并进行了彻底的调查。干得好。

标签: nginx character-encoding vagrant


【解决方案1】:

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

对于 Apache:EnableSendfile off

对于 Nginx:sendfile off

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

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

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

【讨论】:

  • 成功了,谢谢:)
  • 这对我有用,尽管我必须vagrant reload 才能进行编辑。谢谢!
  • Docker 和 nginx 有这个问题,设置 sendfile off 没有解决
  • 太棒了,这解决了我在 vagrant/nginx 上的问题。谢谢。
  • 使用 Docker 时,我必须重新启动系统并运行容器,才能让它们识别发送文件关闭更改 @PierredeLESPINAY
猜你喜欢
  • 1970-01-01
  • 2015-01-15
  • 2016-03-02
  • 2019-01-04
  • 2016-09-01
  • 1970-01-01
  • 2017-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多