跨域问题
jsonp:通过script标签获取服务器的js文件,并且该文件是可执行的带有数据的js代码,从而实现跨域,只支持get方法。
服务器代理:前端与同源的服务器连接,该服务器反向代理到目标服务器,起到中转站的功能。
cors:跨域本质请求已发生,只是返回结果被浏览器拦截,此时需要返回的数据头Access-Control-Allow-Origin值必须符合请求头orgin的值,而Referer可以用来统计来源网站。
CSRF
本质是由于cookie在访问同一个网站时,浏览器会自动带上cookie导致的。
1.登录银行网站,银行网站产生cookie。
2.同时打开恶意网站,恶意网站虽然无法直接获得cookie,但恶意网站发送请求到银行网站浏览器会自动带上cookie,从而实现恶意行为。
3.解决方法:token法-接口返回随机token并让前端带上,后端进行校验。cookie的samesite属性现在跨站发送cookie。referer/origin校验请求来源网站是否合法。
XSS
本质是由于直接使用innerHTML执行不安全的字符串导致的。
1.存储型:评论或文章等发式将恶意脚本保存到服务器,导致别的用户阅读时执行该脚本。
2.反射型:恶意脚本放在网站url上,并且伪造后骗用户点击,从而在用户点击后执行该脚本。
3.解决方法:转义输出内容,替换特殊符号,对提交内容过滤特殊符号。
option预检请求
1.对于非简单请求,需要先发送预检请求,如果origin符合网站白名单等情况时则发送实际请求,响应头的Acess-control-max-age可以用来设置预检缓存时间。
缓存
1.请求服务器时,接口返回cache-control:max-age=3600(s)(no-cache:不使用强缓存,每次都使用协商缓存;no-store:不使用任何缓存,每次都请求服务器),在3600s内会直接使用本地缓存资源。(使用expire则是给一个绝对时间,优先度较低)
2.如果超过时间,再使用协商缓存,即先向服务器发送请求判断缓存是否过期,未过期返回304并使用缓存,过期则返回200及新资源。有两种标识方式,一种是使用Etag和If-not-match根据文件内容生成哈希并比对哈希是否变化判断,另一种使用last-modefied和if-not-modefied根据文件最后更新时间进行判断。
3.不使用缓存的方法:url上加上随机字符串;使用元标签;响应头Cache-Control no-store;
网络协议
1.UDP是一种无连接,不可靠,基于报文的传输层协议,TCP是一种连接的,可靠的,基于字节流的传输层协议,三次握手建立连接,四次挥手断开连接。
2.三次握手:客户端发送SYN,服务器返回ACK(确认)+SYN,客户端最后发送ACK(确认)。
3.四次挥手:客户端发送FIN,服务器返回ACK(确认),但此时可能有数据还未传输完毕,等都传输完毕后,再发送FIN,然后客户端返回ACK(确认)。
4.三次握手和四次挥手的最大区别在于挥手的时候已经是连接状态,可能有数据的传输,并且由于TCP全双工的特性,相当于两个方向的信号通道。
5.TCP保证安全性:校验和对数据段进行计算校验,序列号确保数据包的顺序,超时重传保证数据尽可能到达。
6.滑动窗口保证提高数据传输的效率。
PUT/DELETE/POST
幂等是指使用同样的参数去请求后得到的服务器状态相同,PUT和DELETE请求都是幂等的。
HTTPS
对称加密是使用同一把密钥进行加密解密,速度快但不安全。
非对称加密则是使用公钥和私钥进行加密解密,特性是公钥加密私钥才能解密,私钥加密公钥才能解密,速度慢但安全。
HTTPS使用非对称加密传输对称加密的密钥,从而实现两者优点的结合,简单来说,服务器给浏览器公钥,浏览器生成对称加密的密钥后再用公钥加密这个密钥,然后传输给服务器,服务器用私钥去进行解密拿到密钥,再用该密钥加密数据传输给浏览器。
数字证书:数字证书用于解决公钥篡改问题,浏览器根据证书主要进行域名匹配,有效性验证(是否过期),信任链验证,数字证书由CA颁发。数字证书包含了持有者信息,公钥,数字签名,其中数字签名是根据证书内容使用私钥加密生成的,客户端获取该证书后,使用公钥解密数字签名并验证证书信息是否与签名信息一致,起到防篡改作用。
HTTP2和HTTP1
http1.0: 一个tcp连接一个请求,文本传输。
http1.1:tcp连接请求默认不关闭,即connetion:keep-alive,因此可以有多个请求,但请求通信按次序进行。
http2.0:全双工通信,多路复用,使用二进制分帧传输,所以一个连接可以有多个请求。
为何丢包多时HTTP2效果不如HTTP1
HTTP2通过将文件流切成data和header帧来解决请求队头阻塞的问题,但tcp依然存在队头阻塞问题,如果一个数据包丢失,整个连接需要等数据包重传到达才能继续进行,此时http1由于多个连接只有一个会卡住,其他正常传输,而http2则因为共享连接导致出现问题。
状态码
1XX临时响应,切换协议或者继续请求,2XX请求成功,3XX重定向或者跳转其他域名或者使用缓存,4XX请求错误,5XX服务器错误
防盗链机制
通过referer筛选来源网站;ip黑白名单;token验证;验证码;
优化首屏加载速度
1.网络连接角度:使用cdn,减少重定向,进行文件压缩
2.资源加载:使用treeShaking,代码切割和懒加载,使用defer/async异步加载js文件,内联CSS
3.缓存:强缓存协商缓存.
图片加载速度优化
1.雪碧图减少请求次数。
2.使用缓存(DNS缓存或者浏览器缓存)
3.懒加载
4.图片压缩
5.CDN
单点登录
用户登录A网站,未登录,跳转SSO网站并且将A网站作为returnURL参数传过去,SSO网站检查全局会话,发现未登录,要求登录,登录成功后返回token作为参数传回去,A网站将token给SSO网站校验,通过则登录,如果SSO发现已登录,则会直接返回token不要求账号密码。
线程/进程/协程
进程:有独立资源空间,资源分配单元。
线程:cpu分配单元,共享进程中的资源空间。
协程:用户级线程,切换代价小。