HTTP (Hypertext Transform Protocal 超文本传输协议),适用于WWW服务器和本地浏览器之间超文本传输的协议,可以使浏览器更加高效,网络传输减少。它不仅可以保证计算机正确快速的传输超文本文档,还确定传输文档中的一部分内容。
互联网的关键技术就是TCP/IP协议。两台计算机之间的通信是通过TCP/IP协议在因特网上进行的
1.IP:计算机之间的通信
IP协议是计算机用来相互识别的通信机制,每台计算机都以一个IP用来在Internet上标识这台计算机,IP负责在Internet上发送和接收数据包,通过IP,消息(或其他数据)被分割成独立的包,并通过Internet在计算机之间传输,IP负责将每个包路由到它的目的地。
IP协议仅仅允许计算机互相发送消息,但他并不检查消息是否以发送的次序到达并且没有损坏(只检查关键的头数据),为了提供消息检验功能,大家在IP协议的基础上设计了传输控制协议TCP
2.TCP: 应用程序之间的通行
TCP确保数据包以正确的次序到达,并且尝试确认数据包的内容没有被改变,TCP在IP协议的基础上引入Port(端口),它允许计算机通过网络提供各种服务,一些端口号为不同服务保留,而且这些端口号被众所周知。
服务或者守护进程:在提供服务的机器上,有程序监听特定端口上的通信流,例如大多数电子邮件通信流使用端口25,用于WWW的HTTP通行出现在80端口上。
当应用程序希望通过TCP与另一个应用程序通行时,他会发送一个通信请求,这个请求必须被发送到确切的地址。在双方三次“握手”,TCP将在两个应用程序之间建立一个全双工(Full-Duplex)的通信,占用两个计算机之间的整个通信线路,TCP用于从应用程序到网络的数据传输控制,TCP负责在数据传送之前将它们分割成IP包,然后它们在到达的时候重组。
TCP/IP就是TCP/IP两个协议在一起协同工作,有上下层次的关系。
TCP负责应用软件如(浏览器)和网络软件之间的通信,IP负责计算机之间的通信,TCP负责将数据分割并装入IP包,IP协议负责将将数据包发送到目的地,传输过程需要经过IP路由器根据通信量,网络中的错误或其他参数来正确寻址,然后在他们到达时重新组合它们。
OSI七层模型 | TCP/IP概念模型 | 功能 | TCP/IP协议簇 |
应用层 | 应用层 | 文件传输他,电子邮件,文件服务,虚拟终端 | HTTP,FTP,SMTP DNS,POP3 |
表示层 | 数据格式化,代码转换,数据加密 | 无 | |
会话层 | 解除或建立与别的接点的联系 | 无 | |
传输层 | 传输层 | 提供端对端的借口 | TCP,UDP |
网络层 | 网络层 | 为数据包选择路由 | IP,ICMP,RIP,OSPF,BCP,ICMP |
数据链路层 | 链路层 | 传输有地址的帧以及错误检测功能 | SLIP,CSLIP,PPP,ARP,RARP,MTU |
物理层 | 以二进制数据形式在物理媒体上传输数据 | FDDI、IEEE802.3、IEEE802.4 |
3.HTTP请求响应模型
HTTP由请求和响应构成,是一个标准的客户端服务器模型(B/S),HTTP协议永远是由客户端发起请求,服务端响应请求。
Http是一个无状态的协议,无状态是指客户端(web浏览器)和服务器之间不需要建立长久连接,这意味着当客户端向服务器发送请求,然后服务端做出响应后,此次连接即被关闭。在服务器器端不保留连接的有关信息。
4.HTTP工作过程
1). 地址解析
例如客户端做出如下请求 http://localhost:8080/index.html
首先该请求被解析为协议名,主机名,端口,资源路径等
协议名:http
主机名:localhost
端口: 8080
资源路径: /index.html
2). 封装HTTP请求数据包
将以上信息结合本机信封装成一个HTTP请求数据包
3). 封装成TCP数据包,建立TCP连接(三次握手)
在HTTP工作齐纳,客户机(Web浏览器)首先通过网络与服务器建立连接,该链接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议簇,因此Internet又被称作TCP/IP网络,HTTP是比TCP更加高层的应用层协议,根据规则之只有低层协议建立连接后,才能进行更高层协议的连接,因此首先要建立TCP连接,一般TCP连接的端口号是80,而这里使用的是8080
4). 客户端发送请求命令
建立连接后,客户端发送请求给服务器,请求方式格式为:同一资源标识符,协议版本号,后面是MIME信息包括请求修饰符,客户端信息等内容
5). 服务器响应
服务器接收到请求后,做出对应的响应。响应格式为:状态行,包含信息的协议版本号,MIME信息,服务器信息,实体信息等内容
5). 服务器关闭TCP连接
一般情况下,一单服务器向客户端发送了响应数据,它就要关闭TCP连接(四次挥手)。但如果浏览器或服务器在其头信息加入了 Connect:keep-alive 代码,TCP连接持续保持连接状态。于是浏览器可以继续通过相同的连接继续发送请求,而保持连接节省了每个请求建立新连接所需要的时间,还节省了网络带宽。
HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。
HTTPS其实是由两部分组成的:HTTP+TLS/SSL,即HTTP下加入TLS/SSL层,HTTPS的安全基础就是TLS/SSL。服务端和客户端的信息传输都会通过TLS/SSL进行加密,所以传输的数据都是加密之后的数据。TLS的前身就是SSL协议,因此没有特别说明TLS/SSL说的都是同一个东西。
HTTP在安全方面的缺陷
HTTP本身是明文传输的,没有经过任何安全处理。由于用户的请求可以被中间者获取,那么明文传输的信息将在此时暴露给第三方这样存在很大的安全隐患。
这里提到的一些中间者主要指一些网络节点,使用户数据在浏览器和百度服务器之间传输必须要经过的节点,比如WIFI热点、路由器、防火墙、反向代理、缓存服务器等。
在HTTP协议下,中间者可以随意嗅探用户搜索内容,窃取隐私甚至篡改网页。不过HTTPS是这些劫持行为的克星,能够完全有效地防御。总体来说,HTTPS协议提供了三个强大的功能来对抗上述的劫持行为:
1、内容加密。浏览器到百度服务器的内容都是以加密形式传输的,中间者无法直接查看原始内容
2、身份认证。保证用户访问的是百度服务,而不是钓鱼网站,即使被DNS劫持到了第三方站点,也会提醒用户没有访问百度服务
3、数据完整。防止内容被第三方冒充或篡改
补充两种加密方式,便于后面理解。
有两种基本的加解密算法类型:
1)对称加密(symmetrcic encryption):密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES,RC5,3DES等;
对称加密主要问题是共享秘钥,除你的计算机(客户端)知道另外一台计算机(服务器)的私钥秘钥,否则无法对通信流进行加密解密。解决这个问题的方案非对称秘钥。
2)非对称加密:使用两个秘钥:公共秘钥和私有秘钥。私有秘钥由一方密码保存(一般是服务器保存),另一方任何人都可以获得公共秘钥。
这种密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等。
HTTPS工作原理
1.客户端发送HTTPS请求
浏览器请求一个https地址,然后连接到服务端的443端口上。注意这个过程中客户端会发送一个密文簇给服务端,密文簇是浏览器所支持的加密算法的清单。
2.服务端配置
采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面。
这套证书其实就是一对公钥和私钥,可以这么理解,公钥就是一把锁头,私钥就是这把锁的钥匙,锁头可以给别人对某个东西进行加锁,但是加锁完毕之后,只有持有这把锁的钥匙才可以解锁看到加锁的内容。
3、传送证书
这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构、过期时间等等。例如:
4、客户端解析证书
这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效,如颁发机构、过期时间等等,如果发现异常则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随机值,然后用证书对该随机值进行加密。
注意一下上面提到的"发现异常"。证书中会包含数字签名,该数字签名是加密过的,是用颁发机构的私钥对本证书的公钥、名称及其他信息做hash散列加密而生成的。客户端浏览器会首先找到该证书的根证书颁发机构,如果有,则用该根证书的公钥解密服务器下发的证书,如果不能正常解密,则就是"发现异常",说明该证书是伪造的。
5、客户端传送加密信息
这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,然后客户端和服务端的通信就可以通过这个随机值来进行加密和解密了。
6、服务端解密信息
服务端用私钥解密后,得到了客户端传过来的随机值,至此一个非对称加密的过程结束,看到TLS利用非对称加密实现了身份认证和密钥协商。然后把内容通过该值进行对称加密。
7、服务端传输加密后的信息
这部分是服务端用随机值加密后的信息,可以在客户端被还原。
8、客户端解密信息
客户端用之前生成的随机值解密服务端传送过来的信息,于是获取了解密后的内容,至此一个对称加密的过程结束,看到对称加密是用于对服务器待传送给客户端的数据进行加密用的。整个过程即使第三方监听了数据,也束手无策。
疑问一:
如果用户不懂这些,偏偏使用http访问google,为何返回的依旧是https的google
哦哦,如来如此 google对此地址做了请求重定向,自然我们就直接访问到了https的google。