Android 网络编程之HTTP

一、Http协议

超文本传输协议(Hypertext transfer protocol)定义了浏览器怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。从层次的角度看,HTTP是面向应用层协议,它是万维网上能够可靠的交换文件(包括文本、声音、图像等各种媒体文件)的重要基础。、

二、URL

统一资源定位符(URL:UniformResourceLocator)也被称为网页地址,是因特网上标准的资源地址。

URL的格式由下列三本分组成:资源类型、存放资源的主机域名、资源文件名

URL的一般语法格式为:(带方括号[]的为可选项)

protocol :// hostname[:port] / path / [;parameters][?query]#fragment

第一部分是协议(或称为服务方式):

格式说明:

protocol(协议) 
指定使用的传输协议,下表列出 protocol 属性的有效方案名称。 最常用的是HTTP协议,它也是目前WWW中应用最广的协议。 
file 资源是本地计算机上的文件。格式file:///,注意后边应是三个斜杠。 
ftp 通过 FTP访问资源。格式 FTP:// 
gopher通过 Gopher 协议访问该资源。 
http通过 HTTP 访问该资源。 格式 HTTP:// 
https 通过安全的 HTTPS 访问该资源。 格式 HTTPS:// 
mailto 资源为电子邮件地址,通过 SMTP 访问。 格式 mailto: 
MMS 通过 支持MMS(流媒体)协议的播放该资源。(代表软件:Windows Media Player)格式 MMS:// 
ed2k 通过 支持ed2k(专用下载链接)协议的P2P软件访问该资源。(代表软件:电驴) 格式 ed2k:// 
Flashget 通过 支持Flashget:(专用下载链接)协议的P2P软件访问该资源。(代表软件:快车) 格式 Flashget:// 
thunder 通过 支持thunder(专用下载链接)协议的P2P软件访问该资源。(代表软件:迅雷) 格式 thunder:// 
news 通过 NNTP 访问该资源。 

hostname(主机名)

是指存放资源的服务器的域名系统(DNS)主机名或IP地址。有时,在主机名前也可包括连接到服务器所需的用户名和密码(格式:username:password@hostname)。

port(端口号)

整数,可选,省略时使用方案的默认端口,各种传输协议都有默认的端口号,如http默认端口是80。如果输入时省略,则使用默认端口号。有时处于安全或其他考虑,可以在服务器上对端口进行重定义,即采用非标准端口号,此时URL就不能省略端口号这一项。

path(路径)

有零个或多个 “/”符号隔开的字符串,一般用来表示主机上的一个目录或文件地址。

parameters(参数)

用于指定特殊参数的可选项。

query(查询)

可选,用于给动态网页传递参数,可有多个参数,用“&”符号隔开,各个参数的名和值用“=”号隔开。

fragment(信息片段)

字符串,用于指定网络资源中的片段。例如一个网页中有多个名词解释,可使用fragment直接定位到某一名词解释。

三、HTTP请求流程

1、TCP/IP的三次握手

首先了解两个名词:

SYN(Synchronours):TCP/IP建立连接时使用的握手信号

ACK(Acknowledgement)确认字符,确认发来的数据已经接收无误。

在客户机和服务器之间建立正常的TCP网络连接时,需要三个步骤用以确认连接正常。

1、客户机首先发送一个SYN消息给服务器。

2、服务器使用SYN+ACK应答表示接收到了这个消息。

3、最后客户机再以ACK消息响应。

这样客户机和服务器之间才能建立起可靠的TCP连接,数据才可以在客户机和服务器之间传递。


HTTP操作流程:

1、用户点击浏览器上的URL(超链接),web浏览器与Web服务器建立连接。

2、建立连接后,客户端发送请求给服务器,请求格式为:统一资源标识符(URL)+协议版本号+MIME信息(多个消息头)+一个空行。


3、服务端收到请求后,给与相应的响应信息,返回格式为:协议版本号+状态行+多个消息头+空行+实体内容(比如返回HTML)



4、客户端收到服务器返回信息,通过浏览器显示出来,然后与服务端断开连接。当然如果中途出现某种连接错误,错误信息会通过响应报文通知客户端并显示,比如经典的404错误。


四、HTTP的几种请求方式

实际开发中我们用的较多的方式是GET和POST,但是其他方式也可能遇到。

GET:请求获取Request-URI所标识的资源。

POST:在Request-URI所标识的资源后附加新的数据。

HEAD:请求获取由Request-URI所标识的资源的响应信息报头。

PUT:请求服务器存储一个资源,并用Request-URI作为其标识。

DELETE:请求服务器删除Request-URI所标识的资源。

TRACE:请求服务器回送收到的请求信息,用于测试或诊断。

CONNECT:保留将来使用。

OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项。

五、GET和POST的区别

GET:在请求的URL地址后以?的形式带上交给服务器的数据,多个数据间用“&”分隔,但数据量通常不超过2K,比如:http://xxx?username=...&pawd=...这种就是GET。

POST:这个则可以在请求的实体内容中向服务器发送数据,传输没有数量限制。

这两个请求都是发送数据的,只是发送的机制不同。GET的安全性非常低,POST安全性较高,但执行效率却比POST好,一般查询的时候用GET,数据增删改的时候用POST。

六、HTTP状态码合集

100~199:成功接收请求,客户端需要提交下一次请求才能完成整个处理过程

200:OK,客户端请求成功。

300~399:请求资源已移到新的地址(320、307、304)

401:请求为授权,改状态代码需与WWW-Authenticate报头域一起使用。

403:Forbidden,服务器收到请求,但是拒绝提供服务。

404:Not Found,请求资源不存在。

500:Internal Server Error,服务器发生不可预期错误

503:Server Unavaliable,服务器当前不能处理客户端请求,一段时间后可恢复正常。

七、OSI七层协议

国际标准化组织ISO于1981年正式推荐了一个网络系统结构-------七层参考模型,叫做开放系统互联模型(Open System Interconnection,OSI)。

OSI参考模型将整个网络通信的功能分为七层

OSI参考模型将整个网络通信的功能划分为七个层次他们由高到低分别是物理层(PH)、数据链路层(DL)、网络层(N)、传输层(T)、会话层(S)、表示层(P)、应用层(A)。每层完成一定的功能,每层都直接为其上层提供服务,并且所有层次都互相支持。第四层到第七层主要负责互相操作,而一层到三层则用于创造两个网路设备的物理连接。


由于七层协议颇为复杂于是有人提出了,TCP/IP的四层协议。


八、Http协议的特点

1. 支持客户/服务器模式。
2. 简单快速:
客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、 HEAD、POST。每种方法规定了客户与服务器联系的类型不同。 由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
3. 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4. 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求, 并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
5. 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。 缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每 次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。



参考:https://blog.csdn.net/qq_29635463/article/details/51683064

          http://www.runoob.com/w3cnote/android-tutorial-http.html


猜你喜欢

转载自blog.csdn.net/mahuicool/article/details/80471436