Step1数据系统技术(3.使用浏览器Cache和http状态码304实现的客户端缓存)

实在抱歉,因为本来这个系列应该早就应该写完的,不过在我写了两章之后,没有过多久,我的网站就崩溃了,崩溃的原因是有人试图从我的网站抓取数据,从而造成了网站数据库的频繁访问,如果大家看过我以前的几篇,应该知道发生这样的事情同样会造成服务器缓存文件过多,因为我使用的是虚拟主机,因此,服务器就崩溃了。因此我觉得这个系统还存在缺陷,因此暂时没有继续介绍(当然到现在也没有改善多少),之后就是春节,春节之后我就开始找工作,而且也一直没有心情来写这个,因此拖延了很久,到现在,我终于觉得不好意思了,决定不管是否完善,都将这个系统介绍完,就算抛砖引玉吧。

从我个人看来,网站的制作其实是一个很精细的事情,只是太精细之后,需要的开发成本就会提高,不过因为当前很多网站不需要如此精细的网站,所以很多技术没有被重视,当硬件受到制约的时候(尤其是大的网站),这些技术就需要认真使用了,Cache和http状态码就是这样的例子,毕竟我觉得大多数的页面是允许有一定的延迟的。

Cache就是浏览器的缓存技术,大家肯定不陌生,浏览器在每次加载一个文件的时候,都要去自己的缓存文件夹里面去查找是否存在可用缓存,如果存在,则不再去服务器下载而直接使用本地内容,这是一个很好的节省服务器性能和流量的方式,在网站不做任何设置的情况下,浏览器会根据用户的设置来确定是否使用缓存,可见浏览器的“Internet选项”的“浏览历史纪录”的“设置”部分。

通常来讲,Cache设置有两种方式:第一种是在HTML内容的head之中设置:

<meta  http-equiv="Expires"  CONTENT="0">  //这一句设置文件的过期时间为0秒

<meta  http-equiv="Cache-Control"  CONTENT="no-cache">  //这一句设置文件禁止被缓存

