学习一门技术或者看一篇文章最好的方式就是带着问题去学习,这样才能在过程当中有茅塞顿开、灯火阑珊的感受,记忆也会更深入。web
HTTP 全称是 HyperText Transfer Protocal ,即:超文本传输协议,从 1990 年开始就在 WWW 上普遍应用,是现今在 WWW 上应用最多的协议,HTTP 是应用层协议,当你上网浏览网页的时候,浏览器和 web 服务器之间就会经过 HTTP 在 Internet 上进行数据的发送和接收。HTTP 是一个基于请求/响应模式的、无状态的协议。即咱们一般所说的 Request/Response。浏览器
首先看一张图缓存
若是对网络协议还不太熟悉的同窗,建议看一下上一篇文章 Android 网络基础之网络协议篇安全
请求行 <method> <request-url> <version>
请求头 <headers>
请求体 <entity-body>
复制代码
响应状态行 <version> <status> <reason-phrase>
响应头 <headers>
响应体 <entity-body>
复制代码
解释一下各个标签:bash
<method> 指请求方法,经常使用的主要是 Get、 Post、Head 还有其余一些咱们这里就不说了,有兴趣的能够本身查阅一下
<version> 指协议版本,如今一般都是Http/1.1了
<request-url> 请求地址
<status> 指响应状态码, 咱们熟悉的200、404等等
<reason-phrase> 缘由短语,200 OK 、404 Not Found 这种后面的描述就是缘由短语,一般没必要太关注。
复制代码
列举几个比较经常使用的服务器
方法名 | 功能 |
---|---|
GET | 向指定的资源发出“显示”请求,使用 GET 方法应该只用在读取数据上,而不该该用于产生“反作用”的操做中 |
POST | 指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求文本中。这个请求可能会建立新的资源或者修改现有资源,或二者皆有。 |
PUT | 向指定资源位置上传其最新内容 |
DELETE | 请求服务器删除 Request-URI 所标识的资源 |
指请求报文和响应报文均可以使用的字段网络
Http + 加密 + 认证 + 完整性保护 = Httpspost
传统的 Http 协议是一种应用层的传输协议,Http 直接与 TCP 协议通讯。其自己存在一些缺点:学习
Http 协议使用明文传输,容易遭到窃听。编码
Http 对于通讯双方都没有进行身份验证,通讯的双方没法确认对方是不是假装的客户端或者服务端。
Http 对于传输内容的完整性没有确认的办法,每每容易在传输过程当中被劫持篡改。
所以,在一些须要保证安全性的场景下,好比涉及到银行帐户的请求时,Http 没法抵御这些攻击。
Https 则能够经过增长的 SSL\TLS,支持对于通讯内容的加密,以及对通讯双方的身份进行验证。
近代密码学中加密的方式主要有两类:
对称秘钥加密是指加密与解密过程使用同一把秘钥。这种方式的优势是处理速度快,可是如何安全的从一方将秘钥传递到通讯的另外一方是一个问题。
非对称秘钥加密是指加密与解密使用两把不一样的秘钥。这两把秘钥,一把叫公开秘钥,能够随意对外公开。一把叫私有秘钥,只用于自己持有。获得公开秘钥的客户端可使用公开秘钥对传输内容进行加密,而只有私有秘钥持有者自己能够对公开秘钥加密的内容进行解密。这种方式克服了秘钥交换的问题,可是相对于对称秘钥加密的方式,处理速度较慢。
SSL\TLS 的加密方式则是结合了两种加密方式的优势。首先采用非对称秘钥加密,将一个对称秘钥使用公开秘钥加密后传输到对方。对方使用私有秘钥解密,获得传输的对称秘钥。以后双方再使用对称秘钥进行通讯。这样即解决了对称秘钥加密的秘钥传输问题,又利用了对称秘钥的高效率来进行通讯内容的加密与解密。
SSL\TLS 采用的混合加密的方式仍是存在一个问题,即怎么样确保用于加密的公开秘钥确实是所指望的服务器所分发的呢?也许在收到公开秘钥时,这个公开秘钥已经被别人篡改了。所以,咱们还须要对这个秘钥进行认证的能力,以确保咱们通讯的对方是咱们所指望的对象。
目前的作法是使用由数字证书认证机构颁发的公开秘钥证书。服务器的运营人员能够向认证机构提出公开秘钥申请。认证机构在审核以后,会将公开秘钥与共钥证书绑定。服务器就能够将这个共钥证书下发给客户端,客户端在收到证书后,使用认证机构的公开秘钥进行验证。一旦验证成功,便可知道这个秘钥是能够信任的秘钥。