WEB浏览器
夏日的雨往往总是暂时的狂妄,只要坚持住了,会有看到彩虹的一刻!刚刚计算机网络课程设计答辩完,正好来了场大雨,那就把这三天以来做WEB浏览器的过程简单的记录下吧,愿减少后来者走弯路~
1、明确你所要做的WEB浏览器的核心点在哪!
由于我所做的课设是计算机网络,核心点当然在于发送请求与响应请求,至于HTML的解析、JS的渲染,这对于数据结构与算法来说是一个很好的实践机会!以后有空时可以补充一下
2、HTTP协议的RFC文档
对于HTTP协议的RFC文档,目前最新的是HTTP1.1版本,它比1.0版本增加了分层代理,缓存的作用以及对稳定连接和虚拟主机的需求
英文:http://www.faqs.org/rfcs/rfc2616.html#b
中文:百度很多翻译版本,看个人喜欢
该文档有105页,如果只用于本次课设可以只看(Range,Connection,If-Modified-Since、响应状态码等)
3、SOCKET编程
a、非阻塞式与阻塞式编程:主要的区别在于非阻塞式在每请求一个资源时,无法该资源是否可用都有一个返回值,而阻塞式只需要被阻塞起来,一直等待直到资源可用,也不返回任何值!当我们在做WEB浏览器时,我们必须所服务的网络是如何的,如果网络相对拥塞,那么采用非阻塞式的会相对好一些,而且我们可以利用HTTP协议中的Content-Range对所请求的资源进行规定本次是请求的是从哪里到哪里,这对于下载文档来说也是相当重要的!非阻塞式SOCKET编程写得比较好的有:http://www.embedu.org/Column/Column235.htm
b、 步骤:
没有实现缓存的步骤:
创建SOCKET对象--域名解析得到目的IP--连接CONNECT到目的主机--发送请求报文--接收响应报文--关闭SOCKET
实现了缓存的步骤:
1、创建SOCKET对象--域名解析得到目的IP--连接CONNECT到目的主机--
2、查看本地缓存中是否有相对应的URL缓存,如果有的话,把缓存中的时间Last-Modified的值填入请求报文的If-Modified-Since头域值中。再发送报文
3、服务器接收到请求后将请求中Last-Modified的值与所请资源最后一个修改时间比较,如果一致的话则返回304表示资源没有改变,如果不一致的话,则按照常规进行发送响应(200:成功返回页面 ,206:部分发送)
4、具体可以参照:
Socket编程Http下载的简单实现:http://www.cnblogs.com/dejavu/archive/2013/01/08/2850265.html
C++ 用socket封装成http:http://blog.csdn.net/itjobtxq/article/details/6234690
如何使用SOCKET 发送HTTP1.1 GET POST请求包:http://blog.csdn.net/huangxy10/article/details/7662322
HTTP Get,Post请求详解: http://blog.chinaunix.net/uid-25808509-id-3047968.html
C++文件读写:http://www.cnblogs.com/ifeiyun/articles/1573134.html
2013/7/2--13:06:29
好快就这样结束我的大三!感觉大三第二学期真心没有学到什么,当程序员的,不应该如此浮躁啊,暑假没去实习也没什么的,重要的是计划与执行计划,重要的是快乐地生活!!!WEB浏览器是个很可以挖掘个人潜力的项目!要好好利用,挖掘自己潜在的能力,与发现自己的闪光点,这很重要!暑假有空时再一步完善吧!加油!