{{ v.name }}
{{ v.cls }}类
{{ v.price }} ¥{{ v.price }}
前段时间有人问我一个简单的问题,html如何创建解析的?我讲了一大堆,什么通过documentloader,cachedresourceloader,cacheresource,resourceloaderscheduler,resourcehandle这些类一步一步的完成cache查找然后请求下载等等。
滔滔不绝,直到我调试xml解析时,我才发现好多问题都与理解的不一致,在分析源码的时候只了解了大体步骤。细节你真的清楚吗?
一、httpheader网页头请求
列举几个重要的
accept
指定客户端能够接收的内容类型
accept:text/plain,text/html
accept-charset
浏览器可以接受的字符编码集。
accept-charset:iso-8859-5
accept-encoding
指定浏览器可以支持的web服务器返回内容压缩编码类型。
accept-encoding:compress,gzip
accept-language
浏览器可接受的语言
accept-language:en,zh
connection
表示是否需要持久连接。(http1.1默认进行持久连接)
connection:close
cookie
http请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。
cookie:$version=1;skin=new;
content-length
请求的内容长度
content-length:537
content-type
请求的与实体对应的mime信息
content-type:application/x-www-form-urlencoded
date
请求发送的日期和时间
date:tue,15mar201515:12:31gmt
user-agent
user-agent的内容包含发出请求的用户信息
user-agent:mozilla/5.0(linux;x11)
responses部分
accept-ranges
表明服务器是否支持指定范围请求及哪种类型的分段请求
accept-ranges:bytes
age
从原始服务器到代理缓存形成的估算时间(以秒计,非负)
age:12
allow
对某网络资源的有效的请求行为,不允许则返回405
allow:get,head
cache-control
告诉所有的缓存机制是否可以缓存及哪种类型
cache-control:no-cache
content-encoding
web服务器支持的返回内容压缩编码类型。
content-encoding:gzip
content-language
响应体的语言
content-language:en,zh
content-length
响应体的长度
content-length:348
content-location
请求资源可替代的备用的另一地址
content-location:/index.htm
content-md5
返回资源的md5校验值
content-md5:q2hly2sgsw50zwdyaxr5iq==
content-range
在整个返回体中本部分的字节位置
content-range:bytes21010-47021/47022
content-type
返回内容的mime类型
content-type:text/html;charset=utf-8
date
原始服务器消息发出的时间
date:tue,15mar201515:12:31gmt
location
用来重定向接收方到非请求url的位置来完成请求或标识新的资源
location:http://www.oschina.net/u/2335812/admin
user-agent这个字段用户信息,表明你浏览器支持标准,服务器会解析该字段返回不同请求(一个适配多终端的网页会做兼容处理)这点在iptv中要特别注意,好多时候有些前端网页就是要加些特殊字段才能正常操作甚是郁闷。http请求头里面能传送较多的信息
二、webkit如何区分创建html,xml等解析
它是在http请求返回的200ok中的content-type字段决定的,content-type:text/html;charset=utf-8,说明了text
类型html,字符编码utf-8。
在domimplementation.cpp中createdocument()创建时判断type是否为html,xml,video等这个type就是请求返回ok字段中的content-type解析出来的。
三、请求重定向
重定向是在http请求返回的302found的location字段返回的url决定跳转的新地址
四、设置load缓存大小
在loader/cache/memorycache.cpp文件中setcapacities()函数可以设置缓存大小,找到一个资源加载速度与内存使用的平衡点
这样的细节还有很多,大家也可以诉说一下您遇到的问题