第二种是通过HTTP Head来设置,例如在.NET(C#)之中:

Response.Cache.SetExpires(time);//设置文件的过期时间为当前的时间。

我个人比较喜欢通过HTTP HEAD这种方式来设置,因为我觉得这不属于HTML本身的内容,当然,如果是静态文件,就只能通过html head来设置了,在我的网站"地名信息系统"之中,我设置了每个HTML页面在7天后失效,因为该HTML是自动生成的。

在上面的Cache介绍之中,提到了浏览器在存在缓存的时候不去服务器取相关的内容,可是仅仅这样设置,好像有时候这些浏览器还是去服务器请求,有些时候的请求很合理,例如用户点击“刷新”按钮的时候,有些时候我也不知道为什么,因此,我在系统之中进一步使用了HTTP状态码。

HTTP状态码有很多用户不愿意去了解,其实这是很重要的内容,至于怎么个重要法,以及详细的使用说明请大家去参考相关的文档,我这里举几个例子:

1.有的用户在网站页面不存在的时候显示了自己定义的页面,可是忘记使用404状态码,这样浏览器就不知道它下载的内容究竟是正常内容还是页面不存在的提示,可能用户能从页面内容上分辨出来,可是搜索引擎的机器人不会,因此就可能会被搜索引擎列入“无法检索”的黑名单。

2.在页面转向的时候不使用301或者302的状态码,造成搜索引擎不知道叶面已经被转向。

我专门要说的304是一个用处和Cache相同的东西,这个状态码的含义是“服务器端没有更新”,也就是说客户端的文件版本是最新的,他的用法是这样的:

1.当用户首次请求该文件的时候,通过HTTP HEAD的Last-Modified字段将该文件的最后修改日期发送到客户端,让客户端知道该文件的版本,例如:

Last-Modified: Tue, 08 Apr 2008 14:48:05 GMT

2.在浏览器再次请求该文件的时候,会自动将该时间作为请求的HTTP HEAD的If-Modified-Since字段内容(有时候根据浏览器的不同,可能会用逗号隔开附加上文件的字节数大小),例如:

If-Modified-Since: Tue, 08 Apr 2008 14:48:05 GMT

3.服务端根据If-Modified-Since字段的内容(如果存在该字段)来判断客户端的文件是否已经过期,如果已经过期,则重新返回新的文件,如果没有,则只需要返回304状态码,就可结束输出,这样代表浏览器端的文件版本是最新的,不需要返回文件内容。

要知道,服务器返回一个304的时间要比返回整个文件的时间要小得多,性能损耗和网络占用也小得多。

Cache和304技术有一定的重复,我选择Cache和304技术一起使用是因为单用Cache好像浏览器有时候还是去取最新内容(尤其是用户点击刷新按钮的时候),而单独使用304则在浏览器向服务器询问的过程还是会占用一定的性能和时间。这两种技术结合起来使用是刚刚好的。

时间: 2025-01-25 08:58:34

Step1数据系统技术(3.使用浏览器Cache和http状态码304实现的客户端缓存)的相关文章

Step1数据系统技术(0.开篇介绍)

好久没有写文章了,前天写了一篇关于Google的介绍的文章,也只是随便的写一下,不过眼下我准备写一个系列文章,来介绍我在Step1网站开发上的一些心得和技术,包括相关的代码. 这一系列文章介绍的技术主要来自www.step1.cn的两个栏目地名信息系统和火车运行图,您最好先浏览一下这两个栏目,这样才能够更加了解我的设计思路. 在开始之前,我来简单的说明一下这两个系统的共同点,以让大家了解究竟什么样的系统更适合使用我介绍的技术. 第一,该系统必须有一套数据,而且数据的容量也要大一点,要不然使用这些

Step1数据系统技术(4.采用服务器端文件缓存)

前一章介绍了Cache和http状态码304的技术,这属于服务器端文件缓存,使用该技术可以灵活的将每一个用户访问服务器的次数和字节数减少到最低. 不过有这样一个问题存在,就是上面的缓存都是针对单个用户的,如果该用户通常在缓存时间内只访问该文件一次,是没有效果的,因此就算这个文件每天被再多的用户访问,也起不到缓存效果,而这种情况下需要使用服务端缓存. 使用服务端缓存的理由很多,我使用的主要理由是每个页面生成对服务器性能的要求过大,因为每个页面生成的过程序需要多次访问数据库,并有可能需要从别的来源获

Step1数据系统技术(5.使用GZIP技术优化文件缓存)

在上面的一篇,我们讲到了服务器端的缓存,我的地名信息系统有70万个页面,生成该页面的过程需要我从远程的数据库加载5个SQL数据返回的内容,还有RSS格式的新闻,因此生成一个页面是很困难的,因此我使用了服务端缓存技术使性能获得了大幅的提升,不过,又遇到了新的关于硬盘空间和流量的问题. 网站的70万个地名当然不会一天之内都会被访问,不过我的网站该栏目日访问量大约为30000,考虑到重复的访问,假设只访问了10000个地名(实际上是不只的,因为地名的访问很零散),那就是会有10000个缓存文件被生成,

Step1数据系统技术(1.基于404错误的URL重写技术)

现在第一篇,讨论我的网站之中使用的URL重写技术,实际上,该技术并不是我编写的,可能有用户能够记得,我的网站www.step1.cn原来就是一个博客,那个时候采用的系统是博客园提供的cnblogs程序(我将这个程序改装成能够在当时的虚拟主机上运行,可花了不少功夫),后来我将博客迁到这里之后,对Step1.cn进行大的改版,当时我实在舍不得这套博客程序之中使用的URL重写的技术,因此专门的从那个cnblogs程序之中将相关的代码从其中拆分出来成一个DLL类,在我的网站使用URL重写技术. 当时由于

Step1数据系统技术(6.汉字URL路径的处理和编码)

其实我挺不想写这一章的,因为直到现在,我还经常为编码的事情弄得云里雾里,不过考虑到我在之前的这个文章系列的目录里面已经列出了这个主题,如果不写有欺骗的嫌疑,想想还是写吧,反正没有谁把我当作一个权威的. 编码问题向来很复杂,我却不愿意向复杂了讲,我只从比较常见的讲. 编码,实际上是一个字符串的表达方式,通常从URL编码来讲,我们最常见到的编码有两种:第一种是GB2312编码,这是百度搜索使用的一种编码形式,例如你在百度搜索一个"你好",你会看到搜索结果网址是http://www.baid

Step1数据系统技术(2.XML+XSLT的页面生成机制)

在本系统之中,网站的主体页面并不是通过普通的aspx返回方式返回的,而是采用一种XML+XSLT的形式,来自生成,这是我个人比较喜欢的方式,这种方式在这个系统之中有着更好的优势,我现在将优势列举几条: 1.完整的实现数据和表现形式的分离,数据完全在XML文件之中实现,而页面的表现的形式完全用XSLT实现,这样使程序的结构清晰简单,易于维护: 2.可以随意的选择将结果输出到文件或者Response: 3.XSLT可以自动的压缩HTML代码,生成紧凑,不易阅读而不影响浏览器解析的代码,你在XSLT文

js技术-百度云Table请求失败,返回状态码是240

问题描述 百度云Table请求失败,返回状态码是240 {"status":240,"message":"APP 服务被禁用}http://api.map.baidu.com/geodata/v3/poi/list?geotable_id=114366&ak=g14pLbVLOKULkhjf29VTuEq2 解决方案 APP 服务被禁用 你的使用超出了配额或者你的账户被封禁,具体你可以打电话问问.

使用java技术在IE浏览器中打开WORD、EXCEL、PDF和TXT文件

问题描述 使用java技术在IE浏览器中打开WORD.EXCEL.PDF和TXT文件 #使用java技术在IE浏览器中打开WORD.EXCEL.PDF和TXT文件 解决方案 http://www.cnblogs.com/zhwl/p/3757069.htmlhttp://wenku.baidu.com/link?url=SfOc2hl0hB-xo9PhjQfXPLemBgg1aj1fV54AW39sk0cJ8_AgCc1_6hb6Lx5aQCF44ILHhn23dyenpOEiBcqJ3Qo1r

【技术干货】浏览器工作原理和常见WEB攻击 (上)

本文作者:上海驻云开发总监 陈昂 浏览器工作原理 当你打开一个个设计漂亮.简洁大方的网页,有没有想过浏览器是如何展现这么一个网页的呢.当你在这些网页上输入你的淘宝账号登录购买东西的时候,有没有想过,你的账号密码.身份证号.手机号.真实姓名,这些信息会不会泄露,被黑客利用呢?在了解网络安全方面的知识之前我们先简单了解下浏览器的工作原理,以辅助我们更好的理解网络安全知识. 浏览器分类 现代浏览器从内核上来说,主要分为以下6大类: Trident内核,代表是IE EDGE内核,代表是微软的Edge浏览