HTTP与HTTPS协议区别
HTTP与HTTPS协议区别
1、前言
- TCP/IP协议是分层的
- 从顶层至底层:应用层、传输层、网络层、链路层、物理层
2、HTTP协议简介
- 协议:计算机通信网络中,两台计算机之间进行通信所需要共同遵循的规定或者规则
- HTTP:超文本传输协议,是一种应用层的协议,由请求和响应构成,是一个标准的客户端服务器模型
- HTTP可以通过传输层的TCP协议在客户端和服务端之间传输数据
- HTTP只要应用web浏览器和web服务器之间的数据交换
- HTTP是一种协议,只要通信的双方都遵守这个协议,HTTP就能有用武之地
2.1、HTTP协议的主要特点
- 支持客户/服务器模式
- 简单快速:客户想服务器请求服务时,只需要传送请求方法和路径。请求方法通常用的有GET/POST/HEAD。每种方法规定了客户与服务器联系的类型不同,由于HTTP协议简单,使得HTTP服务器的程序规模小,因此通信速度很快
- 灵活:HTTP允许传输任意类型的数据对象,由Content-Type加以标记
- 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的响应后,即断开连接
- 无状态:HTTP协议似乎无状态协议,无状态是只协议对于事务处理没有记忆能力。缺少状态以为者如果后续处理需要前面的信息,必须重传,这样可能导致每次连接传送的数据量很大。另一方面,在服务器不需要先前信息时它的应答就很快。同一个客户端的这次请求和上次请求没有对应关系,对HTTP服务器来说,它并不知道这两个请求来自同一个客户端
2.2、HTTP协议工作流程
- 一次HTTP操作称为一个事务,其工作过程分为4步
- 首先客户机与服务器需要建立连接,只要单击某个超链接,HTTP就开始工作
- 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容
- 服务器接收到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息,实体信息和可能的内容
- 客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接
2.3、URL详解
- URL(Uniform Resource Locator)
- schema://host[:port#]/path/…/[?query-string]
- schema:指定底层使用的协议(http、https、ftp)
- host:HTTP服务器的IP地址或者域名
- port:HTTP服务器的默端口是80,这种情况下端口可以省略
- path:访问资源的路径
- query-string:发送给http服务器的数据
- anchor-:锚
- 例如:http://www.aitemi6.com/atm/index.jsp?name=aitemi&flag=true#stuff
2.4、请求
-
Http请求由三部分组成
- 请求行
- 消息报文
- 请求正文
-
Request消息分为3部分
- Request line
- Request header
- body
2.4.1、请求行
- Method:表示请求方法
- Path-to-resource:请求的资源
- Http/Version-number:表示HTTP协议的版本号
- 当使用GET请求时,body为空
- GET/POST区别
- GET提交的数据在URL之后,POST提交的数据在HTTP包的body中
- GET提交的数据有大小限制,POST提交的数据无大小限制
- GET需要使用Request.QueryString来取得变量值,POST通过Request.Form来获取变量值
- GET提交数据会带来安全问题
2.4.2、消息报头
- HTTP消息报头包括普通报头、请求报头、响应报头、实体报头
- 每一个报头域都是有名字+”:”+空格+值组成,消息报头域的名字是大小写无关的
- Accept:请求报头域,用于指定客户端接收哪些类型的消息,image/gif
- Accept-Charset:用于指定客户端接受的字符集
- Accept-Encoding:可接受的内容编码,如果没有设置,即表示都可以接受
- Accept-Language:指定一种自然语言
- Authorization:主要用于证明客户端有权查看某个资源,当浏览器访问一个页面时,如果收到服务器的响应代码是401,可以发送一个包含Authorization请求报头域的请求,要求服务器对其进行验证
- Host:主要用于指定被请求资源的Internet主机和端口号,他通常从HTTP URL中提取出来
- User-Agent:获取浏览器相关信息
3、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数字认证
3.1、HTTPS简介
- HTTPS其实是有两部分组成:HTTP+SSL/TLS,也就是在HTTP上又加上了一层处理加密信息的木块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据
3.2、HTTPS加/解密
- 客户端发起HTTPS请求
-
服务端的配置
- 采用HTTPS协议的服务器必须有一套数字证书,可以自己制作,也可以向组织申请
- 区别就是自己办法的证书需要客户端验证通过,才可以继续访问,而使用受信任的证书则不会弹出提示页面
- 这套证书其实就是一堆公钥和私钥
-
传送证书
- 这个证书其实就是公钥,包含了很多信息
-
客户端解析证书
- 由客户端的TLS来完成的,首先会验证公钥是否有效
- 如果证书没有问题,就生成一个随机值
- 然后用证书对对该随机值进行加密
-
传送加密信息
- 这部分传送的是用证书加密后的随机值
- 目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了
-
服务端解密信息
- 服务端用私钥解密后,得到了客户端穿过来的私钥,然后把内容通过该值进行对称加密
- 所谓对称加密,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全
-
传输加密后的信息
- 这部分信息是服务段私钥加密后的信息,可以在客户端被还原
-
客户端解密信息
- 客户端用之前生成的私钥解密服务端传来的信息,于是获取了解密后内容
4、HTTP和HTTPS异同
4.1、相同点
- 都是采用同一个基础协议作为HTPP或HTTPS客户端—浏览器
- 设立一个连接到Web服务器指定的端口
- 服务器接收到请求,会返回一个状态码以及消息
- 系统使用统一资源定位器URI模式,因此资源可以被唯一指定
4.2、不同点
- HTTP的URL是以http://开头。HTTPS的URL是以https://开头
- HTTP是不安全的,HTTPS是安全的
- HTTP是80端口,HTTPS是443端口
- 在OSI网络模型中,HTTP处于应用层,HTTPS工作在传输层
- HTTP无需加密,HTTPS需要加密
- HTTP无需证书,HTTPS需要安装证书
4.3、如何选择
加入为了安全保密,将一个网站所有的Web应用都启用SSL技术来加密,并使用HTTPS协议进行传输,那么该网站的性能和效率将会大大降低,而且没有这个必要,因为一般来说并不是所有数据都要求那么搞的安全保密级别,所以,我们只需对哪些设计机密数据的交互处理使用HTTPS协议