从数据包看工程师应该注意的编程习惯
来源:互联网 发布:中信出版的经管 知乎 编辑:程序博客网 时间:2024/04/29 10:36
以下所讲的内容是我在协议分析的过程中遇到的,但是确实是值得我们攻城狮思考的问题。即从数据流中反应程序员的习惯问题。
在协议分析的过程之中,配置正则的时候有很多奇怪的现象,比如在配置Host头域的时候的,使用了全局通用的规则(H|h)ost:(\x20),一开始的时候偶非常疑惑为什么这么写。印象之中HTTP的头域都是大写开头的,这里为什么还要小写呢?回头在查看HTTP1.1发现RFC2616中原话是这样说道Each header field consists of a name followed by a colon(":") and the field value.Field names are case-insensitive. The fieldvalue MAY be preceded by any amount of LWS,though a single SP is preferred,意思是头域属性是大小写不敏感的,然后在冒号之后最好能加一个空格。RFC给出了一个指导性的意见,大小写不敏感,但是在RFC源文档中所有的头域默认都是大写开头的,而且较长的头域名使用了下划线风格的大写模式。其实这是一种习惯或者书写风格吧,使用过面向对象编程的人都会了解,在面向对象的编程风格中类一般都是大写开头的,而且camel-case风格应用很广泛。文中还提到了最好能够在冒号之后加一个空格,这是一个建议,并没有强制要求。在《clean code》以及《编写可读代码的艺术》这两本书中也都多次提到类似的建议(空格和camel-case风格),这说明了原文RFC提到的是一种良好的书写习惯。不是有一种说法建议我们要遵循团队的编码规范,同理,我们在写HTTP相关程序的时候,最好能够参考一下HTTP的RFC。
回到开头提到的问题我们配置'h'的原因恰恰是因为有的程序员在设置头域的时候写了"host"而不是"Host",为了能够识别全面,我们当然得考虑到这种情况。其实这种情况很多程序员未必会遇到,原因是很多的开发基于已有的框架可能在Host等常用的头域都会给你设置好了,你只要填写相关的值就可以,但是在遇到非标准的头域的时候比如X-Requested-With的时候,如何去添加该头域就能体现出一个人的习惯来。
还有一点就是是我在抓包的过程中遇到了就是,有的程序中缺少(H|h)ost:(\x20)中的空格即类似于Host:careland.com.cn这种形式,这个问题虽然并没有困扰我很长时间,但是一度令我很纠结,命名规则配置很正确,为什么引擎不能识别。原因就是空格就在那里,看不看得见是你自己的事,真是囧。
上述所遇到的问题不能说写这个程序的人书写的代码功能有问题,但是反应的却是一种书写习惯或者说是所有编写与HTTP相关程序的程序员应该阅读一下RFC2616,参考一下标准给出的建议以及文档中的书写习惯。在与同事的交流过程中我了解到,在分析国外的一些应用,他们的头域书写的非常规范,类似的问题很少。但是国内的应用总会出现一些比较奇怪的首部域。这倒说明不了国外的程序员算法能力比我们强上多少,相反我们高校的ACM队伍在决赛中经常夺冠,前50名的有很多是中国参赛队。这说明的是一种程序的书写习惯,要不然《cleancode》以及《编写可读代码的艺术》都是老外写的,这方面我们只能翻译别人的,很少有自己的原创。我们现在在做代码的走查和重构,上述所提到的问题很少会被提出来,毕竟看似影响不大,但是在编写程序的过程中,建议能够严格遵守某一种良好的习惯。
- 从数据包看工程师应该注意的编程习惯
- 【转】Java工程师应该抛弃的10个编程习惯
- Java工程师应该抛弃的10个编程习惯
- 从老外语言习惯看编程语言的习惯。
- 从别人设计的系统看自己应该注意什么
- 编程时,应该注意的
- Android工程师应该具备的四大开发习惯
- 谈谈C语言教学:应该从一开始就培养学生良好的编程风格和习惯
- 谈谈C语言教学:应该从一开始就培养学生良好的编程风格和习惯
- 新人应该养成的一些编程习惯
- 编程应该养成哪些好的习惯
- 需要注意的几个编程习惯
- 个人认为软件开发工程师应该注意的几个问题
- Java工程师应该注意的二、三事
- 从李小龙的一句话看程序员是否应该多学几种编程语言
- 从李小龙的一句话看程序员是否应该多学几种编程语言
- 从李小龙的一句话看程序员是否应该多学几种编程语言
- Java的编程应该注意的问题
- yum工具
- oracle order by和rownum 一起用
- 整理常用的iOS第三方资源
- git代理设置
- EventBus 的使用方法
- 从数据包看工程师应该注意的编程习惯
- 《实战Java高并发程序设计》问答录,看这些问题解决你所有java并行难题
- Java WeakReference的理解与使用
- JSR356标准Java WebSocket
- CDI应用二 CDI与JAX-RS集成
- Matlab—Matlab操作mysql数据库
- Java中的多态
- POSIX中内存共享(open)的简单实例
- java实现ping功能的几种方法