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

Ben*_*old 20 nginx character-encoding vagrant

我正在使用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}
Run Code Online (Sandbox Code Playgroud)

当我做这个改变时,虚拟机就疯了.我不确定它是否正在发送一个损坏的文件,或者它只是在CSS文件的末尾添加了一堆奇怪的字符,但我甚至无法在这里粘贴它们.我做了一个查询转储请求CSS文件,响应如下:

在此输入图像描述

我通过虚拟机查看了vim中的文件.我使用多个文本编辑器查看了该文件.对于我的生活,我发现它没有任何问题.当我通过本地Apache安装加载完全相同的文件时,它可以正常工作:

在此输入图像描述

请注意,body声明出现在button和之间footer,并且文档末尾没有奇怪的字符.

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

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

编辑

我将一些字符粘贴到十六进制转换器中,并将所有字符转换为问号.我尝试了二进制到十进制转换,它们都变成了�,我可以找到"用于替换其值在unicode中未知或无法代表的字符".我跑file --mime了文件然后又回来了rental-application.js: text/plain; charset=us-ascii.那么... nginx设置可能吗?

我对JavaScript文件有完全相同的问题.如果我vagrant destroyvagrant up是唯一的办法,我发现到目前为止解决该问题.当我必须在文件保存之间重新启动VM时,它无法快速排除故障.

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

更离奇

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

甚至更奇怪

我可以在VM上创建一个js文件,它将通过VM nginx服务器正常加载.如果我随后修改了刚刚创建的文件并重新加载,则不会显示更改,只会显示垃圾字符.

如果我mv以不同的名称归档.js,则垃圾字符问题仍然存在.但是,如果我cat将重命名的文件的内容添加到具有原始名称的新文件中,则所有内容都在Universe中.

Dac*_*hmt 43

如果人们在这里遇到同样的问题,他们就可以解决这个问题的解决方案:您需要sendfile()在Web服务器的设置中关闭.

对于Apache: EnableSendfile off

对于Nginx: sendfile off

快速说明:https://coderwall.com/p/ztskha

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

现在你可以获得啤酒并享受正确传输的静态文件,而不是更多损坏的文件:)