一次HTTP操作称为一个事务,其工作过程可分为四步:
- 首先客户端与服务器需要建立连接。只要单机某个超级链接,HTTP的工作就开始了。
- 建立连接后,客户端发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信号包括请求修饰符、客户端信息和其他内容。
- 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或者失败的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
- 客户端接收到服务器所返回的信息通过浏览器显示在用户的显示屏幕上,然后客户端和服务器断开连接。
HTTP协议永远都是客户端发起请求,服务器回送相应。
这样就限制了使用HTTP协议,无法实现在客户端没有发起请求的时候,服务器将消息推送给客户端。
HTTP协议是一个无状态的协议,同一个客户端的这次请求和上次请求是没有关系的。
URL(统一资源定位符)也被称为网页地址,是因特网上标准的资源的地址。
例如:http://www.imooc.com/index.jsp,URL的格式由三部分组成:
- 第一部分是协议(或称为服务方式)。例如“http”或者“https”;
- 第二部分是存有该资源的主机IP地址(有时候也包括端口号)。例如“www.imooc.com”;
- 第三部分是主机资源和具体地址,例如目录和文件名。例如“index.jsp”;
第一部分和第二部分用“://”隔开,第二部分和第三部分用“/”隔开。第一部分和第二部分不可缺少。
HTTP协议建立在TCP/IP协议之上。
TCP/IP三次握手:
客户端要和服务端建立连接时,客户端向服务端发送SYN消息,服务器收到消息后向客户端发送SYN+ACK消息,最后客户端再以ACK消息响应,如此一来才会在客户端和服务端之间建立起可靠的TCP连接,数据才可以在客户端和服务器之间传递。
SYN:synchronous,握手信号。
ACK:Acknowledgment,确认字符。接收站发送给发送站的一种传输类控制字符,表示发来是数据已接收、确认无误。
OSI (Open System Interconnection)七层协议
由低到高分别是:
物理层
数据链路层
网络层
传输层
会话层
表示层
应用层
如下摘自网络:
- 物理层的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异。
- 数据链路层(Data Link Layer)是OSI模型的第二层,负责建立和管理节点间的链路。
- 网络层(Network Layer)是OSI模型的第三层,它是OSI参考模型中最复杂的一层。它在下两层的基础上向资源子网提供服务。其主要任务是:通过路由选择算法,为报文或分组通过通信子网选择最适当的路径。
- 传输层(Transport Layer)是OSI模型的第4层。因此该层是通信子网和资源子网的接口和桥梁,起到承上启下的作用。该层的主要任务是:向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输。
- 会话层(Session Layer)是OSI模型的第5层,是用户应用程序和网络之间的接口,主要任务是:向两个实体的表示层提供建立和使用连接的方法。
- 表示层(Presentation Layer)是OSI模型的第六层,它对来自应用层的命令和数据进行解释,对各种语法赋予相应的含义,并按照一定的格式传送给会话层。其主要功能是“处理用户信息的表示问题,如编码、数据格式转换和加密解密”等。
- 应用层(Application Layer)是OSI参考模型的最高层,它是计算机用户,以及各种应用程序和网络之间的接口,其功能是直接向用户提供服务,完成用户希望在网络上完成的各种工作。
后来有人将此简化为 TCP/IP 四层协议
http/1.0和1.1区别
HTTP/1.0每次请求都需要建立新的TCP连接,连接不能复用。
HTTP/1.1新的请求可以在上次请求建立的TCP连接之上发送,连接可以复用。优点是减少重复进行TCP三次握手的开销,提高效率。
HTTP1.1在Request消息头里头多了一个Host域,HTTP1.0则没有这个域。Host:www.w3.org
HTTP1.1增加了OPTIONS,PUT,DELETE,TRACE,CONNECT这些Request方法等
HttpClient比HttpURLConnection更加的强大和丰富。所以建议使用这个来开发Android的http客户端。
但从android sdk(6.0)开始,Google在官方文档里已经不推荐用HttpClient。
话说Google废弃了HttpClient,却没有新的网络框架作为替代……而实际开发中又并不会用HttpURLConnection,所以一般都是用开源网络请求框架,比如 loopj和 Volley。