网络协议核心-Http和Https

本文由 CrazyDailyQuestionhappyburglar,liu1813565583,MicroKibaco等共同创做.html

引言

  2014年之前,除了某些商务网站之外,大多数网站依旧使用的是Http请求,以后,Google开始推崇开发人员使用Https,做为Https切换时机,Google宣布给Https请求的网址做为优先排名,目的是给没有切换Https的网站给予惩罚,那为何Https会那么重要呢?从Http切换到Https真的值得吗?而后Http和Https的区别又是什么呢?如下指南会解决你全部的疑问,他能够回答这些常见问题,还能更好的让您了解Http和Https。java

HttpVsHttp

一. Http

1. 什么是Http

  http英文是 Hypertext Transfer Protocol,一种网络传输协议,位于 TCP/IP 协议族的最顶层。
  http在tcp/ip模型中,属于最上层--应用层,tcp/ip是自底向上的分层模型。分别为应用层<--传输层<-<-网络层<--数据链路层。
  其中应用层包括咱们常用的http协议,ffp文件协议,Dns域名解析协议,DHCP动态主机链接协议等等;
  传输层有面向链接的tcp协议和面向无链接的udp协议。
  tcp链接要通过三次握手才能真正创建链接开始通讯,所以,tcp的链接是稳定的,可靠的传输协议;
  缺点也显而易见,就是针对高性能需求的网络场景,如直播,游戏团战等能力不足,在这些场景可使用Udp协议,udp协议是面向无链接的,无序的,不可靠的,正是由于“面向无链接”,省去了三次握手的链接创建时间,才有了“高性能”的特性。
  网络层即Ip层,Ip层是面向无链接的,对这一层了解不太深刻。
  数据链路层,我理解就是真实的硬件设备,包括路由器,AP,双绞线, 真实物理主机之间的链接过程。git

Http

2. Http如何工做的

  1. dns解析,域名对应 ip
  2. TCP创建链接,三次握手
  3. C端向S端发送请求行命令
  4. C端发送请求头信息
  5. S端应答,发送响应命令
  6. S端发送响应头信息
  7. S端向C端发送数据,以及消息体
  8. S端关闭连接 tcp 四次挥手

3. 如何实现WebView 和 Http Cookie共享?

  首先很抱歉的告诉你们,Android原生Http没有任何与WebView共享Cookie机制,若是你使用的是系统的httpClient,你须要手动建立cookieManager,确保之后能访问他,在OkHttp是这么操做的github

OkHttpClient client = new OkHttpClient().setCookieHandler(new WebviewCookieHandler());
复制代码

二. Https

  Https ,说白了就是 Http + SSL ,即加密通讯后的Http
  其本质是在客户端和服务端协商一套对称秘钥,注意哦:是用非对称算法协商的对称秘钥,不涉及秘钥的传输,每次发送以前再拿这个密钥对内容进行对称加密,收到以后达到内容的加密传输。
   那么使用https必定是安全的吗?
  实际上是不必定的,由于有一些网站会使用自签ssl证书,自签证书不受任何监管,自签ssl证书容易被伪造和假冒。
   即便用https,也可使用信任跟证书抓包的方式破解ssl的传输加密,因此使用https的同时,也要对内容进行二次加密,保证即便传输加密无效了,也那不到真正的传输内容。 web

Https

Https创建过程

  客户端发送消息给服务端 ,服务端接受这个消息会判断这个消息是否是可信的.
  因此会创建一个信任机制,这个信任机制就是咱们所说的证书.证书一旦肯定,客户端收到通知,会将消息内容进行对称加密.一样服务端会拿到协商的秘钥进行解密操做,整个Https链接创建. 算法

借鉴 HenCoderPlus 网红图

三. Https 为何 比 Http安全?

  http是明文传输,在传输过程当中是很是不安全的,https须要去申请证书,通常免费的证书不多,因此须要必定的费用。
  在咱们app进行Http请求的时候,其实是咱们的浏览器或者咱们的软件把咱们的报文发送到咱们的服务器上,服务端收到报文响应给咱们客户端。
  中间经过中间节点进行消息转发过程当中,消息是原封不动的到达咱们服务器,那么消息能够被篡改或者窃听等操做,好比帐号密码或者转帐操做就是有风险的,明文传输会带来一系列问题。
  因此使用Https加密处理,进行对称加密,非对称加密和hash算法以后再传输。
  可是加密会影响性能,尤为是非对称加密,因此Https比Http要慢,可是加密不必定100%安全。
  因此Https还会对通讯进行验证,经过证书机制,Https知道真正访问的真实对象,Https使用了一个TLS的安全层,他本质是让Http运行在这个安全层上的。json

四.Status Code 状态码

三位数字,用于对响应结果作出类型化描述(如[获取成功] [内容为找到])api

返回码 意义 示例
1xx 临时性消息 100(继续发送),101(正在切换协议)
2xx 成功 200(OK),201(建立成功)
3xx 重定向 301(永久移动),302(暂时移动),304(内容未改变)
4xx 客户端错误 400(客户端请求错误),401(认证失败),403(被禁止)404(找不到内容)
5xx 服务器错误 500(服务器内部错误)

五.Request Method 请求方法

方法 做用
GET 1.用于获取服务器资源 2.对服务器数据不进行修改 3.不发送 Body
POST 1. 用于增长或修改资源 2.发送给服务器的内容在Body 里面
PUT 1.用于增长或修改资源 2.发送给服务器内容写在Body里面
DELETE 1.用于删除资源 2.不发送Body
HEAD 1.和 GET 使用方法彻底相同 2.和 GET 惟一区别在于,返回的响应中没有Body

六.ContentType

指定 Body 类型浏览器

类型 场景
text/html 请求Web页面返回响应类型,Body中返回html文本
x-www-form-urlencoded web 页面纯文本表单提交方式
multipart/form-data web中有二进制文件的提交方式
application/json , image/jpeg , application/zip 单项内容(文本或非文本均可以),用于 Web api 响应 或者 POST/PUT 的请求

总结

  看完这篇文章后,你是如何看待Http和Https的区别以及它们之间的优劣呢?若是你还有其余疑问欢迎到咱们的每日一问留言。安全

相关文章
相关标签/搜索