黑马程序员技术交流社区

标题: 【上海校区】Ajax在IE的Get请求缓存问题 [打印本页]

作者: 战行者    时间: 2018-6-26 11:39
标题: 【上海校区】Ajax在IE的Get请求缓存问题
   在ajax请求中,有post请求和get请求,有时候,需要请求多次,这时候浏览器每次都需要加载cssjsimg等资源,资源开销很大,浏览器在这方面会做一个优化,在第一次请求的时候,将很多资源做了一个缓存备份,下次请求的时候直接访问本身备份的资源即可,可以很明显的加快访问的速度,但是ajax请求中出了静态资源以外,还有动态数据,比如对php的请求,因为我们每次请求都不会请求的同样的数据,这时候,要求我们对浏览器的缓存做处理。post请求时不会有缓存的,get请求一般也不会有缓存,只有当浏览器是IE的时候get请求才会有缓存。
缓存效果:
解决方案:
一、 设置请求地址每次都不同1、 设置随机数
将请求的url地址后面加随机数,例:
url:”test.php?”+Math.random(),
2、设置时间戳
将请求的url地址后面加随机数,例:
url:”test.php?”+new Date().getTime(),
二、设置请求头禁止缓存
在发送的请求时候设置请求头禁止缓存,例:
xhr.setRequestHeader('If-Modified-Since','0);  
值随意不一定是0,  1,2,3,4都可以。
解释:
当我们请求服务器某个文件的时候,如果设置了这个请求头,会把这个请求头的值与所请求的服务器对应的文件的最后修改时间做个对比,如果对比修改时间一样,说明没有修改过,则读取本地的浏览器缓存文件内容,否则读取服务器上最新的文件内容。
3、 设置服务器端响应头禁止缓存
在服务器端声明响应头中没有缓存,例:
header("Cache-Control:no-cache,must-revalidate");
这种方式彻底解决了php动态文件缓存的问题,同时也不会在客户端生成缓存垃圾文件。
这里建议采用时间戳或随机数的方式:
虽然在IE浏览器会产生很多缓存文件,由于缓存文件是保留在用户的电脑中,对于我们的服务器是没有任何影响的。


作者: wuqiong    时间: 2018-6-26 14:12

作者: 小影姐姐    时间: 2018-6-27 14:05

作者: 不二晨    时间: 2018-6-27 14:46
厉害厉害
作者: 吴琼老师    时间: 2018-6-28 14:53





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2