Android网络基础

前言

做开发到现在,一直在重复用着别人造好的轮子,就拿网络框架来说吧,Retrofit和okHttp的组合用起来十分方便,功能也强大,但一直处于只会用,但不了解原理,也没有对网络编程进行过系统的学习,今天打算对网络编程进行系统的学习和整理。

Http请求和响应步骤

image.png
tcp三次握手

所谓三次握手即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送三个包以确认连接的建立。

第一次握手:客户端发送syn(syn=j)包到服务器,并进入SYN_SEND状态,等待服务器确认。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即(syn+ack)包,并进入SYN_RECV状态。
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。
tcp一旦建立,在通信双方中的任一方主动关闭连接之前,TCP连接都将被一直保持下去。

浏览器像服务器发送请求命令

一旦tcp连接建立成功后,浏览器会向服务器发送请求命令。

请求行 (请求方式 资源地址 协议脚本)
 GET http://baidu.com HTTP/1.1
浏览器发送请求头信息

浏览器发送其请求命令之后,要以头信息形式向web服务器发送用于描述浏览器的信息,之后用一行空白行通知服务器,表示结束头信息的发送。若是 Post 请求,发送完请求头信息之后还要发送请求体。

服务器应答

服务器响应客户发送的数据及其请求文档,最后以一行空白行表示头信息发送结束。

服务器向浏览器发送数据

服务器向浏览器发送头信息后,它就以 Content-type 对应头信息所描述的格式发送用户请求的实际数据。

服务器关闭TCP连接

一般情况下,一旦 web 服务器向浏览器发送了请求数据,它要关闭 TCP 连接,如果浏览器或服务器在头信息加入Connection:keep-alive 这行代码,TCP 连接在发送后仍要保持打开状态,浏览器可以继续通过相同的连接发送请求,保持连接节省了为每个请求建立新连接所需的时间, 还节约了网络带宽。

Http请求与响应实体

http请求由三部分组成,分别是请求行、请求头、请求体

请求行

用于说明请求报文、主机域名、资源路径和协议版本

1 请求方法

GET 请求获取Request-URI所标识的资源
POST 请求获取Request-URI所标识的资源
HEAD 请求获取由 Request-URI 所标识的资源的响应消息报头
PUT 请求服务器存储一个资源,并用 Request-URI 作为其标识
DELETE 请求服务器删除 Request-URI 所标识的资源
TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断

2 请求路径

定义:Uniform Resoure Locator,统一资源定位符,是一种自愿位置的抽象唯一识别方法。
作用:用于表示资源位置和访问这些资源的方法
组成:
<协议>://<主机>:<端口>/<路径>
协议:采用的应用层通信协议,比如在HTTP协议下的URL地址:
HTTP://<主机>:<端口>/<路径>
主机:请求资源所在主机的域名
HTTP默认端口号80

3 协议版本

HTTP协议版本主要是1.0、1.1、2.0

请求头

作用:说明客户端、服务器或报文的部分信息
使用方式:采用” header(字段名):value(值)“的方式
header标头详解
示例

Accept:text/html,application/xhtml+xml,application/xml
Accept-EncodingP:gzip,deflate,sdch
Cache-Control:max-age=0
Connection:keep-alive

请求体

作用:用于存放需要发送给服务器的数据信息
使用方式:
1 数据交换格式
请求体可以是任意格式的,服务器需要解析,如 JSON

2 键值对形式
键与值之间用 ” = “ 连接,每个键值对间用 & 连接,且只能用ASCII字符,如 Query String

3 分部分形式
请求体被分为多个部分,应用场景是文件上传,比如邮件上传等等
每段以-- {boundary} --开头
然后是该段的描述头
描述头之后空一行接内容
每段以 -- {boundary} --结束

Http响应

Http响应也是由三个部分组成,分别是:状态行(协议版本,状态码,状态信息)、响应头、响应正文

1 状态行 (空格不能省)

协议版本 [空格] 状态码 [空格] 状态信息 [\r\n]

状态码
200 客户端请求成功
400 由于客户端请求有语法错误,不能被服务器所理解
401 请求未经授权
403 服务器收到请求,但是拒绝服务
404 资源不存在
500 服务器发生不可预期的错误
503 服务器当前不能够处理客户端的请求,一段时间后服务器可能会恢复正常

2 响应头

响应头详解

3 响应体

作用:用于存放需要返回给客户端的数据信息
使用方式:和请求体是一致的,同样分为:任意类型的数据交换格式、键值对形式和分部分形式,这里不作过多描述。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容