HTTP消息头之Cache-control

 更新时间:2016年9月20日 18:58  点击:1657
网页的缓存是由HTTP消息头中的“Cache-control”来控制的,常见的取值有private、no-cache、max-age、must-revalidate等,默认为private。

其作用根据不同的重新浏览方式分为以下几种情况:
(1) 打开新窗口
如果指定cache-control的值为private、no-cache、must-revalidate,那么打开新窗口访问时都会重新访问服务器。而如果指定了max-age值,那么在此值内的时间里就不会重新访问服务器,例如:
Cache-control: max-age=5
表示当访问此网页后的5秒内再次访问不会去服务器
(2) 在地址栏回车
如果值为private或must-revalidate(和网上说的不一样),则只有第一次访问时会访问服务器,以后就不再访问。如果值为no-cache,那么每次都会访问。如果值为max-age,则在过期之前不会重复访问。
(3) 按后退按扭
如果值为private、must-revalidate、max-age,则不会重访问,而如果为no-cache,则每次都重复访问
(4) 按刷新按扭
无论为何值,都会重复访问当指定Cache-control值为“no-cache”时,访问此页面不会在Internet临时文章夹留下页面备份。
另外,通过指定“Expires”值也会影响到缓存。例如,指定Expires值为一个早已过去的时间,那么访问此网时若重复在地址栏按回车,那么每次都会重复访问:
Expires: Fri, 31 Dec 1999 16:00:00 GMT

开启FCKeditor编辑器的图片上传功能及解决图片路径问题,有需要的同学可参考一下。

1. 打开网站后台编辑器里的admin/editor/fckconfig.js这个文件

找到FCKConfig.ImageUpload = false 这句,把false改成true就行啦。

FCKConfig.ImageBrowser = false ; 这里也同样把false改成true

2. 看一下admin/editor/editor目录下面的filemanager文件夹是否存在,如果不在就去下载一个2.6.3版本以上的fck编辑器,把里面的filemanager文件夹复制过来。当然这里是ASP的,所以其他语言像PHP什么的文件夹可以删除。

3. 接下来设置文件上传的路径,打开admin/editor/filemanager/connectors/asp文件夹的config.asp这个文件进行如下设置

ConfigIsEnabled = True 是否开启上传功能

ConfigUserFilesPath = “../../../../../uploads/” 文件上传目录,相对于该文件夹

这里要重点指出的ConfigUserFilesPath = “../../../../../uploads/”这里如果这样设置,我最后发现两个问题

 

A. ConfigUserFilesPath = “../../../../../uploads/”这样设置虽然图片可以上传,但插入编辑器里的图片路径是有问题的,所以我试了很多次最后把它改成ConfigUserFilesPath = “/uploads/”就可以了。如果您的网站是放在下级文件夹里也可以这样设置ConfigUserFilesPath = “文件夹名称/uploads/”。

B. 至于第二个问题,我感觉好奇怪,FCKeditor编辑器的图片路径会出现两个斜杠//,虽然图片也能显示,但看起来总归不舒服。请打开admin/editor/editor/ filemanager/connectors/asp文件夹里的,io.asp这个文件,请把:

function CombinePaths( sBasePath, sFolder)

CombinePaths = RemoveFromEnd(sBasePath, "/") & "/" & RemoveFromStart( sFolder, "/")

end function

改成

function CombinePaths( sBasePath, sFolder)

sFolder = replace(sFolder, "", "/")

CombinePaths = RemoveFromEnd(sBasePath, "/") & "/" & RemoveFromStart( sFolder, "/")

end function

4. 最后设置上传后的图片自动改名,请打开admin/editor/editor/ filemanager/connectors/asp文件夹里的commands.asp这个文件

在文件中添加如下语句

dim rannum

dim dtnow

dim getnewfilename

dtnow=now()

randomize

rannum=int(90*rnd)+10

getnewfilename=year(dtnow) & right("0" & month(dtnow),2) & right("0" & day(dtnow),2) & right("0"& hour(dtnow),2) & right("0”"& minute(dtnow),2) & right("0" & second(dtnow),2) & rannum

并将

sFileName = ouploader.file("newfile")name

改为

sFileName = getnewfilename &"."& split(ouploader.file("newfile").name,".")(1)
完成效果.:

OK 是服务器返回的信息,非ckeditor自带.



最后,如果能在上传成功后直接调用Info的onChange方法的话,是最完美的..可是我始终调用不了这个方法...

完毕,各位自己去测试吧. 另在image.js中有些方法也可以自己改动,如onOK-->表示在点击确定时会触发的方法

