android开发之HTTP TCP/IP知识点解析

1,HTTP家族都有:HTTP,FTP,DNS,TCP,UDP,IP其中,TCP和UDP两者之间的关系非常重要。可以看这篇文章https://blog.csdn.net/qq_31332467/article/details/79217262来初步了解TCP  UDP之间的不同之处。

2.OSI七层协议:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层。

3,HTTP请求是依报文的形式:
客户端请求(Request):请求报文=请求头+空行+请求数据

服务端响应(Response):响应报文=响应头+空行+响应数据

请求头到底有什么,可以参考这篇文章:https://www.cnblogs.com/lexiaofei/p/6943690.html

请求头和响应头一般是看不到的(浏览器做了处理),请求数据就是用户名密码,响应数据一般是0000(登陆成功),用户性别年龄。

比如我对服务器进行一次请求:请求头一般会有:General(通用的,请求和响应都应该有的,比如状态码,请求地址),还有就是请求请求头特有的:Accept(这里存放需要服务器返回的数据类型,是text还是gif等),还有Accept-Laungh(返回的语言,中文还是英文),响应数据有返回的状态码。

4,Cookie,Sesseion,Token

默认情况下HTTP请求是谁也不认识谁(不持久,不知道你之前干了什么之后还要干什么),这三者都是做持久化处理的,目的是让客户端和服务端相互认识。

4.1,Cookie:存放在客户端的信息,该信息是来自于服务器返回的信息,下次请求带过去,如果用户离开网站后,如果cookie已过期一般是会清除的,如果没过期下次访问网站还是会带过去。它不是很安全,因为客户端会安装一些乱七八糟的应用,伪造cookie的信息,因此导致数据泄露。

4.2,Session:存放在服务器上的客户端的临时信息,用户离开会被清除(相对安全,因为信息是存放在服务端,但是它比较耗费资源,如果有一百个人连过来就会存放一百个人的信息)

4.3,Token(上面两个一般是用在服务器中,这个是在App中用的最多):“令牌”,有点类似于Cookie,相对来说更安全(但是令牌也会出现丢失的情况),Token使用的一般流程:

(1)客户端会向服务端申请一个Token(一般会存放在数据库)

(2)服务端收到请求信息,会去验证用户信息,签发一个Token给客户端,自己保存Token

(3)客户端收到Token会保存起来,每次请求会带上Token

(4)服务器收到其他请求回去验证客户端的Token,如果成功就返回数据,如果不成功就什么都不给

5,Http状态码详解:

1xx:(100等)信息状态码,接受的信息正在处理

2xx:(200等)succeed请求成功

3xx:(Redirection,比如304)重定向需要进行附加操作,一般是没有内容进行返回的

4xx:服务器无法处理请求,如404

5xx:服务端错误如505

6,Http和Https的区别:本质上Https还是Http只是披了一层外衣

Https=Http+加密+验证+完整(正是因为Http有缺点多以才出现Https)

Http的缺点:

数据没有加密可能遭遇窃听。

不验证通信方的身份肯能遭遇伪装。(谁过来都可以请求)

不验证报文完整性,可能会遭遇篡改

Https使用到了TLS/SSL(加密和证书协议)。

加密:对称加密(AES+DES,这种加密不是特别安全)/非对称加密(RSA+DSA比如支付宝上上传的公钥和私钥,这种加密过程相对来说比较安全,)。

除此之外还有MD5这种加密过程,这种属于数字签名。

加密还有一种方式就是证书。

7,Http1.x和Http2.x的区别:

Http2.x使用二进制格式,而非文本格式;支持完全的多路复用;使用报头压缩降低开销;让服务器将响应主动推送给客户端,可以是带内容推送和不带内容推送的通知,Http就是单方面的请求,客户端请求服务端,一般不会出现服务端访问客户端的情况,并不是不能做到,能做到只是没做,想做的话也容易,可以使用那socket建立全双工的链接;

8,异步和同步

异步:打电话---》处理(挂断)---》打回来

同步:打电话---》处理(不挂断)----》反馈

9.如何打造一套自己的Okhttp:
9.1网络请求是耗时操作,必须开启一个线程,也就是new Thread(),但是如果有一百个网络请求是否要开启一百个线程?这就需要用到线程池

9.2,处理网络:HttpUrlConnect/输入输出流+Scoket

9.3,网络基础,(网络请求头,缓存处理,请求格式)

9.4,路由的一些操作

10,OkHttp大致内容:OkIo,Scoket

Okio:原声java  IO+基于IO的自定义封装。说白了其实就是对IO的自定义封装,Okhttp正是有了自己对IO封装,才不会使用HttpUrlConnection。因为HttpUrlConnection就是io+Scoket.

Scoket:因此Okhttp不回去使用HttpUrlConnectio,只使用Scoket(scokect实现的作用是链接)

OkHttp有一个很好的设计模式——拦截器

发布了75 篇原创文章 · 获赞 31 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/yaoyaoyao_123/article/details/93386738