再次求教hao123、265、2345断网能访问的问题! 小白勿入。非常高深强悍的静态网站技术。。。
如题;不懂的小白不要乱发言,不要跟我说每个站都有这种技术,不要跟我说是IE特有技术,也不要说打开脱机功能。,也不要跟我说设为主页也有这种功能,也不要跟我说设置网站的属性对话框-->HTTP头-->选择启用内容过期,这种答复,因为这样也只能在设定的时间内完全脱机访问。但是hao123不一样,他不但在断网后能访问原来的页面,而且在任何网络情况下,首先加载完缓存文件,这一步是在网络处于任何情况下,然后在连接服务器,即断线的情况下加载出绝大部分网站内容,当网络接通的时候,如果页面没有修改,则看到的仍然是原来的页面内容,而当页面有了修改的时候,他会马上返回修改后的页面,不用等到过期时间到了才返回修改后的页面,请问这个功能又是如何做出来的呢?
请实力派大哥讲解下:
hao123.com、265.com、369.com这些网站导航站,但是他们启用了某种技术?当你访问过一次后,第二次再访问的时候,就会智能读取缓存,即:有更新就读取,没有更新就读取缓存。比如265.com只读取新的天气和即时新闻,剩下的就读取缓存,这样大大提高了网站的打开速度,即时把网线拔掉同样可以打开!
这样偶苦恼了很久,这期间看了很多文章,有朋友说:每个网站都有缓存,对,每个网站都有缓存,可是我们的网站并不自动读取,除非选择“脱机浏览”。
本人推断,功能主体功能实现在代码里面。因为在断线的情况下不采用脱机访问的情况能打开网站主体,而在连网后首先加载完缓存文件在尝试连接远程服务器,一定在代码里面有所判断。
我清除完所有cookies 和临时文件 ,然后打开hao123加载出临时文件。 一步步删减,剥减到最后的5个文件。usertrack[1].js base[1].js main_201103221200[1].js hao123[1].htm config_201012151200[1].js 有这5个文件还能实现此功能 缺一不可。
------解决方案--------------------首先,向楼主道歉,不该对你指指点点
其次,我帮你推荐下,让更多的CSDNER来帮你解疑答惑
最后,本帖中所有争论均不删除(除人身攻击外),所以大家畅所欲言。
------解决方案--------------------看来还有很多人不知道其背后的原理.LZ说说的现象是属于Client缓存也就是浏览器缓存.这一块缓存是浏览器自己负责维护,包括写入和读取.当浏览器请求页面:Host:www.hao123.com/
GET / HTTP/1.1
hao123服务器返回:
HTTP/1.1 200 OK
Content-Type: text/html
ETag: "20947927"
Accept-Ranges: bytes
Last-Modified: Fri, 25 Mar 2011 03:55:21 GMT //该页面最后修改日期 3/25
Expires: Thu, 31 Mar 2011 03:39:53 GMT //过期时间是3/21
Cache-Control: max-age=259200 //http1.1标准,缓存为259200 / 60 / 60 / 24 =3天
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 15485
Date: Mon, 28 Mar 2011 03:39:53 GMT //当前时间
Server: lighttpd
如果再次访问hao123.com
GET http://www.hao123.com/ HTTP/1.1
Host: www.hao123.com
Connection: keep-alive
Cache-Control: max-age=0
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
Cookie: BAIDUID=78B2EDADEE1743B22D13BBB2146D66BC:FG=1; loc=1%7C%BD%AD%CB%D5%7C%CB%D5%D6%DD
If-None-Match: "20947927"
If-Modified-Since: Fri, 25 Mar 2011 03:55:21 GMT //注意:告诉hao123本地缓存的最后修改时间是3/25
这次服务器返回:
HTTP/1.1 304 Not Modified
Content-Type: text/html
ETag: "20947927"
Accept-Ranges: bytes
Last-Modified: Fri, 25 Mar 2011 03:55:21 GMT
Expires: Thu, 31 Mar 2011 03:42:28 GMT
Cache-Control: max-age=259200
Date: Mon, 28 Mar 2011 03:42:28 GMT
Server: lighttpd
注意返回时 304,告诉浏览器该页面没有更新,你自己看着办吧.
这是IE会从临时目录中读取该hao123页面的缓存(url hash存放)并呈现.
所有的过程对于前台来说是透明的.
------解决方案--------------------当你打开这个页面的时候就在执行一个方法,这个方法setTimeout当连上网了就重新访问该网站就能实现
------解决方案--------------------
------解决方案--------------------设置缓存还可以在iis那头设置的
详细内容可以抓包看看每次请求网站返回的状态码。。。。304什么的
------解决方案--------------------