Dillo 2.0 学习笔记二
来源:互联网 发布:如何写淘宝试用报告 编辑:程序博客网 时间:2024/05/29 04:48
从a_Cache_process_dbuf开始,Dillo开始解析Http协议:
1. 解析Http头。一个典型的Http头可能是如下所示:
HTTP/1.1 200 OKDate: Mon, 06 Dec 1999 20:54:26 GMTServer: Apache/1.3.6 (Unix)Last-Modified: Fri, 04 Oct 1996 14:06:11 GMTETag: "2f5cd-964-381e1bd6"Accept-Ranges: bytesContent-length: 327Connection: closeContent-type: text/html<title>Sample Homepage</title><img src="/images/oreilly_mast.gif"><h1>Welcome</h1>Hi there, this is a simple web page. Granted,it may not be as elegant as some other webpages you've seen on the net, but there are some common qualities:<ul> <li> An image, <li> Text, <li> and a <a href="/example2.html"> hyperlink. </a></ul>
Dillo 通过查找连续/n(丢弃/r)来确定包头的位置,并填充CacheEntry_t->Header。将Http头全部取出之后,交由Cache_parse_header处理。
Cache_parse_header首先根据Http状态码(第10,11,12字节)判断是否是continue,404以及redirect标志。如果不是以上标志,则根据Transfer-Encoding域初始化TransferDecoder,根据Content-Encoding初始化ContentDecoder,以及根据Content-Type初始化CharsetDecoder。
接下来处理body的内容:将内容依次通过3个Decoder,完成chunk分段、gzip解压和字符转码(至UTF8)的工作,得到真正的内容,并将3个Decoder释放。
终于要开始处理Http内容了,当然还要先处理一些杂事,比如更新一下界面上的状态栏,还有进度条等等。最关键的是这一句:
(Client->Callback)(CA_Close, Client);
即调用Client的Callback来处理页面的真正内容。该回调函数的设置是在设置type的时候调用a_Mime_set_viewer完成的。具体来说,就是初始化时向mime管理注册各种类型的处理器,比如a_Html_text,该函数的功能就是设置这个Callback。当Dillo处理到对应类型时,会根据类型名称字符串Content-Type找到对应type的注册函数并进行注册,这样Client->Callback就被设置了。
对于text/html来说,调用a_Html_text来注册,最终调用的是Html_callback。
今天就到这里,明天分析Html_text中的词法分析~
- Dillo 2.0 学习笔记二
- Dillo 2.0 学习笔记一
- Dillo 2.0 学习笔记三
- 开源浏览器之Dillo浏览器学习笔记
- selenium 2.0 webdriver 学习笔记(二)
- OpenGL ES 2.0 学习笔记(二)
- Dillo-一个小型网页浏览器
- dillo 移植第一步~
- Dillo 编译使用文档
- JDBC学习笔记(二)
- JDBC学习笔记(二)
- CSS学习笔记二
- ArcXML学习笔记(二)
- C#学习笔记(二)
- AIX学习笔记(二)
- VC++ 学习笔记(二)
- symbian学习笔记二
- AspectJ学习笔记(二)
- Windows Mobile,DMProcessConfigXML 使用实例
- PowerDesigner UML 建模简介
- Java的main方法为什么是public static的?
- UML建模风格之包图
- Set Visible attribute in the node of HTML for ASPX
- Dillo 2.0 学习笔记二
- What is a UML Class Diagram?
- Course Map/Table of Contents
- JAVA知识点
- hibernate 处理数据库字段默认值
- linux下system()详解 (转)
- 出现一个异常希望大家能帮忙解决!
- 第一个项目--修改视频播放器和录像机的界面
- 走的最急的是最美的风景,伤的最深的是最真的感情