前段时间有人问我一个简单的问题,html如何创建解析的?
我讲了一大堆,什么通过DocumentLoader, CachedResourceLoader,
CacheResource, ResourceLoaderScheduler, ResourceHandle这些类。
一步一步的完成cache查找然后请求下载等等。
滔滔不绝,直到我调试xml解析时,我才发现好多问题都与理解的不一致,
在分析源码的时候只了解了大体步骤。细节你真的清楚吗?
一、HTTP header 网页头请求
Requests部分(列举几个重要的)
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 |
表示是否需要持久连接。(HTTP 1.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, 15 Mar 2015 15:12:31 GMT |
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: bytes 21010-47021/47022 |
Content-Type |
返回内容的MIME类型 |
Content-Type: text/html; charset=utf-8 |
Date |
原始服务器消息发出的时间 |
Date: Tue, 15 Mar 2015 15:12:31 GMT |
Location |
用来重定向接收方到非请求URL的位置来完成请求或标识新的资源 |
Location: http://www.oschina.net/u/2335812/admin |
User-Agent这个字段用户信息,表明你浏览器支持标准,服务器会解析该字段返回不同请求
(一个适配多终端的网页会做兼容处理)这点在iptv中要特别注意,
好多时候有些前端网页就是要加些特殊字段才能正常操作甚是郁闷。
HTTP 请求头里面能传递较多的信息。
二、webkit 如何区分创建html,xml等解析
它是在HTTP请求返回的200 OK中的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请求返回的302 Found的Location字段返回的url决定跳转的新地址
四、设置load缓存大小
在loader/cache/MemoryCache.cpp 文件中setCapacities() 函数可以设置缓存大小,
找到一个资源加载速度于内存使用的平衡点
类似的小细节有很多,大家也可以诉说一下你遇到的问题。
感谢您的阅读,期待下次与您见面:
如果对这篇讲的技术有任何疑问及想要获得这篇文章讲的技术的工具,第一时间获得文章更新,每天发布一篇技术大牛的原创文章,更多技术信息分享。
欢迎关注个人微信公众平台:程序员互动联盟,扫一扫下方二维码或搜索微信号coder_online即可关注,在线帮您解决技术难点,给大牛直接出难题。