安卓网络请求1————Http协议

一、目录

二、http协议简介

1.http简介

http是超文本传输协议的缩写(Hyper Text Transfer Protocol),是从万维网服务器传送到本地浏览器的传送协议

2.http的工作原理

HTTP的协议工作于客户端——服务端的框架上,即客户端向服务端发送请求,服务端接收请求后向客户端发送响应信息

3.http的特点

1.http是无连接的:无连接的含义是限制每次连接值处理一个请求,服务器处理完客户端的请求后,并受到客户的应道后即断开连接。

2.http是媒体独立的:这意味着只要客户端和服务端知道如何处理数据内容,任何类型的数据类型都可以通过http协议发送,客户端和服务端都知道使用合适的MIMR-type内容类型

3.http是无状态的:Http是无状态协议:指对事物处理没有记忆能力。

三、http协议的响应步骤

七步骤:
在这里插入图片描述

1.建立TPC连接

在HTTP工作开始之前, Web浏览器首先要通过网络与Web服务器建立连接, 该连接是通过TCP来完成的, 该协议与IP协议共同构建Internet, 即著名的TCP/IP协议族, 因此Internet又被称作是TCP/IP网络.

HTTP是比TCP更高层次的应用层协议,根据规则,有低层协议建立之后才能进行更高层协议的连接, 因此, 首先要建立TCP连接, 一般TCP连接的端口号是80.

tcp/ip 连接就是我们比较熟悉的三次握手

2、Web浏览器向Web服务器发送请求命令

一旦建立了TCP连接,Web浏览器就会向web服务器发送请求命令

3.Web浏览器发送请求头信息

浏览器发送其请求命令后,还要以头信息的形式向web服务器发送一些别的信息,这些信息用来描述浏览器自己,之后浏览器发送一空白行来通知服务器,表示它已经结束了该头信息的发送. 若是post请求, 还会在发送完请求头信息之后发送请求体.

4.Web服务器的应答

客户机向服务机发出请求后,服务器会向客户机会送应答
应答的第一部分是协议的版本号和应答状态码

5.Web服务器向浏览器发送应答头信息

正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档. 最后以一个空白行来表示头信息发送到此结束.

6.Web服务器向浏览器发送数据

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

7.Web服务器关闭TCP连接

一般情况下, 一旦Web服务器向浏览器发送了请求数据, 它就要关闭TCP连接. 如果浏览器或者服务器在其头信息加入了这行代码

Connection:keep-alive

TCP连接在发送后将仍然保持打开状态. 于是, 浏览器可以继续通过相同的连接发送请求. 保持连接节省了为每个请求建立新连接所需的时间, 还节约了网络带宽.。

四、http的消息结构

1.客户端请求消息

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四部分。
示例:

