背景
本章梳理Cronet对于http header的处理逻辑。包含Android & iOS两个平台。
梳理结论
在Cronet里针对常见http header做的处理,梳理结果如下。
其中分为多个级别。P0代表最高优先级,以及P1、P2,优先级随着降低,Cronet会按照最高优先级逐级判断是否满足,并执行响应的操作。
iTerm | iOS | Android | 备注 |
---|---|---|---|
Referer | P0:用户 P1:默认不会设置 P2:如果发生Redirect,如果用户set过,还是以用户为准,否则为空 |
无法设置 原因是只能通过URLRequest.cc中的setReferrer来设置Referer,手动在header中set会被扔掉,除非像iOS那样做了转换(header->setReferrer) |
如果用户set的Referer不符合GURL规则, 则会被扔掉,相当于没set |
User-Agent | 忽略用户set header,使用默认UA | P0:用户 P1:系统默认值 |
|
Accept | P0:用户 P1:默认为*/* |
P0:用户 无默认值 |
|
Cookie | Network_delegate配置 | P0:只有用户手动set header才生效 | |
Host | P0:首次请求以用户为准(如果用户set了),Redirect以跳转后的host为准 P1:如用户未设置,默认取当前的hostname |
同iOS | |
Accept-Encoding | P0:用户 P1:默认为gzip, deflate |
同iOS | |
其他 | P0:用户 P1:某些条件成立才会有默认值,否则无该字段 |
同iOS | 例如:Transfer-Encoding Content-Length Pragma Cache-Control |
代码分析
我在这里分为适配层 和 native层。
- 适配层主要是与平台相关的代码和对上层接口。
- native层为主要实现逻辑。
适配层
适配层 - iOS端
设置header
iOS拷贝header至native层
iOS对全局header的设置
iOS 对cookie的处理逻辑
适配层 - Android
|
|
Android将header拷贝至native层
Android对User-Agent的特别设置
Android对cookie的设置
native层
设置header
|
|
native层对User-Agent的特别设置
native层对cookie的设置
发生Redirect对header影响