说到HTTP,让我们首先从他的定义说起:
那什么是HTTP呢?HTTP是一种超文本传输协议,其定义了客户端与服务器端之间文本传输的规范。HTTP默认使用80端口,这个端口指的是服务器的端口,而客户端使用的端口是动态分配的。当我们没有指定端口访问时,浏览器会默认帮我们添加80端口。HTTPS默认端口为443。
HTTP的特点
1.支持客户/服务器模式
2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。常用请求方法有GET、POST、HEAD。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小、因而通信速度很快。
3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type(Content-Type是HTTP包中用来表示内容类型的标识)加以标记。
4.无连接:每次请求一次,释放一次连接。无连接表示每次连接只能处理一个请求,优点是节省传输时间,实现简单,无连接也就是短连接。长连接解决效率问题,当建立好一个连接后,可以多次请求,缺点是容易造成占用资源不释放的问题。当HTTP协议头部中字段Connection:keep-alive表示支持长链接。
5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则必须重传,这样可能导致每次连接传送的数据量增大;但如果服务器不需要先前信息时应答就较快。为了解决HTTP协议无状态产生了两种用于保持HTTP连接状态的技术cookie和session
这里提到了cookie和session,那么就先了解一下cookie和session以及他们的区别吧
cookie和session的区别:
作用:HTTP协议属于一个无状态协议(因为HTTP是短连接,服务端没有保持用户状态,表示下次请求服务端不知道是哪个客户端)可以结合session和cookie来实现服务端保持用户会话状态。cookie和session都是用来跟踪浏览器用户身份的会话方式
区别:session是服务端保存信息 cookie是客户端保存信息
服务端是登录成功时,保存sessionid和session对象,并响应set-cookie头,值为sessionid,客户端保存该cookie信息,每次请求都携带该cookie信息,服务端根据sessionid键可以查找到对应值得session对象。
cookie是通过客户端保持状态的解决方案,cookie就是由服务器发给客户端的特殊信息,这些信息以文本文件的方式存放在客户端,之后客户端每次向服务器发送请求时都会带上cookie
当用户使用浏览器访问一个支持cookie的网站的时候,用户会提供包括用户名在内的个人信息且提交至服务器,当服务器向客户端回传相应的超文本时也会发回这些个人信息,个人信息会存放在HTTP响应头(Response Header);当浏览器接收到来自服务器的响应后,会将信息存放在统一的位置
session是通过服务器来保持状态的解决方案,在session被创建后,可以向session中增加内容,这些内容只会保存在服务器中,发到客户端只有sessionid;当客户端再次发送请求的时候,会将这个sessionid带上,服务器接收到请求之后会依据sessionid找到相应的session,从而再次使用,保持用户状态。
HTTP请求的方法
HTTP1.0定义了三种请求方法:GET,POST和HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS,PUT,DELETE,TRACE和CONNECT方法。
GET:请求指定的页面信息,并返回实体主体。
HEAD:类似get请求,只不过返回的响应中没有具体的内容,用于获取报头。
POST:向指定资源提交数据进行处理请求(例如提交表单或上传文件)数据被包含在请求体中;POST请求可能会导致新的资源建立(和/或)已有资源修改。
PUT:向指定资源位置上传其最新内容。
DELETE:请求服务器删除Request-URL所标识的资源。
CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS:允许客户端查看服务器的性能,返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送"*"的请求来测试服务器的功能性。
TRACE:回显服务器收到的请求,主要用于测试或诊断。
HTTP工作原理:
HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或错误代码、服务器信息、响应头部和响应数据。
HTTP的原理:
1.客户端浏览器通过网络与服务器建立连接(通过TCP实现,一般端口号为80),建立连接后客户端可发送请求给服务器(请求的格式为:统一资源标识符(URL)、版本协议号,后边是MIME信息包括请求修饰符、客户机信息和许可内容)。
2.服务器接收到请求后会返回一定的响应(其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容)
HTTP的缺点:
1.使用明文通信,一些重要的内容会被窃听
2.不能验证对方的身份,可能是伪造的信息
3.无法验证报文的完整性,有可能已经被修改
HTTPS如何解决HTTP的问题:
HTTPS只是在HTTP的基础之上增加了加密处理、认证机制和完整性保护,即HTTPS=HTTP+加密+认证+完整性保护。
加密:HTTPS通过对数据加密来使其免受窃听者对数据的监听,这就意味着当用户在浏览网站时,没有人能够监听他和网站之间的信息交换,或者跟踪用户的活动,访问记录等,从而窃取用户信息。
数据一致性:数据在传输过程中不会被窃听者所修改,用户发送的数据会完整的传输到服务端,保证用户发的是什么,服务器接收的是什么。
身份认证:是指确认对方的真实身份,也就是证明是自己,它可以防止中间人攻击并建立用户信任。
HTTPS不是应用层的一种新协议,只是HTTP协议的改进(HTTP协议中的部分通信接口被ssl/tls协议代替),通常HTTP直接与TCP进行通信,当使用ssl协议时则先与ssl通信,再由ssl和TCP通信。
HTTPS的原理:
1.客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接
2.Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端
3.客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级
4.客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站
5.Web服务器利用自己的私钥解密出会话密钥
6.Web服务器利用会话密钥加密与客户端之间通信
HTTP和HTTPS的区别:
1.http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议
2.http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443
3.http的连接很简单,是无状态的;https协议是由SSL+Http协议构建的可进行加密传输、身份验证的网络协议
SSL和TLS
SSL是"Secure Sockets Layer",叫做"安全套接层",出现就是为了解决HTTP传输不安全的问题;SSL被标准化之后改为TLS(“Transport Layer Security”),叫做"传输层安全协议"
SSL协议是位于TCP/IP协议与各种应用层协议之间,为数据通信提供安全支持,分为两层:
SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议之上,为高层协议提供数据封装、压缩、加密等基本功能的支持
SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前、通讯双方进行身份认证、协商加密算法、交换加密密钥
SSL协议提供的服务有:
1.认证用户和服务器,确保数据发送到正确的客户端和服务器
2.加密数据以防止数据中途被窃取
3.维护数据的完整性,确保数据在传输过程中不被改变
加密
加密分为对称加密、非对称加密和混合加密
对称加密
又被称为私钥加密,即信息的发送方和接收方使用同一个秘钥去加密和解密信息,采用了对称密码编码技术
优点:算法公开、计算量小、加密速度快、加密效率高
缺点:
1.数据传送之前,发送方和接收方需要协商好秘钥,两方都要保存好秘钥,任意一方不慎将秘钥泄露,信息加密就会变得不再安全
2.每对用户每次使用对称加密算法时,都需使用其他人不知道的唯一秘钥,会使得收发双方拥有的钥匙数量巨大,密钥管理成为双方的负担
3.对称加密算法一般不能提供信息完整性的鉴别,无法验证发送者和接受者的身份
常见对称加密算法:DES、3DES、IDEA、RC4、RC5、RC6和AES
非对称加密
非对称加密算法需要使用两个秘钥:公钥和私钥;
公钥和私钥是一对,如果用公钥对数据加密,只有用对应的私钥才能解密;如果用私钥对数据进行加密,只有用对应的公钥才能解密
实现过程:甲方生成一对秘钥将其中一把作为公用密钥向其他方公开;得到该公钥的乙方使用该秘钥对机密信息进行加密后再发送给甲方;甲方再用自己的专用秘钥对加密后的信息进行解密。甲方只能用专用秘钥解密由其公钥加密后的信息
优点:安全 缺点:速度比较慢
常见非对称加密算法:RSA、ECC(移动设备用)、DSA(数字签名)
混合加密
结合对称加密和非对称加密的优缺点,混合使用两种加密算法,TLS用的这种
实现过程:首先使用非对称加密,用来传输对称加密的秘钥,以此可解决对称加密传输过程不安全的问题;然后用随机数产生对称算法,再用公钥加密。对方拿到密文后用私钥解密,取出会话秘钥
摘要算法(Hash算法)
Hash算法特别在于是一种单向算法,用户可以通过hash算法对目标生成信息生成一段特定长度的唯一hash值,却不能通过这个hash值重新获得目标信息。Hash算法常用在不可还原的密码存储、信息完整性校验
可以把Hash算法理解成一种特殊的压缩算法,它能够把任意长度的数据压缩成一种固定长度的字符串,像是给数据加了一把锁
常见摘要算法:MD2、MD4、MD5、HAVAL、SHA
有些网站可以将MD5加密后的密码还原,其实是把一些常用的MD5原文和密文进行了保存,它的还原只是在数据库中查找出来的,对于比较麻烦的密码采用MD5加密后是还原不出来的
认证
如何确定自己的唯一性,上述过程中出现过公钥加密,私钥解密;这个私钥只有自己一个人所有,能够辨别唯一性,我们可以把顺序调换一下,变成私钥加密,公钥解密。使用私钥再加上摘要算法,就能够实现数字签名,从而实现认证
综合使用对称加密、非对称加密和摘要算法,实现了加密、数据认证、认证,但也不是完全安全了,还存在一个数字签名的认证问题,因为私钥是自己的,公钥是谁都可以发布的,所以必须发布经过认证的公钥,才能解决公钥信任问题