GET/sample.jspHTTP/1.1   		//请求行
Accept:image/gif.image/jpeg,*/* 		//请求头部
Accept-Language:zh-cn
Connection:Keep-Alive
Host:localhost
User-Agent:Mozila/4.0(compatible'MEIS5.01;window NT5.0)
Accept-Encoding:gzip,deflate
											//空行
username=jingqiao&password=1234    //请求数据

请求的第一行是“方法URL议/版本”:GET/sample.jsp HTTP/1.1:

以上代码中“GET”代表请求方法,“/sample.jsp”表示URI,“HTTP/1.1代表协议和协议的版本。
根据HTTP标准,HTTP请求可以使用多种请求方法。例如:HTTP1.1支持7种请求方法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE。在Internet应用中,最常用的方法是GET和POST。
URL完整地指定了要访问的网络资源,通常只要给出相对于服务器的根目录的相对目录即可,因此总是以“/”开头,最后,协议版本声明了通信过程中使用HTTP的版本。

请求头包含许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所使用的语言,请求正文的长度

2.服务端响应消息

HTTP响应也由四个部分组成:状态行,消息报头,空行和响应正文。
示例:

HTTP/1.1 200 OK   		//
Server:Apache Tomcat/5.0.12			//
Date:Mon.60ct2003	 13:23:42   GMT
Content-Length:112
									//空行
<html>					//
<head>
<title>HTTP响应示例<title>
</head>
<body>
Hello HTTP!
</body>
</html>									

状态行:他表示通信所用的协议是HTTP1.1服务器已经成功地处理了客户端发送的请求(200表示成功)

HTTP/1.1 200 OK

3.响应头信息

这一节介绍上面请求,响应的请求头中各参数的含义:
在这里插入图片描述

五、Http协议版本

Http到现在一共经历了3个版本的演化,,第一个HTTP协议诞生于1989年3月

1.Http 0.9

HTTP 0.9是第一个版本的HTTP协议,已过时。它的组成极其简单,只允许客户端发送GET这一种请求,且不支持请求头。由于没有协议头,造成了HTTP 0.9协议只支持一种内容,即纯文本。不过网页仍然支持用HTML语言格式化,同时无法插入图片。

HTTP 0.9具有典型的无状态性,每个事务独立进行处理,事务结束时就释放这个连接。由此可见,HTTP协议的无状态特点在其第一个版本0.9中已经成型。一次HTTP 0.9的传输首先要建立一个由客户端到Web服务器的TCP连接,由客户端发起一个请求,然后由Web服务器返回页面内容,然后连接会关闭。如果请求的页面不存在,也不会返回任何错误码。

2.Http 1.0

HTTP协议的第二个版本,第一个在通讯中指定版本号的HTTP协议版本,至今仍被广泛采用。相对于HTTP 0.9 增加了如下主要特性

请求和响应支持头域
响应对象以一共响应状态行开始
响应对象不止限于超文本
开始支持POST方法,支持GET,HEAD方法
支持长连接(但默认还是短连接),缓存机制,以及身份认证

3.Http 1.1

HTTP协议的第三个版本是HTTP 1.1,是目前使用最广泛的协议版本 。HTTP 1.1是目前主流的HTTP协议版本.

HTTP 1.1引入了许多的关键的性能优化:keepalive连接,chunked编码传输,字节范围请求,请求流水线等

a.keepalive连接
允许HTTP设备在事务处理结束之后将TCP连接保持在打开的状态,一遍未来的HTTP请求重用现在的连接,直到客户端或服务器端决定将其关闭为止。

在HTTP1.0中使用长连接需要添加请求头 Connection: Keep-Alive,而在HTTP 1.1 所有的连接默认都是长连接,除非特殊声明不支持( HTTP请求报文首部加上Connection: close )

b.chunked编码传输
该编码将实体分块传送并逐块标明长度,直到长度为0块表示传输结束, 这在实体长度未知时特别有用(比如由数据库动态产生的数据)

c.字节请求范围
HTTP1.1支持传送内容的一部分。比方说,当客户端已经有内容的一部分,为了节省带宽,可以只向服务器请求一部分。该功能通过在请求消息中引入了range头域来实现,它允许只请求资源的某个部分。在响应消息中Content-Range头域声明了返回的这部分对象的偏移值和长度。如果服务器相应地返回了对象所请求范围的内容,则响应码206(Partial Content)

d.其他功能

请求头和响应消息都支持Host头域
新增了一些方法
缓存处理,在1.0的基础上增加了新特性,引入了实体标签。

4.Http 2.0

HTTP 2.0是下一代HTTP协议,目前应用还非常少。主要特点有:

a.多路复用(二进制分帧)
HTTP 2.0最大的特点: 不会改动HTTP 的语义,HTTP 方法、状态码、URI 及首部字段,等等这些核心概念上一如往常,却能致力于突破上一代标准的性能限制,改进传输性能,实现低延迟和高吞吐量。而之所以叫2.0,是在于新增的二进制分帧层。在二进制分帧层上, HTTP 2.0 会将所有传输的信息分割为更小的消息和帧,并对它们采用二进制格式的编码 ,其中HTTP1.x的首部信息会被封装到Headers帧,而我们的request body则封装到Data帧里面。

b.头部压缩
当一个客户端向相同服务器请求许多资源时,像来自同一个网页的图像,将会有大量的请求看上去几乎同样的,这就需要压缩技术对付这种几乎相同的信息。

c.随时复位
Http1.1一个缺点就是当Http信息由一定长度大小数据传输时,你不能方便地随时停止它,中断TCP连接的代价是昂贵的。使用HTTP2的RST_STREAM将能方便停止一个信息传输,启动新的信息,在不中断连接的情况下提高带宽利用效率。

d.服务器端推流: Server Push
客户端请求一个资源X,服务器端判断也许客户端还需要资源Z,在无需事先询问客户端情况下将资源Z推送到客户端,客户端接受到后,可以缓存起来以备后用。

e.优先权和依赖
每个流都有自己的优先级别,会表明哪个流是最重要的,客户端会指定哪个流是最重要的,有一些依赖参数,这样一个流可以依赖另外一个流。优先级别可以在运行时动态改变,当用户滚动页面时,可以告诉浏览器哪个图像是最重要的,你也可以在一组流中进行优先筛选,能够突然抓住重点流。

六、http协议的请求方法

根据HTTP标准,HTTP请求可以使用多种请求方法。
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
在这里插入图片描述

七、http协议的状态码

当浏览者访问一个网页时,浏览者的浏览器会向网页的服务器发送请求。当浏览器就收并显示网页前,此网页的服务器会返回一个包含HTTP状态码的信息头(server header)用于响应浏览器的请求

1.http状态码分类

http状态码由三个十进制数组组成,第一个十进制数组定义了状态码的类型,后两个数字没有分类的作用,http状态码分为5种状态
在这里插入图片描述

2.http状态码列表

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值