Android---网络编程之Http协议

相关

Android—网络编程之Http协议

Android—网络编程之OkHttp3整体结构了解以及使用

Android—网络编程之Okhttp3源码解析

Android—网络编程之Retrofit2整体结构了解以及+Okhttp3+rxjava2使用

Android—网络编程之Retrofit2源码分析

Android—网络编程之Socket编程(实例)

了解Android网络编程,我们先要了解一些基础:HTTP,Socket通讯。我们来看一张经典的图:

TCP/IP四层概念模型网络协议
应用层HTTP、TFTP, FTP, NFS, WAIS、SMTP等
传输层TCP, UDP
网络层IP, ICMP, ARP, RARP, AKP, UUCP
数据链路层FDDI, Ethernet, Arpanet, PDN, SLIP, PPP
  • HTTP协议:是应用层协议,重在对数据的包装,然后使用TCP/IP传输层协议发送数据。

  • Socket链接:是对TCP/IP协议的封装,他本身不是什么协议,而是一个调用接口(API)。TCP/IP只是一个协议栈,必须要具体实现,同时还要提供对外的操作接口,这就是Socket接口。

    1. 学习了解HTTP协议,我们需要了解其对数据的包装格式,像常说的请求头,响应头等等。
    2. 而了解Socket通讯,这个就要我们了解其API,其底层是基于流的形式传输数据。
    3. 因为Http协议使用的是“请求—响应”模式,适用于浏览网页,请求数据。
    4. Socket链接一旦建立,通信双方即可开始相互发送数据,适用与一些即时通讯类的项目。

网上的东西很多,在这里只是做一些铺垫,关键是后面我对于OkHttp3的解析,也算自己的一些总结。

Http基础

概念

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传输协议。

模型
  • 采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URL、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,响应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。
  • 基于这个模型的工作流程
    1. 客户机与服务器需要建立连接。
    2. 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
    3. 服务器返回相应的响应信息;其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
    4. 客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户端与服务器断开连接。
Http报文消息
  • 请求消息:看一下经典图

    这里写图片描述

    1. 请求方法
方法名功能描述
GET(常用)请求获取Request-URI(URI:通用资源标识符,URL是其子集,URI注重的是标识,而URL强调的是位置,可以将URL看成原始的URI)所标识的资源
POST(常用)在Request-URI所标识的资源后附加新的数据;支持HTML表单提交,表单中有用户添入的数据,这些数据会发送到服务器端,由服务器处理。
HEAD请求Request-URI所标识的资源响应消息报头,HEAD方法可以在响应时不返回消息体。
PUT与GET相反,请求服务器存储一个资源,并用Request-URI做为其标识;例如发布系统。
DELETE请求删除URL指向的资源。
OPTIONS请求查询服务器的性能,或者查询与资源相关的选项。
TRACE跟踪请求要经过的防火墙、代理或网关等,主要用于测试或诊断。
CONNECT保留将来使用

2. URL:一个完整的包括类型、主机名和可选路径名的统一资源引用名(网站地址);例如https://blog.csdn.net/zcpHappy/article/details/79719141
3. 协议版本

协议版本描述优缺点
09已过时。只不支持请求头。由于该版本不支持 POST 方法,所以客户端无法向服务器传递太多信息。不支持请求头。由于该版本不支持 POST 方法,所以客户端无法向服务器传递太多信息。
HTTP/1.0第一个在通讯中指定版本号的HTTP 协议版本,至今仍被广泛采用,特别是在代理服务器中。使用非持久连接,即在非持久连接下,一个tcp连接只传输一个Web对象;在HTTP/1.0中,大多实现为每个请求/响应交换使用新的连接。
HTTP/1.1当前版本。持久连接被默认采用,并能很好地配合代理服务器工作。还支持以管道方式同时发送多个请求,以便降低线路负载,提高传输速度。在同一个tcp的连接中可以传送多个HTTP请求和响应.多个请求和响应可以重叠,多个请求和响应可以同时进行.更加多的请求头和响应头(比如HTTP1.0没有host的字段).HTTP/1.1中,一个连接可用于一次或多次请求/响应交换,尽管连接可能由于各种原因被关闭。
HTTP/2.0即超文本传输协议 2.0,是下一代HTTP协议。1.HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。2.HTTP2.0使用HPACK算法对header的数据进行压缩.3.服务器推送对支持HTTP2.0的web server请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取。

4. 头部字段名:包括通用头,请求头和实体头

