Android HTTP HTTPS

2020-04-11  本文已影响0人  Android_冯星

HTTP

HTTP是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议。HTTP是采用明文形式进行数据传输,极易被不法份子窃取和篡改。

HTTP协议的主要特点

HTTP URL 的格式如下

http://host[":"port][abs_path]

http表示要通过HTTP协议来定位网络资源;host表示合法的Internet主机域名或者IP地址;port指定一个端口号,为空则使用默认端口80;abs_path指定请求资源的URI(Web上任意的可用资源)。

HTTP应用程序是通过相互发送报文工作的,报文是HTTP应用程序之间发送的数据块,报文通常分为请求报文和响应报文两种,请求报文向服务器请求一个动作,响应报文将请求结果返回给客户端。

HTTP的请求报文

image.png

通常来说一个HTTP请求报文由请求行、请求报头和请求数部分组成。

1. 请求行

请求行由请求方法,URL字段和HTTP协议的版本组成,格式如下:

Method Request-URI HTTP-Version CRLF

其中 Method表示请求方法;Request-URI是一个统一资源标识符;HTTP-Version表示请求的HTTP协议版本;CRLF表示回车和换行(除了作为结尾的CRLF外,不允许出现单独的CRLF字符)。

HTTP请求方法有8种,分别是GETPOSTDELETEPUTHEADTRACECONNECTOPTIONS。其中PUTDELETEPOSTGET分别对应着增删改查,对于移动开发最常用的就是POSTGET了。

请求地址

GET https://www.jianshu.com/u/f2f86cc70706 HTTP/1.1

2.请求报头

在请求行之后会有0个或者多个请求报头,每个请求报头都包含一个名字和一个值,它们之间用“:”分割。请求头部会以一个空行,发送回车符和换行符,通知服务器以下不会有请求头。

常见的请求报头

3. 请求数据

请求数据不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合,与请求数据相关的最常用的请求头是Content-Type和Content-Length。

请求报文
GET /his?wd=&from=pc_web&rf=3&hisdata=&json=1&p=3&sid=20740_20742_1424_18280_20417_17001_15840_11910_20744_20705&csor=0&cb=jQuery110206488567241711853_1469936513370&_=1469936513371 HTTP/1.1
Host: www.baidu.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:47.0) Gecko/20100101 Firefox/47.0
Accept: text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, *//*; q=0.01
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
X-Requested-With: XMLHttpRequest
Referer: https://www.baidu.com/
Cookie: BAIDUID=DB24D5F4AB36694CF00C4877ADA56562:FG=1; BIDUPSID=DB24D5F4AB36694CF00C4877ADA56562; PSTM=1469936050; BDRCVFR[gltLrB7qNCt]=mk3SLVN4HKm; BD_CK_SAM=1; H_PS_PSSID=20740_20742_1424_18280_20417_17001_15840_11910_20744_20705; BD_UPN=133252; H_PS_645EC=96a0XJobAseSCdbn9%2FviULLD7KreCHN4V4HzQtcGacKF8tGu13Nzd6j9PoB2SPPVj1d5; BD_HOME=0; __bsi=11860814506529643127_00_0_I_R_25_0303_C02F_N_I_I_0
Connection: keep-alive

HTTP的响应报文

image.png

HTTP响应报文分为三部分:状态行、响应头、响应实体。

1. 状态行

状态行格式如下:

HTTP-Version Status-Code Reason-Phrase CRLF

其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。

状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
常见的状态码如下:
案例

HTTP/1.1 200 OK

2. HTTP的消息报头

消息报头分为通用报头请求报头响应报头实体报头等。消息头由键值对组成,每行一对,关键字和值用英文冒号“:”分隔。

1. 通用报头

既可以出现在请求报头,也可以出现在响应报头中

2. 请求报头

请求报头通知服务器关于客户端求求的信息,典型的请求头有:

3. 响应报头

用于服务器传递自身信息的响应,常见的响应报头:

4. 实体报头

实体报头用来定于被传送资源的信息,既可以用于请求也可用于响应。请求和响应消息都可以传送一个实体,常见的实体报头为:

响应报文
HTTP/1.1 200 OK
Server: bfe/1.0.8.14
Date: Sun, 31 Jul 2016 03:41:53 GMT
Content-Type: baiduApp/json; v6.27.2.14; charset=UTF-8
Content-Length: 95
Connection: keep-alive
Cache-Control: private
Expires: Sun, 31 Jul 2016 04:41:53 GMT
Set-Cookie: __bsi=12018325985460509248_00_0_I_R_4_0303_C02F_N_I_I_0; expires=Sun, 31-Jul-16 03:41:58 GMT; domain=www.baidu.com; path=/

抓包数据

使用charles抓包简书

请求
        GET / HTTP/1.1
