·在不同的域中存储缓存文件
将静态内容放置到不同的域中确实是一个好办法。首先,浏览器能够打开其它两个并发的链接来下载静态文件。另一个好处就是你不需要发送cookies到静态文件上。当你放置静态文件到相同的域上作为你的Web应用程序时,浏览器会发送所有的ASP.NET cookies以及你Web应用程序上生成的所有其它cookies。这会使得请求大变得必要的大并且还浪费带宽。你不需要发送这些cookies来访问静态文件。因此,如果你放置了静态文件在一个不同的域中,这些cookies将 不会发送。例如,放置你的静态文件到www.staticcontent.com域中而你的网站正运行在www.dropthings.com上。其它域并不需要与网站的完全 不同。它仅仅是一个别名并且共享相同的Web应用程序路径。
·SSL不能进行缓存,因此尽量少使用
任何以SSL方式提供的内容都不会被缓存。因此,你需要将静态内容放置到SSL的外部。此外,你应该试着限制SSL仅仅用于一些安全页面,诸如登录页面或者付款页面。站点重置应该作为跨规则HHTP的外部SSL。SSL加密请求和响应会为服务器增加额外的负载。加密后的内容也比加密前的内容要大,因此会更耗费带宽。
HTTP POST 请求不能缓存
缓存仅仅针对HTTP GET请求才会发生。HTTP POST请求不会进行缓存。因此,你想要实现的任何AJAX调用要达到缓存都需要使用HTTP GET这种方式。
·生成Content-Length 响应头
当你通过Web服务调用或者HTTP handlers动态提供内容时,确保你发射了 Content-Length 头。这样浏览器会以更快的速度下载内容,因为它根据查找Content-Length 头从响应中知道下载了多少字节。当这个头存在时,浏览器能够进行更加持续的链接。这样节约了浏览器需要为每个请求建立一个新链接所花费的时间。当没有Content-Length 头时,浏览器不知道它将从服务器上获得多少字节,因此只要从服务器上接收到字节便会一直保持链接打开直到链接关闭为止。因此,你损失了很多因为下载很多小文件诸如CS, JavaScripts以及图片所带来的时间。
·如何在IIS中配置静态内容
在IIS管理器中,你可以在网站属性对话框中的“HTTP头”标签中为所有IIS处理的请求定义期满头。在这里你可以定义是否期满内容立即执行或者某些天后期满或者某个具体的日期期满。第二个选项(期满后)使用相对期满日期,不使用绝对期满日期。这是非常有用的,因为每个请求它都会工作。无论是用户请求一个静态文件,IIS都会基于从期满后的天/月数计算期满日期。
对于由ASP.NET提供的动态页面,handler能够修改期满handler并重写IIS的默认设置。