Android 网络编程(一) Http协议原理
Http简介
HTTP是一个属于应用层的面向对象的协议。
Http协议的主要特点
-
支持C/S (客户/服务器) 模式。
-
简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST,每种方法规定了客户与服务器联系的类型不同
-
灵活:HTTP允许传输任意类型的数据对象。正在传输的类型有Content-Type加以标记。
-
无连接:无连接的含义是限制每次的连接只处理一个请求,服务器处理网客户的请求,并收到客户的应答后,即断开连接。
-
无状态:HTTP协议是无状态协议,无状态是指协议对事物的处理没有记忆能力,缺少状态意味着如果后续处理需要前面的信息,则它必须重传。
HTTP URL的格式如下
http://host[":"端口号port][abs_path]
http表示要通过HTTP协议来定位网络资源;host表示合法的Internet主机域名或者IP地址;port指定一个端口号。为空则使用默认端口80;abs_path指定请求资源的URI
Http的报文
Http的两种报文分别是 请求报文 和 响应报文。
Http的请求报文

通常来说一个HTTP请求报文由 请求行、请求报头、空行、和 请求数据组成
1.请求行
请求行由请求方法、URL字段 和Http协议的版本组成,格式如下:
Method Request_URI HTTP-Version CRLF
-
其中Method表示请求方法:HTTP请求方法一共有八种,分别为:
- GET:请求获取Request-URI所标识的资源
- POST:在Request-URI所标识的资源后附加新的数据
- HEAD:请求获取Request-URI所标识的资源的响应消息报头
- PUT :请求服务器存储一个资源,并用Request-URI作为其标识
- DELETE:请求服务器删除Request-URI所标识的资源
- TRACE : 请求服务器回送收到的请求信息,主要用于测试或诊断
- CONNECT: HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
- OPTIONS :请求查询服务器的性能,或者查询与资源相关的选项和需求
-
其中Request-URI是一个统一的资源标识符,格式在上面已经给出,比如我的简书个人主页URI
http://www.jianshu.com/u/c3e3b8345577
-
其中HTTP-Version表示请求的HTTP协议版本
-
其中CR LF表示回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或者LF字符)。
2.请求报头
在请求行之后会有0个或者多个请求报头,每个请求报头都包含一个头部域名称和头部域指,他们之间用冒号:分开。请求头部会另起一行,发送回车符合换行符告诉服务器请求头已经结束了。
3.请求数据
请求数据不在GET方法中使用,而是在POST方法中使用,POST方法使用于需要客户填写表单的场合,与请求数据相关的最常用的请求头是Content-Type和Content-Length。
HTTP的响应报文
Http的响应报文格式和http请求报文的格式大同小异,示意图如下:
HTTP请求报文由 请求行、请求报头、空行、和 请求数据四部分组成,HTTP的响应报文同样由四部分组成,分别是状态行、消息报头、空行、响应正文。
1.状态行:
状态行由服务器HTTP协议版本号、响应状态码、文本描述组成
状态行格式如下:
HTTP-Version Status-Code Reason-Phrase CRLF
- 其中HTTP-Version 表示服务器的Http协议版本号
- 其中Status-Code表示服务器返回的状态码,状态码由三位数字组成,第一位数字定义了响应的类别,且有五种可能取值
- 100-199:指示信息,表示请求已接收,继续处理
- 200-299:请求成功,表示请求已经被成功接收、理解、接受
- 300-399:重定向,要完成请求必须进行更一步的操作。
- 400-499:客户端错误,请求有语法错误或者请求无法实现。
- 500-599 :服务器端错误,服务器未能实现合法的请求。
常见的状态码有:- 200 :OK 客服端请求成功
- 400 Bad Request:客户端请求有语法错误,不能被服务器所理解
- 401 Unauthorized:请求未授权,此状态码须和WWW-Authenticate报头域一起起作用。
- 403 Forbidden :服务器收到请求,但是拒绝服务。
- 500 Internal Server Error :服务器发生不可预期的错误、
- 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常。
HTTP的消息报头
HTTP的消息报头分为通用报头、请求报头、响应报头、实体报头等
通用报头
既可出现在请求报头,也和出现在响应报头当中。
- Date:表示消息产生的时间和日期
- Connection:允许发送指定连接的选项,例如指定连接是连续的,或者指定“close”选项,通知服务器,在响应完成后,关闭连接。
- Cache-Control:用于指定缓存指令,缓存指令是单向的(响应中出现的缓存指令在请求中未必实现)且独立的(一个消息的缓存指令不会影响另一个消息处理机制的缓存机制)
请求报头
请求报头通知服务器关于客户端请求的信息,典型的请求头有
- Host:请求的主机名
- Connection:允许客户端和服务器指定与请求/响应连接的选项,例如keep-Alive则表示保持连接。
- User-Agent:发送请求的浏览器类型、操作系统信息
- Accept:客户端可识别的内容类型列表
- Accept-Encoding:客户端可识别的数据编码
- Accept-Language:表示浏览器所支持的语言类型
响应报头
用于服务器传递自身信息的响应,常见的响应报头:
- Location:用于重定向接受者到一个新的位置,常用在更换域名的时候
End:此文的内容基本全来自于望哥的博客,但是是自己在学习过程中按照自己的理解逻辑梳理一遍后手敲做的笔记,不是简单的复制粘贴。这么做的目的一来是加深印象,二来也是希望能培养起自己写技术博客的习惯。由于目前自己懂得太少,没优质内容可以输出,那么就先从抄笔记做起吧!
最后附上望哥的博客地址:刘望舒