--- title: http缓存 cover: 'https://tva2.sinaimg.cn/large/0072Vf1pgy1foxlhxz1asj31kw0w0e0n.jpg' abbrlink: 7350ba96 date: 2022-11-18 21:39:07 tags: --- CTRL+F5 只更新了當前請求,子頁面不能更新; 在IIS中: 採用覆蓋文件; 文件替換情況下: 很久之前就寫好了需求(最後修改日期在之前),然後現在你更新的時候採用的是文件橫行覆蓋,這時文件修改日期是你寫好需求之時; 瀏覽器發現這是很久之前的更新,不是"最近"的更新 , ??器第二次?求上次?求?的?源?,??器?在HTTP?求?中添加一?If-Modified-Since的??,用???服?器???之后文件是否被修改? 如果服?器端的?源?有?化,?自?返回304??,使用??器?存,?而保?了??器不?重复?服?器端?取?源,也保?了服?器有?化?,客?端能?及?得到最新的?源. 好像不對吧; chrome firefox 都是自動為js css加上緩存時間; 先放上??吧,Chrome和Firefox?js、css之?的文件,在?存中的?存??,是: (???? - ?文件的最后修改??) ÷ 10 所以:只能等它過期; 加參數:是給aspx這種動態文件裡面加,所以能訪問到js ?充一下,如果?置no-cache的?候?IE是有效的,但是?于firefox是不行的,如果?firefox也不?存要在header中加一?Cache-Control: no-cache, no-store 也就是?firefox的失效??=?在??+0.1\*(time-last-modified ),就是他?在它上一次修改??的十分之一的??差的?候失效。 ?什么?么做呢?我?可以想象一?文件越久?有修改,那么它就越?定,所以?存的??也就越?。只是????差要除以下10。 比如一?文件上次修改???100天之前,那么那10天后才?失效。 ?商?存就是?制?存失效后,??器???存??向服?器?起?求,由服?器根据?存???定是否使用?存的?程,主要有以下?种情?: chrome自動增加強制生效; ?制?存优先于?商?存?行,若?制?存(Expires和Cache-Control)生效?直接使用?存,若不生效??行?商?存(Last-Modified / If-Modified-Since和Etag / If-None-Match),?商?存由服?器?定是否使用?存,若?商?存失效,那么代表??求的?存失效,返回200,重新返回?源和?存??,再存入??器?存中;生效?返回304,??使用?存。具体流程?如下: ?存的机制 看到?里,不知道你是否存在??一?疑?:如果什么?存策略都??置,那么??器?怎么?理? ?于?种情?,??器?采用一???式的算法,通常?取???中的 Date ?去 Last-Modified 值的 10% 作??存??。 八、用?行????器?存的影? 所?用?行????器?存的影?,指的就是用?在??器如何操作?,?触?怎?的?存策略。主要有 3 种: 打?网?,地址??入地址: 查找 disk cache 中是否有匹配。如有?使用;如?有??送网??求。 普通刷新 (F5):因? TAB 并?有??,因此 memory cache 是可用的,?被优先使用(如果匹配的?)。其次才是 disk cache。 ?制刷新 (Ctrl + F5):??器不使用?存,因此?送的?求?部均?有 Cache-control: no-cache(?了兼容,??了 Pragma: no-cache),服?器直接返回 200 和最新?容。 1. 缓存协议; 遵守不遵守协议是自己决定的,如浏览器本身硬是要缓存那也没办法 如果服务器没有指明缓存策略,浏览器会根据自身的缓存规则进行缓存,如chrome 再会以一定的算法进行缓存; 2. ctrl +F5 只是当前请求会强制重新请求;(就是那个圆圈转完),后续的请求仍是 缓存中读取; 像一些页面是嵌套的; # 跨域 1. 这是浏览器自己的请求安全策略,所以postman是没有什么跨域的说法; 2. 在历史中:为了解决这个浏览器搞出的东西,使用了jsonp 等方案 3. 后来:为解决上面的问题,出现了cors 跨域协议,协议双方是浏览器与服务器; 目前大多数服务器与浏览器都支持这个协议沟通; 4. 注意:跨域是浏览器在A中,出现了访问B的请求; 浏览器会去询问B是否允许跨域; (之前我一直以为是询问A!!) 原因见以下例子 \[跨源资源共享(CORS) - HTTP \| MDN (mozilla.org)\](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS) \> 以下的例子可以看到 mybank没有对来源请求做判断导致的; 所以在evil 访问band要去询问mybank才对; \> \> \[彻底搞清浏览器和服务器跨域 - kgwei - 博客园 (cnblogs.com)\](https://www.cnblogs.com/kgwei520blog/p/13667378.html) ### 为什么要有跨域 \> Ajax 的同源策略主要是为了防止 CSRF(跨站请求伪造) 攻击,如果没有 AJAX 同源策略,相当危险,我们发起的每一次 HTTP 请求都会带上请求地址对应的 cookie,那么可以做如下攻击: 1. 用户登录了自己的银行页面 mybank.com,mybank.com向用户的cookie中添加用户标识。 2. 用户浏览了恶意页面 evil.com。执行了页面中的恶意AJAX请求代码。 3. evil.com向http://mybank.com发起AJAX HTTP请求,请求会默认把http://mybank.com对应cookie也同时发送过去。 4. 银行页面从发送的cookie中提取用户标识,验证用户无误,response中返回请求数据。此时数据就泄露了。 5. 而且由于Ajax在后台执行,用户无法感知这一过程。