Host    mail.zucp.com.cn
Connection  keep-alive
Upgrade-Insecure-Requests   1
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent  Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/605.1.15 (KHTML, like Gecko)
Accept-Language zh-cn
DNT 1
Accept-Encoding gzip, deflate
响应
    HTTP/1.1 200 OK
Server  nginx/1.15.7
Date    Sat, 11 Apr 2020 10:10:44 GMT
Content-Type    text/html; charset=UTF-8
Expires Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control   private, must-revalidate, max-age=0, proxy-revalidate, no-transform
Pragma  no-cache
Transfer-Encoding   chunked
Proxy-Connection    Keep-alive

HTTPS

HTTPS是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份 认证,保护交换数据的隐私与完整性。

HTTP协议采用明文传输信息,存在信息窃听、信息篡改和信息劫持的风险,而协议TLS/SSL具有身份验证、信息加密和完整性校验的功能,可以避免此类问题发生。

什么是Https

HTTPS是在HTTP上建立SSL加密层,并对传输数据进行加密,是HTTP协议的安全版。HTTPS主要作用是:

(1)对数据进行加密,并建立一个信息安全通道,来保证传输过程中的数据安全;

(2)对网站服务器进行真实身份认证。

HTTP与HTTPS区别

1、HTTPS是加密传输协议,HTTP是名文传输协议;

2、HTTPS需要用到SSL证书,而HTTP不用;

3、HTTPS比HTTP更加安全,对搜索引擎更友好,利于SEO,参考:

(1)为保护用户隐私安全,谷歌优先索引HTTPS网页

(2)百度开放收录https站点,https全网化势不可挡

4、 HTTPS标准端口443,HTTP标准端口80;

5、 HTTPS基于传输层,HTTP基于应用层;

6、 HTTPS在浏览器显示绿色安全锁,HTTP没有显示;

总的来说HTTPS比HTTP更加安全,能够有效的保护网站用户的隐私信息安全,这也是为什么现在的HTTPS网站越来越多。如果不想你的网站因为数据泄露上头条的话,就赶快去沃通CA申请一张SSL证书为自己的网站实现HTTPS加密吧!

image.png

注:TLS是SSL的升级替代版,具体发展历史可以参考传输层安全性协议

HTTP与HTTPS在写法上的区别也是前缀的不同,客户端处理的方式也不同,具体说来:

所以你可以看到,HTTPS比HTTP多了一层与SSL的连接,这也就是客户端与服务端SSL握手的过程,整个过程主要完成以下工作:

SSL握手是一个相对比较复杂的过程,更多关于SSL握手的过程细节可以参考TLS/SSL握手过程

SSL/TSL的常见开源实现是OpenSSL,OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。这个包广泛被应用在互联网的网页服务器上。 更多源于OpenSSL的技术细节可以参考OpenSSL

TLS/SSL工作原理

TLS/SSL的功能实现主要依赖于三类基本算法:散列函数 Hash、对称加密和非对称加密,其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性。

image.png
散列函数Hash

常见的有 MD5、SHA1、SHA256,该类函数特点是函数单向不可逆、对输入非常敏感、输出长度固定,针对数据的任何修改都会改变散列函数的结果,用于防止信息篡改并验证数据的完整性;

在信息传输过程中,散列函数不能单独实现信息防篡改,因为明文传输,中间人可以修改信息之后重新计算信息摘要,因此需要对传输的信息以及信息摘要进行加密;

对称加密

常见的有 AES-CBC、DES、3DES、AES-GCM等,相同的密钥可以用于信息的加密和解密,掌握密钥才能获取信息,能够防止信息窃听,通信方式是1对1;

对称加密的优势是信息传输1对1,需要共享相同的密码,密码的安全是保证信息安全的基础,服务器和 N 个客户端通信,需要维持 N 个密码记录,且缺少修改密码的机制;

非对称加密

即常见的 RSA 算法,还包括 ECC、DH 等算法,算法特点是,密钥成对出现,一般称为公钥(公开)和私钥(保密),公钥加密的信息只能私钥解开,私钥加密的信息只能公钥解开。因此掌握公钥的不同客户端之间不能互相解密信息,只能和掌握私钥的服务器进行加密通信,服务器可以实现1对多的通信,客户端也可以用来验证掌握私钥的服务器身份。

非对称加密的特点是信息传输1对多,服务器只需要维持一个私钥就能够和多个客户端进行加密通信,但服务器发出的信息能够被所有的客户端解密,且该算法的计算复杂,加密速度慢。

结合三类算法的特点,TLS的基本工作方式是,客户端使用非对称加密与服务器进行通信,实现身份验证并协商对称加密使用的密钥,然后对称加密算法采用协商密钥对信息以及信息摘要进行加密通信,不同的节点之间采用的对称密钥不同,从而可以保证信息只能通信双方获取。

上一篇 下一篇

猜你喜欢

热点阅读