现在我们用的fckeditor己经更名为了ckeditor,本文章来告诉如何修改ckeditor上传文件路径这个问题,有需要的朋友可以简单的参考一下。

至于 Unable to find an image manipulation component错误,原因很可能是生成缩略图的代码在.net framework4.0 版本上有点问题,除了要对ckfinder/userfiles文件夹赋予everyone完全控制权限,并根据千一网络的解决办法
· 若不使用缩略图功能:直接把 config.asp 中的 Thumbnails.Add "enabled", true 的第二个参数改为 false。

· 若要使用缩略图功能:可安装 ASP.NET 1.1/2.0 或 AspJpet 或 ASPImage 2 或 ASPThumb。对于 ASP.NET:

o 如果有错误,根据说明改 web.config 和 config.asp 中的 CKFinderTempPath 路径(注意以“”结尾,并且在 web.config 中,要用“\”代替“”);

o 如果还有错误,那么您就在浏览器中直接访问 http://.../ckfinder/core/connector/asp/loopback.aspx 看看能不能运行 ASP.NET,我遇到过一个错误就是 .NET 版本原因造成的,请参见 .NET Framework 4.0 无法运行 2.0 的 ASP.NET 程序解决。说明,若显示“403 - Forbidden”,说明 ASP.NET 已经运行起来了。

我自己修改的时候是所设置的路径值必须一样,如CKFinderTempPath =":外师外语系webckfinderuserfiles”,web.config的value也是一样,但我自己的电脑的这个问题能很好解决,而另一台服务器还依然有问题,郁闷之后由于赶时间还是乖乖的换成了fckeditor2.6.5,这回又涉及到了路径问题,因为默认的设置是基于网站根目录,根本不能适应随地使用的需要,花了好多功夫最后找到了一个解决办法,:

' 存放图片路径依然是基于站点,

 代码如下 复制代码

Dim ConfigUserFilesPath
ConfigUserFilesPath = "/web/web1/userfiles/"

一个高的写的添加X-UA-Compatible标签,提示用户安装GFC, 兼容 IE浏览器的方法,有需要的朋友参考一下。

源码中添加:

 代码如下 复制代码

<meta http-equiv=”X-UA-Compatible” content=”IE=edge,chrome=1″ />

IE=edge告诉IE使用最新的引擎渲染网页,chrome=1则可以激活Chrome Frame。

这样写可以达到的效果是如果安装了Google Chrome Frame(谷歌内嵌浏览器框架GCF),则使用GCF来渲染页面,如果为安装GCF,则使用最高版本的IE内核进行渲染。

Chrome Frame可以让旧版IE浏览器使用Chrome的WebKit渲染引擎处理网页,因此旧版IE用户可以体验到包括HTML5在内的众多现代网页技术。

标记用法(给网站添加X-UA-Compatible标签):

1.最基本的用法:在页面的头部加入

 代码如下 复制代码

<meta http-equiv=”X-UA-Compatible” content=”chrome=1″ />

用以声明当前页面用chrome内核来渲染。

复杂一些的就是本文一开始看到的那中用法:

 代码如下 复制代码

<meta http-equiv=”X-UA-Compatible” content=”IE=edge,chrome=1″ />

这样写可以达到的效果是如果安装了GCF,则使用GCF来渲染页面,如果为安装GCF,则使用最高版本的IE内核进行渲染。

使用CFInstall.js检测当前的IE浏览器是否安装了GCF?

利用IE的奇怪特性,如果DOM字典里不存在此标签,可使用js的document.createElement来创建,它就会添加到DOM字典里即可识别;

淘宝是添加注释的时候

 代码如下 复制代码

<!–[if IE]>
 <script src=”http://a.tbcdn.cn/p/fp/2011a/html5.js”></script>
 <![endif]–>

我是这样写的:

 代码如下 复制代码
<!–[if IE]>
 <script type=”text/javascript” src=”http://ajax.googleapis.com/ajax/libs/chrome-frame/1/CFInstall.min.js”></script>
 
 <style>
 .chromeFrameInstallDefaultStyle {
 /* default is 800px width: 800px; */
 border: 5px solid blue;
 .chromeFrameOverlayContent
 .chromeFrameOverlayContent iframe
 .chromeFrameOverlayCloseBar
 .chromeFrameOverlayUnderlay
 }
 </style>
 
 <script>
 // The conditional ensures that this code will only execute in IE,
 // Therefore we can use the IE-specific attachEvent without worry
 window.attachEvent(“onload”, function() {
 CFInstall.check({
 mode: “overlay”,
 node: “prompt”,
 destination: “http://clin003.com”
 });
 });
 
 </script>
 <![endif]–>

