webkit浏览器常见开发问题

  • Post author:
  • Post category:其他


前段时间有人问我一个简单的问题,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),一个开发人员的家,来诉说自己的故事。














版权声明:本文为yistn原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。