Beacon
Fetch
请求添加keeppalive参数
获取url参数
var url = window.location.search;
if (url.indexOf('?') !== -1) {
url = url.substr(1);
var querys = url.split('&');
for (var i = 0; i < querys.length; i++) {
this.query[querys[i].split('=')[0]] = querys[i].split('=')[1];
}
}
axios 取消请求
CSRF
XXS
一段恶意的js代码注入到目标网站(对用户输入都做校验或者转义)
http缓存
响应头 Cache-control
max-age 决定客户端资源被缓存多久。
s-maxage 决定代理服务器缓存的时长。
no-cache 表示是强制进行协商缓存。
no-store 是表示禁止任何缓存策略。
public 表示资源即可以被浏览器缓存也可以被代理服务器缓存。
private 表示资源只能被浏览器缓存。
强制缓存
返回200 从内存中读取
// 往后的10秒钟内如果该资源被再次请求,则从缓存中读取
'Cache-Control':'max-age=10'
协商缓存
返回304 从内存中读取
1.基于last-modified的协商缓存实现方式是:
首先需要在服务器端读出文件修改时间,
将读出来的修改时间赋给响应头的last-modified字段。
最后设置Cache-control:no-cache
当客户端读取到last-modified的时候,会在下次的请求标头中携带一个字段:If-Modified-Since(服务器第一次修改时候给他的时间)
(发起 HTTP 请求的时候,服务器可以返回Last-Modified响应头,这个响应头的值是一个时间戳。如果服务器这么做了,那么浏览器会缓存这个资源,并且在今后请求该资源的时候,会带有if-modified-since请求头,它的值是上一次Last-Modified响应头中的时间戳。服务器收到带有if-modified-since请求头的请求,根据请求头中的时间戳,对文件进行判断,如果文件内容在该时间戳之后到当前时间里没有被修改,那么服务器返回一个 304 响应,该响应表示只有 HEAD 没有 BODY。浏览器如果收到 304 响应,就会以缓存的内容作为 BODY。)
2.基础ETag的协商缓存
ETag就是将原先协商缓存的比较时间戳的形式修改成了比较文件指纹(根据文件内容计算出的唯一哈希值)