Android网络编程(二)构:HTTP协议报文基本结

HTTP协议属于TCP/IP中的应用层,用于客户端与服务端之间的通信,客户端请求访问文本或图像等资源,服务器端则提供资源响应,HTTP协议中,必定是客户端先发起请求,服务端在未收到请求之前不会进行响应。这一章主要针对HTTP/1.1版本进行讲解,因为和HTTP/2.0有些区别。后面有空会对比这两个版本的区别。

1 HTTP在TCP/IP中的位置

HTTP与TCP/IP中其它协议的关系

找了张神图,很清晰明了的标明了HTTP的应用层协议与其它层协议的关系。

  • 1.1 DNS:属于应用层,域名解析系统,通过把域名转换为IP地址,因为底层的网络层是通过IP来寻址的,域名它不认识;
  • 1.2 TCP协议:属于传输层,负责端对端的连接,通过三次握手提供可靠性连接;
  • 1.3 IP协议:属于网络层,负责把上面要传输的数据从一台主机打包带到目标IP主机上;

2 HTTP协议请求与响应头

HTTP协议通过客户端请求和服务端的响应来建立通信,所以必须请求和响应的信息必须得按照特定的套路来,不然双方就不认识,比如说,给日本人打电话先你得先确认好用哪种语言进行沟通,这个举例有些苍白,但是Who Care!

2.1 请求报文

客户端请求的格式我们称之为请求报文,由请求的方法,URI,HTTP协议的版本号,请求的字段(可选),还有请求的内容(可选)构成。


请求的套路:请求报文

请求方法、请求URI和协议版本号构成请求行,请求首部是可选的,包括请求首部,通用首部,实体首部,报文主体与报文首部之间必须有空行,因为服务端是通过空行来判断报文主体的。


请求报文结构

下面讲一下这些各个组成。

  • 2.1.1 请求方法:首先,你客户端需要服务端提供服务,你首先要让服务器知道你要干嘛,是洗脚还是按摩或者一条龙,不同的请求意图价位可是不一样的,服务器应对方式也会有所区别。
    2.1.1.1 GET方法:获取资源。
    2.1.1.2 POST方法:获取资源的时候带上传输实体,GET也可以,但GET一般不这样用。
    2.1.1.3 PUT方法:传输实体文件。一般不用,因为不安全,方法自身没有安全验证,导致谁都可以
    给你的服务器传文件。
    2.1.1.4 HEAD方法:和GET一样获取资源,但是只拿响应头,服务端不返回报文主体;
    2.1.1.5 DELETE: 删除指定的资源,作用和PUT相反;
    2.1.1.6 OPTIONS: 获取服务端针对请求的URI支持的方法;
    2.1.1.7 TRACE: 追踪路径,追踪请求经过的代理服务器,可以用来确认请求经过代理时进行的操作;
    2.1.1.8 CONNECT:用隧道协议连接代理,用隧道协议进行通信。
  • 2.1.2 URI(统一资源标识符 Uniform Resource Identifier)
    URI用于标识资源,而URL(统一资源定位符)是用于标识互联网资源,URL是狭义的概念,URI是广义的概念,URI包含URL,在RFC文档中,已经不再使用URL,转用URI,绝对URI的格式为


  • 2.1.3 客户端使用的HTTP协议版本,顾名思义,HTTP协议的版本号
    HTTP/0.9(出现的时候没有作为标准),HTTP/1.0(开始作为标准),
    HTTP/1.1(目前的普及版本),HTTP/2.0(最新版本,正在快速普及的版本)。
  • 2.1.4 请求首部字段
    需要服务端处理的请求内容或属性,可以添加一些附加的要求,这一块的字段超级多,后面再讲。
  • 2.1.5 内容实体
    客户端要发送数据内容,比如用POST请求附加的文件和字段就是加在这里。

2.2 响应报文

收到客户端的大佬请求后,服务端会返回对应的请求信息,即响应报文,响应报文主要包括服务器端的HTTP协议版本、状态码、表示状态码的原因短语,这三者组成状态行,除此之外还有响应首部字段,以及响应主体,整体结构除了状态行,其它部分结构和请求报文类似。


响应的套路:响应报文

报文主体和首部字段之间有一个必不可少的空行。


响应报文结构

这里也大概讲一下响应报文各部分信息:

  • 2.2.1 协议版本
    服务器端使用的HTTP协议版本号
  • 2.2.2 状态码和原因短语:这两个是孪生的,状态码会伴随着描述状态码的原因短语,我们客户端就是通过状态码来判断请求是成功了还是失败了,状态码以3位数字组成,主要分为下面几类
    2.2.2.1 1xx 信息性状态码,表示请求正在处理中
    2.2.2.2 2xx 请求成功状态码,请求正常处理完成,常用的有200,204,206
    2.2.2.3 3xx 重定向状态码,需要进行一些附加的操作才能完成请求,常用的有301,302,303,307
    2.2.2.4 4xx 客户端错误状态码,表示客户端的请求存在错误,常用的有400,401,403,404
    2.2.2.5 5xx 服务器端错误状态码,表示服务器端处理发生错误,常用的有500,503
    大概码一下这些常用的,以后翻起来也方便不是。
状态码 原因短语 原因短语
200 OK 成功处理客户端发来的请求
204 No Content 成功处理请求,但不返回主体内容,通常用于客户端向服务器发送信息而服务器无需返回新内容的情况下使用
206 Partial Content 客户端进行范围请求,即GET方法要求获取资源的部分内容
301 Moved Permanently 永久重定向,所请求的资源已经更换URI了
302 Found 临时重定向,所请求的资源暂时更换成新的URI
303 See Other 资源存在另一个URI,明确要求客户端采用GET方法获取资源
304 Not Modified 表示客户端带有附加条件请求资源时,服务器端已找到资源,但是不满足客户端的附加条件,3xx里的奇葩,因为跟重定向没关系
307 Temporary Redirect 临时重定向,和302有一样的意思,满足特定浏览器需求
400 Bad Request 请求报文中存在语法错误
401 Unauthorized 表示请求的内容需要有身份认证信息,嗯,大概就是你权限还不够的意思
403 Forbidden 服务器拒绝服务,没有为什么,就是拒绝
404 Not Found 服务器找不到对应请求的资源,在服务器想委婉拒绝你的时候也会用这个借口
500 Internal Server Error 什么都不用说了,服务器端出现bug了
503 Service Unavailable 还请求个蛋啊,服务器已经挂了

请求报文还有响应报文的首部字段还没有细讲,因为这些字段实在太多了,看缘分,后面再码一下,就当做扫盲了。

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

推荐阅读更多精彩内容