非对称加密,如今用的几乎都是非对称加密,本身有一个密钥对公钥和私钥,公钥能够给任何人知道,别人经过公钥加密发数据给本身,本身经过密钥解密。算法
数字签名,当别人知道你的公钥,虽然不能解密传输的数据,可是能够劫持以后经过公钥加密伪造数据发送给你,这时候就须要数字签名了。将摘要信息用发送者的私钥加密,与原文一块儿传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,而后用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。若是相同,则说明收到的信息是完整的,在传输过程当中没有被修改,不然说明信息被修改过,所以数字签名验证传输的内容是不是对方发送的数据,发送的数据没有被篡改过。apache
数字证书,好比有一个中间人经过一系列方法把你的电脑某我的的公钥给伪造了,而后你一直觉得这是那我的的公钥,这时候就算被攻击了。这时候须要CA认证机构,也是经过公钥密钥加数字签名的方式,来验证咱们公钥的真实性。(我的理解成CA机构永远不会被伪造攻击,因此能安全)浏览器
当咱们浏览器输入一个域名地址以后,会先去浏览器本地缓存查找有没有域名对应的IP地址,若是没有会去本机的host文件去查询有没有域名和ip的指向,因此咱们常常会在host文件去配置指向。再没有就会进行DNS解析,解析出域名对应的IP地址。通常来讲DNS已经够了,可是DNS是没有全世界全部的网址的,因此还有一个更权威的机构,gTLD Server,,每个顶级域名对应的IP都有记录。简单说第一步就是要把域名解析出IP地址。缓存
http是无状态的,客户端和服务端不会知道以前通讯的是谁。http1.0以后新增了持久链接,也就是说一次TCP链接能够发送多个请求,在浏览器的network里面能够看见response headers的Connection: keep-alive就是持久链接的标志,而后看connection id,相同就是用的同一个TCP链接。tomcat
http实体主体其实就是做为数据在http中传输的数据,能够等价为报文主体,报文主体是http的一部分。能够采用压缩把实体主体压小,在客户端解析数据,也能够分块传输实体主体的方法提高传输效率。咱们若是在下载东西的过程当中断了,按照之前咱们是须要从新下载的,可是如今能够在中断中继续下载。咱们可使用到获取范围数据,这种叫作范围请求。安全
http有请求报文和响应报文,都是分为首部和报文主体组成。其中首部字段有不少内容,这边列举几个:服务器
Accept-Encoding: gzip,compress:浏览器告诉服务器,它支持的压缩格式网络
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0):浏览器告诉服务器,浏览器的内核是什么jsp
Connection: close/Keep-Alive: 浏览器告诉服务器,请求完后是断开连接仍是保持连接ide
Server:apache tomcat:服务器告诉浏览器,服务器的型号是什么
Transfer-Encoding: chunked: 服务器告诉浏览器数据以分块方式回送
https安全就是由于使用SSL创建安全的通讯线路,其实HTTPS就是披着SSL的HTTP,采用数字签名和第三方CA的数字证书保证的安全。SSL加密还有加速的做用。
http使用端口是80,https使用端口是443,http在应用层工做,https的安全传输机制是在传输层工做。https信息都是加密的,抓包工具获取的也是加密的,具备校验机制,被篡改了就会马上发现,有身份证书,防止被冒充。
一次http请求的几个步骤:
创建TCP链接
向浏览器发送请求行,也就是发送请求命令:GET /sample/hello.jsp HTTP/1.1
向浏览器发送请求头,而后用一个空白行结束头信息的发送,也就是报文首部和报文主体之间的空行。
服务器应答,也就是 HTTP/1.1 200 OK 这些。
服务器发送应答头,跟请求头同样。
服务器发送数据以Content-Type应答头信息所描述的格式发送用户所请求的实际数据。
关闭TCP链接。
http1.1版本默认持久链接,也就是TCP链接不断开,新增了管线化,客户端同时发出的多个http请求,不用一个一个等待响应,可是这个功能默认是关闭的,只限于理论阶段,由于能够同时发送,可是响应数据仍是要按照顺序来一一接收。还新增了断点续传。利用HTTP消息头使用分块传输编码,将实体主体分块传输。
TCP链接限制:
对于同一个域名,浏览器最多只能同时建立 6~8 个 TCP 链接 (不一样浏览器不同)。为了解决数量限制,出现了域名分片技术,其实就是资源分域,将资源放在不一样域名下(好比二级子域名下)。以一种变通的方式突破限制,可是会形成不少问题,由于过多链接对于服务器来讲容易形成网络拥挤、交通阻塞等。
线头阻塞:
每一个 TCP 链接同时只能处理一个请求响应,若是上一个响应没返回,后续请求响应都会受阻。因此管线化pipelining 技术出现了,可是管线化也有问题,好比第一个响应慢仍是会阻塞后续响应、服务器为了按序返回响应须要缓存多个响应占用更多资源、浏览器中途断连重试可能得从新处理多个请求等等。
http2采用了二进制分帧层,帧是数据传输的最小单位,以二进制传输代替本来的明文传输,本来的报文消息被划分为更小的数据帧。并且会改变一些头字段。
http2的多路复用:
在一个 TCP 链接上,能够不断发送帧,每帧的 stream identifier标识这一帧属于哪一个流,而后在对方接收时,根据 stream identifier 拼接每一个流的全部帧组成数据。把 HTTP/1.1 每一个请求都看成一个流,那么多个请求变成多个流,请求响应数据分红多个帧,不一样流中的帧交错地发送,这就是 HTTP/2 中的多路复用。 http2 对于同一域名只须要建立一个链接,而不是像 http/1.1 那样建立 6~8 个链接。
http2服务推送:
浏览器发送一个请求,服务器主动向浏览器推送与这个请求相关的资源,这样浏览器就不用发起后续请求。
http2采用HPACK算法压缩头部。http1端对端关闭就直接断开链接,http2引入RST_STREAM类型的frame,能够在不断开链接的前提下取消某个请求的流。还能够设置请求的优先级。
随便看看了解了解,这都是很浅的东西,由于http实在是有太多的内容了。