Apache升级小记

项目的Apache升级,从2.2.24升级到2.2.34。刚开始我以为没有什么特别多的改动,但是升级的过程中发现改动还是不少的。
升级完毕,把主要的功能跑一跑,发现了几个问题,这里要记录一下。

正确的HTTP换行

问题:一客户端向Server发送一个HTTP的请求,在请求验证之后,Server会作为客户端的反向代理,访问网内资源。但升级之后,这个HTTP请求就一直失败。
原因:这个客户端在自己拼HTTP的请求时,用 \n 作为每一个Header的换行。但是HTTP标准中明确要求要用 \r\n。之所以升级前没有问题,那是因为那是的Apache检查没有那么严格而已。

不要什么都Print到Header中

问题:要从某页面下载一个zip文件,这个文件是请求之后临时打包了若干个文件到tmp目录之后产生的。然后通过read file推送到浏览器去的。升级之前没有问题可以正常下载,升级之后竟然出现500的Internal Error。
寻找:寻找了半天原因,重写的read file的function,还是老样子。后来在httpd的log中找到了一条线索。
Response header name ' adding' contains invalid characters, aborting request. 搜索了一下发现也是因为升级之后的Apache对HTTP Header进行了严格的检测才导致的。那么这个Header是谁加进去的呢?找了半天没发现有什么代码加这个Header,后来在http_filter.c中把这个header的Value也打印出来看看。打印之后,原因就浮出水面了。
原因:原因很简单,当我们zip多个文件时,正好是在拼接HTTP Reponse Header的过程中,我们拼接很简单直接向stdout输出就可以。也正是因为这个,zip在一般模式下打包文件时会输出一些信息,这些信息就自然而然也被当作HTTP Header,而因为Header name包含了非法字符,导致这个reponse都被检测出错误,被apache扔掉了。

总结

从以上两个问题就可以看出来,其实根本和Apache升级没什么关系,还是写代码的人对很多东西都一知半解、能用就行。但是,标准就是标准,还是认认真真按照标准来比较好。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,993评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,581评论 25 708
  • 组织:中国互动出版网(http://www.china-pub.com/) RFC文档中文翻译计划(http://...
    Palomar阅读 1,603评论 0 6
  • 学习篇 嗯~,又说到学习了,今天吧,学了不少,其实也没学多少。就学了化学,数学啦!但是不简单,化学学的是必修二的内...
    Wwwwwwyj阅读 225评论 0 0
  • 莲华20171119(D20) 【目标】 儿女健康成长,快乐学习 1.感恩爱人每天做可口饭菜 2.听李悦老师讲~~...
    幸运的莲华阅读 175评论 0 0