HTTP2.0的目的就是经过支持请求与响应的多路复用来减小延迟、经过压缩HTTP首部字段将协议开销降至最低,同时增长对请求优先级和服务器端推送的支持,HTTP2.0不会改动HTTP的语义、HTTP方法、状态码、URI和首部字段等这些核心概念,可是HTTP2.0修改了数据传输的方式和数据格式化的方式。html
在传输层和应用层之间新增了二进制分帧层,它位于应用层以内,处于应用层可见的高层HTTP API之下的一个新机制,HTTP的语义不受影响,只是在传输期间对数据的编码方式作出修改,HTTP1.x以换行符做为纯文本的分隔符,而HTTP2.0将全部传输的信息分割为更小的消息和帧,并对它们采用二进制格式的编码。前端
HTTP2.0中的新概念:java
全部的HTTP2.0的通讯都是在一个TCP链接上完成,这个TCP链接能够承载任意数量的双向数据流,相应的,每一个数据流以消息的形式发送,而消息由一个或多个帧组成,这些帧能够乱序发送,而后再根据每一个帧首部的流标识符从新组装。因为全部的帧都采用二进制编码,因此首部字段都会被压缩。web
在HTTP1.x中,若是客户端想发送多个并行的请求以改进性能,就必须使用多个TCP链接,HTTP2.0实现了多路复用,客户端和服务器能够把HTTP消息分解为互不依赖的帧,而后乱序发送,最后在另外一端把它们从新组装起来。这样就能够只使用一个TCP链接便可并行发送多个请求和响应。后端
把HTTP消息分解为不少独立的帧以后,就能够经过优化这些帧的交错和传输顺序,进一步提高性能,为了作到这一点,每一个流均可以携带有31bites的优先值。服务器能够根据流的优先级,控制资源的分配,而在响应数据准备好以后,优先将最高优先级的帧发送给浏览器。跨域
在HTTP2.0,服务器能够额外的向浏览器推送资源,当浏览器请求资源A时,而服务器知道它极可能也须要资源B,服务器能够在浏览器发送请求前,主动将资源推送给客户端。这个功能能够帮助客户端将资源B放进缓存。浏览器
HTTP1.x的每一次通讯都会携带一组首部,用于描述传输的资源及其属性,这一般会增长500-800字节的开销,为了减小这些开销提高性能:缓存
在上面的例子中,第二次发送请求只须要发送变化了的字段,从而显著的减小了每一个请求的开销。安全
常见的前端安全问题包括如下几点:服务器
XSS是跨站脚本攻击的简称,这类安全问题的本质缘由在于:浏览器错误的将攻击者提供的用户输入数据当作JavaScript脚本给执行了。
1:用户输入框输入的数据不通过处理直接展现在页面上,该攻击手段最简单的防护方法就是将前端输入的数据都进行转义,好比将"<"、">"转义为"<",">"实体字符,这样输入数据里面的<script></script>就不会被浏览器当作脚本执行了。可是在Jquery
中,append()
在添加元素的时候,会使用eval将参数里面的<script>标签脚本执行一遍,若是在攻击时将"<",">"使用unicode码假装起来,好比:"u003cscriptu003ealert('a')",接下来在对输入字符进行转义的时候,假装成"u003c"的"<"就会被漏掉,append的时候,则会被从新调用。这个时候须要将unicode码的开头"\"进行转义处理。
2:img标签的攻击,img标签在图片加载失败的时候,会调用该元素上的onerror事件,攻击者能够利用该机制进行攻击。好比<img src="/" onerror="javaScript:alert(document.cookie);" />
3:若是后端从URL上获取GET请求的参数时,直接使用该参数,就会把URL上的脚本带到页面上来。因此须要在前端对该参数进行html字符转义。
可是不少时候XSS攻击都防不胜防,若是页面中被XSS攻击了,页面中用户的敏感信息主要是存储在cookie上的,这个时候应该使用cookie的HttpOnly属性,把cookie设置为只能HTTP请求使用,这样JavaScript脚本就不能读写cookie了。
前端页面有时会用到第三方的页面组件,一般会以iframe
的方式来引入,这样会带来很多的安全隐患。攻击者能够在iframe中运行JavaScript脚本,破坏前端的用户体验。若是iframe中的域名因过时而被攻击者抢注,或者被第三方黑客攻破,iframe中的内容被替换掉,从而利用用户浏览器中的安全漏洞下载安全木马等等。
在HTML5中,iframe有sandbox
的安全属性,经过该属性能够对ifame的行为进行各类限制,充分实现“最小权限”原则。sandbox属性的参数有如下值:(IE10+)
若是sandbox只添加这个属性而保持属性为空,那么浏览器就对ifame实施最严厉的限制,就是除了容许显示静态资源之外,其余什么都作不了,好比不许提交表单,不许弹窗,不许执行脚本,连Origin都会被强制从新分配一个惟一的值,这样iframe中的页面访问本身的服务器都会被算做跨域。
CSRF是跨站请求伪造的简称,HTTP请求是无状态的,为了记录用户的状态,服务器端通常会使用session技术,在某一次请求响应时(通常是登陆请求),服务器会将sessionId做为cookie返回浏览器缓存起来,在接下来的每次请求中,请求头都会携带该cookie传输给服务器,而CSRF攻击就是利用用户的cookie去完成一些恶意操做。
GET型CSRF:后台程序为了省事,会把应该提交数据的请求作成GET请求,删除博客的请求/delete?id=1,那么攻击者只须要在评论区上传<img src="/delete?id=1" />的脚本,只要页面加载该评论,这篇博客就会被删除掉。这样就要严格要求提交数据的请求严格按照POST请求去作,更不要使用JSONP去作提交型接口。
POST型CSRF:诱导用户点击进入一个新的页面,该页面含有自动提交的表单,因为新窗口是具备当前会话的,因此该表单的请求就会携带上用户的cookie,从而进行恶意的操做,例如用户登陆www.bank.com网站以后,被诱惑登陆www.hacker.com连接,该连接页面发起一个post请求,因为请求的域名为www.bank.com,因此会携带该用户的sessionId,而后进行转帐等操做。
预防手段:1:在HTTP协议中,请求头有referer字段,记录该http请求的原地址,攻击者伪造请求的页面的域名为www.hacker.com,因此服务器端就能够判断该请求非法,可是referer也有可能被篡改。2:token验证,在用户登陆时,将服务器随机生成的token返回给前端缓存下来,在每次请求时自动携带上该token,这样CSRF攻击者无法知道token的值,该请求就被判断为非法。
不少时候,咱们的网站不是直接就访问咱们的服务器,中间会通过不少层的代理,若是在某一个环节,数据被中间层的劫持者所截获,这样就能获取到用户的帐号密码等保密数据,好比用户使用攻击者创建的wife热点,那么攻击者就能获取该用户收发的全部数据,这里最好是都使用https访问网站。
当使用https访问网站的时候,最多见的攻击方式就是SSL劫持攻击和SSL剥离攻击,SSL劫持须要将攻击者接入到用户和服务器中间,在传输的过程当中伪造SSL证书并发给浏览器,这种攻击方式会引发浏览器的证书错误提示,若是用户选择继续操做,那么https传输的数据就能被攻击者破解,SSL剥离攻击也须要将攻击者设置为中间人,是利用http协议的重定向,将https协议访问的网站从新重定向为http协议访问,因为http协议传输的数据是明文的,这样数据就能被攻击者获取。