以上代码可以自动检测是否安装了GCF,如果没安装,则会提示用户安装,安装完成后,或自动跳转到http://www.111cn.net。

更详细可以参考

chrome的开发文档 Chrome Frame: Developer Guide

微软官方文档 Specifying Document Compatibility Modes

X-UA-Compatible是IE8的专用标记,它告诉IE8采用何种IE版本去渲染网页(比如人见人烦的IE6)。不过在IE6测试的时候也是能够“提示用户安装GFC”的。
IE版本:ie6.0.0.2900.5512.xpsp_sp3_gdr.101209-1647
ie6.0.0.2900.5512.xpsp_sp3_gdr.101209-1647

IE6下提示用户安装GFC页面

CFInstall.check

安装成功后自动转到指定页面,看到chrome渲染效果

 

经常会看到网站页有if lte IE if gte IE 这类代码,起初不知道什么意思,今天仔细找报找,终于发现了作用啊,经过google,baidu的搜索。
 代码如下 复制代码

<!--[if lte IE 6]>
<![endif]-->
IE6及其以下版本可见


<!--[if lte IE 7]>
<![endif]-->
IE7及其以下版本可见


<!--[if IE 6]>
<![endif]-->
只有IE6版本可见


<![if !IE]>
<![endif]>
除了IE以外的版本


<!--[if lt IE 8]>
<![endif]-->
IE8及其以下的版本可见

 


<!--[if gte IE 7]>
<![endif]-->
IE7及其以下的版本可见


用法:
(1)
可使用如下代码检测当前IE浏览器的版本(注意:在非IE浏览器中是看不到效果的)

 代码如下 复制代码
 <!––[if IE]>
       <h1>您正在使用IE浏览器</h1>
       <!––[if IE 5]>
           <h2>版本 5</h2>
       <![endif]––>
       <!––[if IE 5.0]>
           <h2>版本 5.0</h2>
       <![endif]––>
       <!––[if IE 5.5]>
           <h2>版本 5.5</h2>
       <![endif]––>
       <!––[if IE 6]>
           <h2>版本 6</h2>
       <![endif]––>
       <!––[if IE 7]>
           <h2>版本 7</h2>
       <![endif]––>
<![endif]––>


那如果当前的浏览器是IE,但版本比IE5还低,该怎么办呢,可以使用<!–[if ls IE 5]>,当然,根据条件注释只能在IE5+的环境之下,所以<!–[if ls IE 5]>根本不会被执行。
lte:就是Less than or equal to的简写,也就是小于或等于的意思。
lt :就是Less than的简写,也就是小于的意思。
gte:就是Greater than or equal to的简写,也就是大于或等于的意思。
gt :就是Greater than的简写,也就是大于的意思。
! : 就是不等于的意思,跟javascript里的不等于判断符相同

 


(2)
应该如何应用条件注释
    本文一开始就说明了,因为IE各版本的浏览器对我们制作的WEB标准的页面解释不一样,具体就是对CSS的解释不同,我们为了兼容这些,可运用条件注释来各自定义,最终达到兼容的目的。比如:
<!–- 默认先调用css.css样式表 –->

 代码如下 复制代码

<link rel="stylesheet" type="text/css" href="css.css" />
<!-–[if IE 7]>

<!–- 如果IE浏览器版是7,调用ie7.css样式表- –>

<link rel="stylesheet" type="text/css" href="ie7.css" />
<![endif]–->

<!–-[if lte IE 6]>

<!–- 如果IE浏览器版本小于等于6,调用ie.css样式表 -–>

<link rel="stylesheet" type="text/css" href="ie.css" />
<![endif]–>

    这其中就区分了IE7和IE6向下的浏览器对CSS的执行,达到兼容的目的。同时,首行默认的css.css还能与其他非IE浏览器实现兼容。


    注意:默认的CSS样式应该位于HTML文档的首行,进行条件注释判断的所有内容必须位于该默认样式之后。
    比如如下代码,在IE浏览器下执行显示为红色,而在非IE浏览器下显示为黑色。如果把条件注释判断放在首行,则不能实现。该例题很能说明网页对IE浏览器和非IE浏览器间的兼容性问题解决。

 代码如下 复制代码

<style type="text/css">
body{
background-color: #000;
}
</style>
<!-–[if IE]>

<style type="text/css">
body{
background-color: #F00;
}
</style>
<![endif]–->


    同时,有人会试图使用<!–-[if !IE]>来定义非IE浏览器下的状况,但注意:条件注释只有在IE浏览器下才能执行,这个代码在非IE浏览下非单不是执行该条件下的定义,而是当做注释视而不见。

[!--infotagslink--]

相关文章