我想写一篇移动开发的网络杂谈,也不是很全,有需要的再补充。
先瞅一眼网络协议的结构,对整体有一个认识。
我们平常用的HTTP是应用层的协议。
计算机存储数据为什么是0和1?因为是根据纸条打孔的原理做的,但两个计算机之间怎么传输呢,有科学家指出用电线,根据高电平和低电平来代表0和1,但电线信号会衰减,所以有了中继器,放个磁铁在电线旁边,0和1就乱了,所以有了校验。
后来网线代替了电线,就是所谓的物理层呢。
交换机工作在数据链路层,而路由器工作在网络层,但现在好多交换机也具备了网络层的功能被叫做三层交换机
客户端和服务器端通讯时,需要有一定的协议,不然双方不知道在说什么,http和https就是常见的协议
转载请注明出处 ethan_xue博客
HTTP的全称是Hypertext Transfer Protocol,超文本传输协议
为什么叫协议呢?因为需要客户端和服务器端两边约定一个协议,能互相懂对方的意思
在HTTP/1.1协议中,定义了8种发送http请求的方法
GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT、PATCH
根据HTTP协议的设计初衷,不同的方法对资源有不同的操作方式
然而大家习惯用POST代替PUT 和DELETE 的功能,基本上只剩下GET和POST
数据是2进制数据流,1Byte = 8bit, 8bit可对应ASCII 有256bit, 正好是8bit, 所以通过ASCII能解读出内容是什么,而我们经常看到的是16进制的数据流,因为2进制表示的话比较长
请求的时候
返回数据的时候
举个特殊的栗子,有时候需要断点续传,会用到Range请求头 内容是bytes=0-499 //从0到499的头500个字节 bytes=500- //从500字节以后的所有字节
1xx 消息,一般是告诉客户端,请求已经收到了,正在处理,别急…
2xx 处理成功,一般表示:请求收悉、我明白你要的、请求已受理、已经处理完成等信息.
3xx 重定向到其它地方。它让客户端再发起一个请求以完成整个处理。
4xx 处理发生错误,责任在客户端,如客户端的请求一个不存在的资源,客户端未被授权,禁止访问等。
5xx 处理发生错误,责任在服务端,如服务端抛出异常,路由出错,HTTP版本不支持等。
服务器得知道你要和张三还是李四还是谁会话,所以这里还得提一下session, session表意是会话,cookie是响应头返回的,返回后,将cookie保存在本地。
cookie保存在客户端,session是保存在服务端,服务器鉴别session需要至少从客户端传来一个session_id,session_id通常存于cookie中,这下就理通了
这种方式是标准的浏览器的那种方式,也可以弄成token,就是唯一标识是服务器创造的,而不是cookie
这一条是默认的,就是键值对的form表单提交
这个 Content-Type 作为响应头大家肯定不陌生。实际上,现在很多人把它作为请求头,用来告诉服务端消息主体是序列化后的 JSON 字符串。
上传文件的时候Content-Type是这种的
这里简单说几条,还有一些其他的不常用这里就不陈述了
HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议
HTTPS它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版。
HTTPS和HTTP的区别主要如下:
https的安全,我觉得主要是为了防止劫持,TLS比SSL强的地方是在传输层也做了加密。可参考文章末尾的推荐文章:HTTPS 是如何保证安全的?http://www.jianshu.com/p/b894a7e1c779 SSL/TLS具有校验机制,一旦被篡改,通信双方会立刻发现。
Charles也可以获得查看数据,需要安装相应的证书.
Charles的原理
这里提到短连接和长连接,区别:
长连接能实现服务器主动向客户端发送数据。
TCP和UDP的区别:
TCP是建立连接(TCP三次握手)可靠的,UDP是不建立连接 不可靠的,可能会丢包,那UDP存在的意义呢?速度快
TCP和UDP都是用Socket
UDP应用场景:多媒体教室/网络流媒体
TCP应用场景:下载文件时,大文件用udp的话很可能下载不全
socket(套接字)的应用:即时通信(xmpp,mqtt), 推送,直播,直播时偶尔出现的马赛克就是丢帧udp,打游戏时卡了一下,英雄感觉有了瞬间移动的效果也是丢帧udp的…
心跳包
每一个客户端在连接到服务器的时候,都会有一个单独的线程来处理。比如直播时一个房间1000人,那就要有1000个连接保持。这对服务器的负荷是非常大的,但是如果说客户端断开了,服务器还保持着这个线程,就非常的耗资源。客户端不再发心跳包了,说明已经断开了,然后服务器端可直接关掉线程,省资源
Android: 随着Google对HttpClient 摒弃,和Volley的逐渐没落,OkHttp开始异军突起,而Retrofit则对okHttp进行了强制依赖。 还有一些小众的,像XUtils3, NoHttp等
IOS:ASI因为不再更新而逐渐淡出,较流行的是AFNetworking(OC),Alamofire(swift)
HTTPS 是如何保证安全的?http://www.jianshu.com/p/b894a7e1c779