http协议的请求头部更像一个键值对,例如Content-Length : 123,前面为键后面为值,表示文本长度为123。对于若干个头部在请求对象中被封装成MimeHeaders对象,MimeHeaders对象里面包含了一个链表结构用于存放头部名和头部值。如下图上,每个MimeHeaderField对象指向其前驱节点对象,同时也指向其后继节点对象,采用这种双向链表结构有利于快速搜索,另外也有助于JVM垃圾回收器回收。但奇怪的是,虽然设计成双向链表结构,但实际上并没有使用,即没有建立prev、next关联而仅仅是使用一个数组结构MimeHeaderField[],如下图下方的图片所示,关于这点不知tomcat开发人员作何考虑,不过不必过于纠结,结构的不同只是遍历的方式不同,主要结构是相同的,即以MimeHeaderField作为一个单位,它代表一个头部,其中包含的name、value分别用于保存头部的键值对。
头部——MimeHeaders
本文探讨了HTTP请求头部的键值对形式,如Content-Length,并介绍了Tomcat如何通过MimeHeaders对象封装这些头部。MimeHeaders内部使用双向链表结构存储头部信息,每个MimeHeaderField对象包含头部名和值。尽管设计为链表,但在实现中并未实际使用链表结构,而是采用数组,但这并不影响其功能。文章提及这一设计可能的原因,同时推荐了《Tomcat内核设计剖析》一书进行深入学习。
摘要由CSDN通过智能技术生成