引言:当我们打开一个网页时,奇妙之旅就此开始,作为对世界了解的一个重要窗口,从打开网页或者输入网址后,这中间到底都发生了些什么呢?带着种种疑惑,我们一起来探索一下这其中的奥秘!
一.URL
定义:在www上每一信息资源都有统一的且在网上唯一的地址,该地址就叫URL(Uniform Resource Locator,统一资源定位符),它是www的统一资源定位符,就是指网络地址。
语法:URL由三部分组成:资源类型、存放资源的主机域名、资源文件名。
也可认为由4部分组成:协议、主机、端口、路径
浏览器中输入URL
1在浏览器中输入想要访问的网址。
2.浏览器查找域名的IP地址,首先需要确认的是域名所对应的服务器IP地址,由DNS服务器将域名解析成对应的服务器IP地址。
DNS查找过程:
- ·浏览器缓存:浏览器会缓存DNS记录的一段时间,一般在2分钟到30分钟之间。
- ·系统缓存:如果浏览器缓存里没有找到需要的记录,浏览器会做一个系统调用(即gethostbyname函数),这样就可以轻松获得系统缓存中的记录。
- ·路由器缓存:接下来,前面的查询请求发向路由器,它一般那会有自己的DNS缓存。
- ·ISP DNS缓存:紧接着就要check ISP缓存的DNS服务器,在这里一般都能找到相对应的缓存记录。
- ·递归搜索:最终,ISP的DNS服务器从根域名服务器开始递归搜索,从.com顶级域名服务器到网站的域名服务器,一般DNS服务器的缓存中会有.com域名服务器中的域名。
3.根据HTTP协议格式,组织HTTP请求(HTTP协议格式)
4.搭建TCP客户端(TCP 协议格式特性----面向连接、可靠传输)
5.经过各层封装,路由选择发送到服务器
6.服务器根据HTTP协议格式解析请求,业务处理,组织相应数据,发送一个HTML响应给客户端,服务器端收到请求后的由web服务器(准确说应该是http服务器)处理请求,诸如Apache、Ngnix、IIS等。web服务器解析用户请求,知道了需要调度哪些资源文件,再通过相应的这些资源文件处理用户请求和参数,并调用数据库信息,最后将结果通过web服务器返回给浏览器客户端。
7.关闭三次握手,进行四次挥手结束连接。
8.浏览器解析HTML,准确地说,浏览器需要加载解析的不仅仅是HTML,还包括CSS、JS。以及还要加载图片、视频等其他媒体资源。浏览器通过解析HTML,生成DOM树,解析CSS,生成CSS规则树,然后通过DOM树和CSS规则树生成渲染树。渲染树与DOM树不同,渲染树中并没有head、display为none等不必显示的节点。要注意的是,浏览器的解析过程并非是串连进行的,比如在解析CSS的同时,可以继续加载解析HTML,但在解析执行JS脚本时,会停止解析后续HTML,这就会出现阻塞问题。
9.浏览器布局渲染,根据渲染树布局,计算CSS样式,即每个节点在页面中的大小和位置等几何信息。HTML默认是流式布局的,CSS和js会打破这种布局,改变DOM的外观样式以及大小和位置。这时就要提到两个重要概念:repaint和reflow。
10.最终浏览器将界面展示给用户。
二.HTTP协议
1.http协议介绍
①HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网应用最为广泛的一种网络协议,所有的WWW文件都必须要遵守这个给协议标准。
②HTTP协议是基于TCP/IP通信协议来传输数据的(例如上边访问网页URL中的HTML文件以及图片,资料查询结果等)
③HTTP协议通常承载于TCP协议之上,那么我们的HTTPS就是在其基础上添加了TLS或SSL协议。
④HTTP协议是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。注意:HTTP是无状态的协议。
⑤HTTP默认端口为80端口。
2.HTTP请求方法
序号 | 方法 | 描述 |
---|---|---|
1 | GET | 请求指定的页面信息,并返回实体主体。 |
2 | HEAD | 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头 |
3 | POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。 |
4 | PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
5 | DELETE | 请求服务器删除指定的页面。 |
6 | CONNECT | HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。 |
7 | OPTIONS | 允许客户端查看服务器的性能。 |
8 | TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
9 | PATCH | 是对 PUT 方法的补充,用来对已知资源进行局部更新 。 |
3.HTTP请求格式
HTTP请求没有body(参数)的格式:
HTTP请求有body(参数)的格式:
请求行:
方法:
GET 获取资源
POST 向服务器端发送数据,传输实体主体
PUT 传输文件
HEAD 获取报文首部
DELETE 删除文件
OPTIONS 询问支持的方法
TRACE 追踪路径
协议/版本号
URL
请求头:
通用首部(General Header)
请求首部(Request Header)
响应首部(Response Header)
实体首部(Entity Header Fields)
请求体
4.HTTP协议的特点:
- 无状态:协议对客户端没有状态存储,对事物处理没有“记忆”能力,比如访问一个网站需要反复进行登录操作。
- 无连接:HTTP/1.1之前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。比如某个客户机在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户的请求,所以每次需要重新响应请求,需要耗费不必要的时间和流量。
- 基于请求和响应:基本的特性,由客户端发起请求,服务端响应 简单快速、灵活。
- 通信使用明文、请求和响应不会对通信方进行确认、无法保护数据的完整性。
5.HTTP工作流程
一次HTTP操作称为一个事务,其工作过程分为4步
- 首先客户机与服务器需要建立连接,只要单击某个超链接,HTTP就开始工作。
- 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
- 服务器接收到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息,实体信息和可能的内容。
- 客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。
三.HTTPS协议
1.HTTPS协议简介:
①HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议。
② HTTPS是一个安全通信通道,基于HTTP开发,用于在客户计算机和服务器之间交换信息。
③ HTTPS使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全办。
④HTTPS是有Netscape开发并内置于其浏览器中,用于对数据进行压缩和解压操作,并返回网络上传送的结果。
⑥ HTTPS世界上应用了Netscape的安全套接字层SSL作为HTTP应用层的子层
⑦ HTTPS使用端口是443,而不是像HTTP那样使用端口80来和TCP/IP进行通信
SSL使用40位关键字作为RC4流加密算法,这对于商业信息的加密是合适的。
⑧ HTTPS和SSL支持使用X.509数字认证。
2.HTTPS原理:
①客户端将它所支持的算法列表和一个用作产生密钥的随机数发送给服务器。
② 服务器从算法列表中选择一种加密算法,并将它和一份包含服务器公用密钥的证书发送给客户端;该证书还包含了用于认证目的的服务器标识,服务器同时还提供了一个用作产生密钥的随机数。
③ 客户端对服务器的证书进行验证(有关验证证书,可以参考数字签名),并抽取服务器的公用密钥;然后,再产生一个称作 pre_master_secret 的随机密码串,并使用服务器的公用密钥对其进行加密(参考非对称加 / 解密),并将加密后的信息发送给服务器。
④ 客户端与服务器端根据 pre_master_secret 以及客户端与服务器的随机数值独立计算出加密和 MAC密钥(参考 DH密钥交换算法)。
⑤ 客户端将所有握手消息的 MAC 值发送给服务器。
⑥ 服务器将所有握手消息的 MAC 值发送给客户端。
3.HTTPS加密、解密特点
借用大佬的图片:https://blog.csdn.net/kobejayandy/article/details/52433660
①客户端发起HTTPS请求
②服务端的配置
- 1. 采用HTTPS协议的服务器必须有一套数字证书,可以自己制作,也可以向组织申请
- 2.区别就是自己办法的证书需要客户端验证通过,才可以继续访问,而使用受信任的证书则不会弹出提示页面
- 3. 这套证书其实就是一堆公钥和私钥 传送证书
③这个证书其实就是公钥,包含了很多信息
④客户端解析证书
- 1.由客户端的TLS来完成的,首先会验证公钥是否有效
- 2.如果证书没有问题,就生成一个随机值
- 3.然后用证书对对该随机值进行加密
⑤传送加密信息
- 1.这部分传送的是用证书加密后的随机值
- 2.目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了
⑥服务端解密信息
-
1.服务端用私钥解密后,得到了客户端穿过来的私钥,然后把内容通过该值进行对称加密
-
2.所谓对称加密,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。
⑦传输加密后的信息
- 1.这部分信息是服务段私钥加密后的信息,可以在客户端被还原
⑧客户端解密信息
- 1.客户端用之前生成的私钥解密服务端传来的信息,于是获取了解密后内容
4.HTTPS设计目标:
(1)数据保密性:保证数据内容在传输的过程中不会被第三方查看。就像快递员传递包裹一样,都进行了封装,别人无法获知里面装了什么 。
(2)数据完整性:及时发现被第三方篡改的传输内容。就像快递员虽然不知道包裹里装了什么东西,但他有可能中途掉包,数据完整性就是指如果被掉包,我们能轻松发现并拒收 。
(3)身份校验安全性:保证数据到达用户期望的目的地。就像我们邮寄包裹时,虽然是一个封装好的未掉包的包裹,但必须确定这个包裹不会送错地方,通过身份校验来确保送对了地方
5.HTTPS优点:
- 1.使用https协议可认证用户和服务器,确保数据发送到正确的客户机和服务器。
- 2.https协议是由SSL+http协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、修改,确保数据的完整性。
- 3.https是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。
6.HTTPS缺点:
- 1.https协议握手阶段比较费时,会使页面的加载时间延长。
- 2.https连接缓存不如http高效,会增加数据开销,甚至已有的安全措施也会因此而受到影响。
- 3.https协议的安全是有范围的,在黑客攻击、拒绝服务攻击和服务器劫持等方面几乎起不到什么作用。
- 4.SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。
- 5.成本增加。部署 https后,因为 Https协议的工作要增加额外的计算资源消耗,例如 SSL 协议加密算法和 SSL 交互次数将占用一定的计算资源和服务器成本。
- 6.https协议的加密范围也比较有限。最关键的,SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行。
四.HTTP与HTTPS区别(重中之重)
不同点:
- 1.https协议需要到CA (Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。
- 2.https在TCP三次握手阶段以后,还需要进行SSL的headshake,协商加密使用的对称加密密钥。http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
- 3.http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- 4.http的连接很简单,是无状态的。Https协议是由SSL+Http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)
- 5.http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
相同点:
- 1.都是采用同一个基础协议作为HTPP或HTTPS客户端—浏览器
- 2.设立一个连接到Web服务器指定的端口
- 3.服务器接收到请求,会返回一个状态码以及消息
- 4.系统使用统一资源定位器URI模式,因此资源可以被唯一指定
五.如何正确选择HTTP协议和HTTPS协议
通过前边的分析我们知道,为了保证数据传输的安全性,HTTPS协议通过一系列的加密、安装证书等操作,将使该网站的性能和效率大大降低,且其安全是有范围的,在黑客攻击、拒绝服务攻击和服务器劫持等方面几乎起不到什么作用,由此种种,在使用过程中,如果需要一些机密文件或资料时,我们可以采用HTTPS协议进行传输。除此之外,HTTPS也会消耗大量的成本因为SSL证书需要购买,功能越强大的证书越昂贵。综上所述,HTTP协议虽然不安全,但其高效、便捷的特性任然是因特网应用最为广泛的网络传输协议。