[WebKit]WebCore之页面加载的设计与实现(三)

[WebKit]WebCore之页面加载的设计与实现(三)(转载)

关于页面加载,RFC2616(HTTP 1.1)做了很多的定义,WebKit的流程也是遵循这些定义的实现。这部分的实现主要放在之前提出的WebCore Loaders和HTTP Stack中。

[WebKit]WebCore之页面加载的设计与实现(三)_第1张图片


比如Chrome Net Stack(里面包含了HTTP Stack的实现)中实现了HTTP Cache, 而Android浏览器则是在HTTP Client中实现了HTTP Cache。 关于缓存,会专门在新篇中学习一下。另外在加载中的策略控制已经在第一篇中提到了,其它的还有错误处理、跳转等。


下面补充几个场景下的流程。没有做进一步的总结,只是简单将流程列出来。


1.错误控制

错误由HTTP Stack中抛出来,依次调用到CachedResource::error进行处理。这里要说明的是WebCoreResourceHandleAsDelegate本身只对应到ResourceHandle的,在错误处理调用则使用m_handle->client()的形式访问到了ResourceLoader。

[WebKit]WebCore之页面加载的设计与实现(三)_第2张图片


2.跳转

关于跳转,实际完全在HTTP Stack中完成的,只是会在跳转前通过willSendRequest的方式通知到DocumentLoader。



3. Subframe

关于iframe,或是plugin之类的sub frame, 在加载时也是走DocumentLoader::startLoadingMainResource()的流程,不同的是它的发起者是SubframeLoader。它并不是继承自CachedResourceClient, 而是封装了一些上层的加载逻辑。

[WebKit]WebCore之页面加载的设计与实现(三)_第3张图片


后续会根据HTTP 1.1协议中关于页面加载的定义展开一些WebKit的实现,特别是缓存的处理。


转载请注明出处: http://blog.csdn.net/horkychen

@import url(http://www.cppblog.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);

你可能感兴趣的:([WebKit]WebCore之页面加载的设计与实现(三))