通用头请求和响应都可以使用包含Cache-Control、Connection、Date、Pragma、Transfer-Encoding、Upgrade、Via。(下面是几个常用的)
Cache-Control指定请求和响应遵循的缓存机制请求时的缓存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。
Connection定义C/S之间关于请求/响应的有关选项;例如Connection:Keep-Alive
Date头域Date头域表示消息发送的时间,时间的描述格式由rfc822定义。
Pragma头域Pragma头域用来包含实现特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache-Control:no-cache相同。
请求头域可能包含下列字段Accept、Accept-Charset、Accept-Encoding、Accept-Language、Authorization、From、Host、If-Modified-Since、If-Match、If-None-Match、If-Range、If-Range、If-Unmodified-Since、Max-Forwards、Proxy-Authorization、Range、Referer、User-Agent。对请求头域的扩展要求通讯双方都支持,如果存在不支持的请求头域,一般将会作为实体头域处理。
Host头域Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。
Referer头域Referer头域允许客户端指定请求uri的源资源地址,这可以允许服务器生成回退链表,可用来登陆、优化cache等。
Range头域Range头域可以请求实体的一个或者多个子范围。可以用于多线程断点下载等
User-Agent头域User-Agent头域的内容包含发出请求的用户信息。

5.可选实体消息:实体主体用于POST方法中。用户向Web服务器提交表单数据的时候,需要使用POST方法

  • 响应消息报文, 经典图
    这里写图片描述
    1. 版本:HTTP/1.1等
    2. 状态码:状态代码为3位数字,200—-299的状态码表示成功,300—399的状态码指资源重定向,400—499的状态码指客户端请求出错,500—599的状态码指服务端出错(HTTP/1.1向协议中引入了信息性状态码,范围为100~199)
状态码描述常见
1xx信息响应类,表示接收到请求并且继续处理100:服务器仅接收到部分请求,但是一旦服务器并没有拒绝该请求,客户端应该继续发送其余的请求。
2xx处理成功响应类,表示动作被成功接收、理解和接受;200:客户端请求成功
3xx重定向响应类,为了完成指定的动作,必须接受进一步处理;301:被请求的资源已永久移动到新位置
4xx客户端错误,客户请求包含语法错误或者是不能正确执行403:请求被服务器拒绝;404:服务器无法找到请求的URL;405:不允许使用此方法请求相应的URL
5xx服务端错误,服务器不能正确执行一个正确的请求500:服务器内部错误;503:服务器此时无法提供服务,但将来可能可用;505:服务器不支持,或者拒绝支持在请求中使用的HTTP版本。

3. 响应头字段

响应头字段描述
Location响应头Location响应头用于重定向接收者到一个新URI地址。(备用地址)
Server响应头Server响应头包含处理请求的原始服务器的软件信息。此域能包含多个产品标识和注释,产品标识一般按照重要性排序。
Date标头消息产生的时间
….

4. 实体消息:实体信息一般由实体头域和实体组成;实体头包括Allow、Content-Base、Content-Encoding、Content-Language、Content-Length、Content-Location、Content-MD5、Content-Range、Content-Type、Etag、Expires、Last-Modified、extension-header。extension-header允许客户端定义新的实体头,但是这些域可能无法被接受方识别。实体可以是一个经过编码的字节流,它的编码方式由Content-Encoding或Content-Type定义,它的长度由Content-Length或Content-Range定义。

实体头描述
Content-Type实体头Content-Type实体头用于向接收方指示实体的介质类型,指定HEAD方法送到接收方的实体介质类型,或GET方法发送的请求介质类型
Content-Range实体头Content-Range实体头用于指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。一般格式:Content-Range:bytes-unitSPfirst-byte-pos-last-byte-pos/entity-legth
Last-modified实体头Last-modified实体头指定服务器上保存内容的最后修订时间。
Content-Charset响应正文使用的编码
Content-Encoding响应正文使用的数据压缩格式
Content-Language响应正文使用的语言
…………..

HTTPS

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。HTTPS是与SSL一起使用的;现在SSL逐渐演变到TLS.SSL介于应用层和TCP层之间。应用层数据不再直接传递给传输层,而是传递给SSL层,SSL层对从应用层收到的数据进行加密,并增加自己的SSL头。

作用
  • 建立一个信息安全通道,来保证数据传输的安全
  • 确认网站的真实性:凡是使用了 https 的网站,都可以通过点击浏览器地址栏的锁头标志来查看网站认证之后的真实信息,也可以通过 CA 机构颁发的安全签章来查询
HTTPS和HTTP的区别
  • https协议需要到ca申请证书,一般免费证书很少,需要交费。
  • http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
  • http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  • http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
SSL

SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层:SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

SSL工作流程

这里写图片描述

  • 非对称加密算法:公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)。使用最广泛的是RSA算法,Elgamal是另一种常用的非对称加密算法。

  • 对称加密算法:指加密和解密使用相同密钥的加密算法。(DES算法,3DES算法,TDEA算法,Blowfish算法,RC5算法,IDEA算法。)

  • HASH算法:HASH算法不是大学里数据结构课里那个HASH表的算法。这里的HASH算法是密码学的基础,比较常用的有MD5和SHA,最重要的两条性质,就是不可逆和无冲突。所谓不可逆,就是当你知道x的HASH值,无法求出x;所谓无冲突,就是当你知道x,无法求出一个y, 使x与y的HASH值相同。

拼搏在技术道路上的一只小白And成长之路

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值