常见Http请求头和响应头
301、302、304、307、403是什么
301:永久转移
302:临时转移
304:未修改(缓存)
307:临时重定向
403:禁止(服务器拒绝请求)
缓存相关的HTTP请求/响应头
Expires |
服务端告诉浏览器,先把这个文件缓存起来,在这个过期时间之前,该文件都不会变化 |
Expires: Mon, 1 Aug 2016 22:43:02 GMT |
Cache-Control |
由于Expires给定的是绝对时间,而客户端的系统时间可以由用户任意修改, Cache-Control为相对时间 |
Cache-Control: max-age=80 |
Last-Modified(response header) / If-Modified-Since (request header) |
服务端收到请求后会对比目前文件的最后修改时间和该请求头的信息,如果没有修改,那就直接返回304给浏览器,而不返回实际资源。如果有变化了,就返回200,并且带上新的资源内容 |
If-Modified-Since:Mon, 01 Aug 2016 13:48:44 GMT |
Etag / If-None-Match |
第一次请求后响应头中包含了Etag,作为时间标签,下一次请求时会把原来的Etag标签带上(在请求头中变成了If-None-Match)作为校验标准,若这个文件如果发生了改变,则Etag也会改变。服务器对比浏览器请求头中的的If-None-Match:如果相同就返回304,而不返回实际资源如果不同,就返回200和新的资源。 |
Http请求报文由几个部分组成
一个HTTP请求报文由请求行(request line)、请求头(header)、空行和请求数据4个部分组成
响应报文和请求报文结构类似,不再赘述
http请求过程有哪些?
-
对网址进行DNS域名解析,得到对应的IP地址
-
根据这个IP,找到对应的服务器,发起TCP的三次握手
-
建立TCP连接后发起HTTP请求
-
服务器响应HTTP请求,浏览器得到html代码
-
浏览器解析html代码,并请求html代码中的资源(如js、css、图片等)(先得到html代码,才能去找这些资源)
-
浏览器对页面进行渲染呈现给用户
-
服务器关闭TCP连接
请描述HTTP握手过程
当建立协议的时候,TCP进行了3次握手
-
客户端请求连接服务器
-
服务器响应成功
-
客户端回应服务器准备开始连接
当终止协议的时候,tcp进行了4次挥手
-
客户端向服务器发送,临时请求
-
服务器向客户端发送,还有数据没有传输完成,请稍等
-
服务器向客户端发送,传输完成,可以随时替换请求了
-
客户端向服务器发送,你可以请求吧,不用回复了
然后各自对应请求
-
服务器初始化请求
-
客户端等待2秒后没有收到消息,切换请求
HTTP通信的缺点
-
通信使用明文,可能被窃听
-
不验证通信方身份,可能遭遇伪装(跨站点请求伪造)
-
无法证明报文完整性,可能已遭篡改(运营商劫持)
介绍HTTPS
HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
请描述HTTPS握手过程(HTTPS工作流程/HTTPS的加密过程/HTTPS怎么建立安全通道)
- 客户端发起HTTPS请求
用户在浏览器里输入一个https网址,与服务器建立ssl连接
- 服务端响应
服务器收到客户端请求后,确认加密通信协议版本是否一致,如果版本一致则返回服务器证书(事先配置好的公钥证书(public key certificate)返回给客户端),否则关闭加密通信
- 客户端验证公钥证书
客户端收到公钥证书后会检查证书的提交机构以及过期时间,如果没有问题就随机产生一个密钥(对称密钥)
- 客户端传输秘钥给服务端
客户端用证书的公钥加密这个对称密钥,发给Server
- 服务端解密
服务端利用自己的私钥解密出这个对称秘钥,至此,Client和Server双方都持有了相同的对称密钥
- 完成加密过程
之后服务器与客户端使用对称密钥进行加密传输
Server使用对称密钥加密“明文内容A”,发送给Client。
Client使用对称密钥解密响应的密文,得到“明文内容A”。
Client再次发起HTTPS的请求,使用对称密钥加密请求的“明文内容B”,然后Server使用对称密钥解密密文,得到“明文内容B”。
原理图如下
HTTPS的优点
- SEO方面
谷歌曾在2014年8月份调整搜索引擎算法,并称“比起同等HTTP网站,采用HTTPS加密的网站在搜索结果中的排名将会更高”。
- 安全性
尽管HTTPS并非绝对安全,掌握根证书的机构、掌握加密算法的组织同样可以进行中间人形式的攻击,但HTTPS仍是现行架构下最安全的解决方案,主要有以下几个好处:
(1)、使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;
(2)、HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。
(3)、HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。
HTTPS的缺点
虽然说HTTPS有很大的优势,但其相对来说,还是有些不足之处的,具体来说,有以下2点:
1、SEO方面
据ACM CoNEXT数据显示,使用HTTPS协议会使页面的加载时间延长近50%,增加10%到20%的耗电,此外,HTTPS协议还会影响缓存,增加数据开销和功耗,甚至已有安全措施也会受到影响也会因此而受到影响。
而且HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。
最关键的,SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行。
2、经济方面
(1)、SSL证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。
(2)、SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗(SSL有扩展可以部分解决这个问题,但是比较麻烦,而且要求浏览器、操作系统支持,Windows XP就不支持这个扩展,考虑到XP的装机量,这个特性几乎没用)。
(3)、HTTPS连接缓存不如HTTP高效,大流量网站如非必要也不会采用,流量成本太高。
(4)、HTTPS连接服务器端资源占用高很多,支持访客稍多的网站需要投入更大的成本,如果全部采用HTTPS,基于大部分计算资源闲置的假设的VPS的平均成本会上去。
(5)、HTTPS协议握手阶段比较费时,对网站的相应速度有负面影响,如非必要,没有理由牺牲用户体验。
HTTP和HTTPS的区别
-
https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
-
http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
-
http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
-
http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
-
https对搜索引擎更友好
-
http基于应用层,https基于传输层
-
https在浏览器里面显示绿色安全锁,http没有