12 Tomcat编码问题03 header部分

来源:互联网 发布:linux c 守护进程 编辑:程序博客网 时间:2024/06/01 08:05

前言

接着上一篇继续,这里要说的是关于header部分的编码的处理

header部分

首先看一下对于http header部分的获取

AbstractHttp11Processor. process
这里写图片描述
InternalInputBuffer. parseHeaders
这里写图片描述
InternalInputBuffer. parseHeader
这里写图片描述
MimeHeaders. addValue
这里写图片描述
MimeHeaders. createHeader
这里写图片描述
MimeHeaders.addValue 创建了一个header并添加到当前对象的headers集合中, 将传入的数据[bytes, off, len]作为key, 返回了创建的header的value, 用于之后配置value

然后 我们再来看看servlet中获取hader的方法吧
org.apache.catalina.connector.Request. getHeader
这里写图片描述
Request. getHeader
这里写图片描述
MimeHeaders. getHeader
这里写图片描述
MimeHeaders. getValue
这里写图片描述

那么问题来了, InternalInputBuffer.headers 是怎么和requst. headers关联起来的呢

InternalInputBuffer. InternalInputBuffer
这里写图片描述

然后 在InternalInputBuffer中并没有对headers做其他的操作
然后 我们再来看看可能通过Request中对于headers进行的可能的操作吧
这里写图片描述

绿色箭头对应的操为只读操作, RemoteIpValve对应的操作为对”X-Forwarded-By”, “X-Forwarded-For”的操作, FormAuthenticator的逻辑我不了解

红框部分为刚才对于headers的解析, 其余的几个为与InternalInputBuffer的”平行”的逻辑

因此 一眼望去似乎 是对于header没有特别的解码操作,, 那么 真的对吗 ?

以目前我能看到的来看, 似乎 是没有, 因此 是以默认的iso8859-1进行解码的[MessageBytes.toString], 如果 需要向header中传入中文, 则需要以给定的编码编码之后, 发送到服务端, 然后服务端进行对应的解码, 即得到了所需的header

对于编码问题, 推荐一本书”深入分析Java Web技术内幕”[许宁波著], 关于编码问题的这一章是第三章, 反正 我以前看过之后 是感觉非常有收获的

然后 还有一个问题, 又重新看了一下”3.4 JavaWeb中涉及的编解码”, 我感觉 我这里的分析 和这本书上面的描述, 有两处存在冲突的地方, 第一 是关于pathInfo部分的编码问题, 第二 是关于查询字符串的编码问题

现在先放在这里吧

参考
http://www.xuebuyuan.com/1287083.html
http://www.cnblogs.com/chenssy/p/4220400.html
“深入分析Java Web技术内幕”[许宁波著]

0 0
原创粉丝点击