webkit浏览器常见开发问题

前段时间有人问我一个简单的问题,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)

原文发表时间:2015-04-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏何俊林

Android组件化项目详细实施方案

导读:组件化,插件化开发,将是未来Android中不可或缺的一环。今天来自张华洋的分享,张华洋的blog地址:http://blog.csdn.net/guiy...

1956
来自专栏Golang语言社区

Go微服务 - 构建我们的第一个服务

虽然通过HTTP提供JSON服务不是内部服务和外部服务的唯一选择,但本文聚焦的是HTTP和JSON. 使用RPC机制和二进制消息格式(例如Protocol Bu...

1154
来自专栏青青天空树

ubuntu/deepin制作快捷启动图标

  默认情况下系统所有的快捷方式放在/usr/share/applications,打开该目录会看到大量的.desktop文件,每个文件便是一个快捷方式。

502
来自专栏Hadoop数据仓库

HAWQ技术解析(五) —— 连接管理

        服务器启动后,还要经过一系列配置,才能被客户端程序所连接。本篇说明如何配置客户端身份认证,HAWQ的权限管理机制,HAWQ最常用的命令行客户端工...

1969
来自专栏何俊林

在线看Android系统源码,相见恨晚的几种方案

前言:最近在研究MediaCodec,u盘坏了,之前下载的源码也就自然没有了,真是个难过的事情,不能因为没有源码了,就阻挡我的计划了呀,于是就是今天一文,在线看...

2485
来自专栏程序员宝库

IntelliJ IDEA 教程设置讲解

IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、Ant、JUnit、CVS整合、代码审查、 创新...

644
来自专栏数据之美

Eclipse 下找不到或无法加载主类的解决办法

有时候 Eclipse 会发神经,好端端的 project 就这么编译不了了,连 Hello World 都会报“找不到或无法加载主类(Exception in...

2095
来自专栏桥路_大数据

React Native打包apk错误: 找不到符号import com.facebook.react.ReactNativeHost;

43414
来自专栏技术专栏

springboot static静态资源访问不到及NoHandlerFoundException没有出发的感悟

就可以让404抛出NoHandlerFoundException了,能抛出就能捕获,试了下的确很管用

733
来自专栏较真的前端

你需要知道的几类npm依赖包管理

2116

扫描关注云+社区