DSBD

1.浏览器缓存

  浏览器每次发起请求,都会先在浏览器缓存中查找该请求的结果以及缓存标识 

  强制缓存优先于协商缓存进行,若强制缓存(Expires和Cache-Control)生效则直接使用缓存,

  若不生效则进行协商缓存(Last-Modified / If-Modified-Since和Etag / If-None-Match),

  协商缓存由服务器决定是否使用缓存,若协商缓存失效,那么代表该请求的缓存失效,返回200,

  重新返回资源和缓存标识,再存入浏览器缓存中;生效则返回304,继续使用缓存。

  强缓存     1.Expires Expires: Wed, 22 Oct 2018 08:41:00 GMT

                    表示资源会在 Wed, 22 Oct 2018 08:41:00 GMT 后过期。(受限于本地时间,如果修改了本地时间,可能会造成缓存失效)

                   2.Cache-Control  Cache-Control:max-age=300(超过300m,优先级高于expires)

  协商缓存   协商缓存就是强制缓存失效后,浏览器携带缓存标识向服务器发起请求协商缓存生效,返回304和Not Modified

                    1. Last-Modified(以秒计时,本地打开缓存文件,不能命中缓存)

                    2. ETag(当前资源文件的一个唯一标识(由服务器生成),要优于Last-Modified)

   实际应用  不常变化的资源 (Cache-Control: max-age=31536000) 静态组件(Expires不过期)

                   频繁变动的资源    需要使用Cache-Control: no-cache 使浏览器每次都请求服务器, 配合 ETag 或者 Last-Modified 来验证资源是否生效

2.安全策略

1、跨站脚本攻击(XSS)

     一种“HTML注入”,用户的数据被当成了HTML代码一部分来执行,从而产生了新的语义

     XSS的防御

    1、HttpOnly (浏览器禁止页面的Javascript访问带有HttpOnly属性的cookie)

    2. 输入检查 输出检查(XSS Filter)转义字符,对于用户的输入应该是永远不信任的。最普遍的做法就是转义输           入输出的内容,对于引号、尖括号、斜杠进行转义

    3、CSP   CSP 本质上就是建立白名单,开发者明确告诉浏览器哪些外部资源可以加载和执行

                    1.设置 HTTP Header 中的 Content-Security-Policy

                     2.设置 meta 标签的方式 

2、CSRF(跨站点请求伪造)

      CSRF攻击是攻击者利用用户身份操作用户账户的一种攻击方式,攻击者构造出一个后端请求地址

     1、验证码

     2、由于Token的存在,攻击者无法再构造出一个完整的URL实施CSRF攻击

     3、不让第三方网站访问到用户 Cookie



5.url请求到渲染,中间优化

   1. 用户输入URL地址

   2. 浏览器解析URL解析出主机名

  3. 浏览器将主机名转换成服务器ip地址(浏览器先查找本地DNS缓存列表 没有的话 再向浏览器默认的DNS服务器     发送查询请求 同时缓存)

  4. 浏览器将端口号从URL中解析出来

  5. 浏览器建立一条与目标Web服务器的TCP连接(三次握手)

  6. 服务端返回html

  7.浏览器渲染(渲染进程是多线程的,GUI渲染线程,js引擎线程,事件触发线程,定时触发器线程,异步http请求线程)

  - DOM树构建

  - CSSOM树构建

  - RenderObject树构建

  - 布局

 - 绘制


**使用DNS预解析**

DNS   在 一次请求中,DNS解析可以占到请求时间的三分之一左右(这点有待验证),所以如果可以缩短DNS解析时间,就可以加快页面的打开速度。 rel="dns-prefetch" 用以DNS预解析

减少DNS查找(例如原来有5个img server,分别为img1.xxx.com至img5.xxx.com,则现在可以减少到3个)

**请求**

1.尽量减少HTTP请求  (CSS sprites将背景图片合并成一个文件)多个接口合并

2.避免空src或者是href值 

空的src和href都会导致多余的HTTP请求,虽然不影响加载时间,但是会对服务器产生不必要的流量和压力。浏览器仍然会向服务器发起一个 HTTP 请求

3.**避免重定向**3xx是重定向相关的HTTP响应代码,避免404浏览器找不到资源的情况发生

4.**使Ajax可缓存**我们可能希望`GET`请求不被缓存$.ajaxSetup({ cache: false });

5.减小cookie大小  减小cookie的大小,因为在发请求时浏览器会将cookie信息发送到server端,所以应该只在cookie中存必要的信息且越长度越小越好

6.利用浏览器缓存

**浏览器渲染**

1.压缩资源(webpack)

2.CSS放在顶部,JS放在底部`defer`和 `async` 在网络读取(下载)这块儿是一样的,都是异步的(相较于 HTML 解析)

3.重排reflow与重绘repaint

 只触发重绘不触发重排的一些CSS属性:js尽量少访问dom节点和css 属性,不要通过父级来改变子元素样式,最好 直接改变子元素样式,改变子元素样式尽可能不要影响父元素和兄弟元素的大小和尺寸,尽量通过class来设计元素 样式,切忌用style 多次操作单个属性

#### 代码部分

for循环、迭代、同步、重定向、阻塞请求,未删除重复、无用的代码,未加入Async异步机制


6.水平垂直居中,两边固定中间自适应布局

position transform 

position: absolute;left: 50%;top: 50%;transform: translate(-50%,-50%);

flex布局

display: flex;//flex布局 justify-content: center;//使子项目水平居中 align-items: center;//使子项目垂直居中 

table-cell布局 

.wp{display: table-cell;text-align: center;vertical-align: middle;}.box{display: inline-block;}

absolute + calc

.wp { position: relative;}.box { position: absolute;; top: calc(50% -50px); left: calc(50% -50px);}

两边固定中间自适应布局

1).绝对定位法


2).使用自身浮动法


3、css3新特性,使用flex


4.. 双飞翼布局


7.跨域,如何跨域,跨域图片如何处理

    域名、协议、端口有一个不同就不是同源,三者均相同,这两个网站才是同源

    浏览器会对上面提到的跨域请求作出限制。浏览器之所以要对跨域请求作出限制,是出于安全方面的考虑,因为跨域请求有可能被不法分子利用来发动 CSRF攻击。

 JSONP

JSONP 本质上是利用 

你可能感兴趣的:(DSBD)