Android网络基础 -- Http

本文详细介绍了Http协议的基础知识,包括其无状态、无连接的特点,传输效率和可靠性高的优势,以及工作方式。讨论了Http报文的结构,如请求报文的请求行、请求头和请求体,特别是GET和POST方法的区别。此外,还涵盖了响应报文的状态行、响应头,以及Http处理长链接的方式,如Keep-Alive机制。
摘要由CSDN通过智能技术生成

1.定义

Http(HyperText Transfer Protocol)是一个应用层协议,定义了应用间进程通信的的准则。

 

2.特点

1)传输效率高:

  • Http是无状态的,即在数据传输的过程中,不保存任何历史和状态信息
  • http协议是无连接的,所以在交换Http报文前,不需要建立Http连接(简化了服务器的设计,使服务器更容易的支持大量的并发请求)
  • 传输格式简单,即在请求时,只需要传送请求方法和路径

2)传输可靠性高:

  • 采用TCP作为运输层协议
  • TCP协议:面向连接,可靠性高,交换报文时,需预先建立TCP连接 

3)兼容性好(支持B/S,C/S模式)、灵活性高(Http允许传输任意类型的对象数据)

 

3.工作方式

Http协议采用请求/响应的工作方式,流程如下所示

-->服务端不断的监听TCP端口80(等待客户端发出连接请求)

-->客户端发送连接建立请求

-->双方建立TCP连接

-->客户端发送页面请求(HTTP请求报文)

-->服务端返回响应数据(HTTP响应报文)

-->关闭TCP连接

 

 4.HTTP报文详解

1)请求报文

  • 开始行(请求行):声明请求方法(get、post、delete、put等)、主机域名、资源路径和协议版本
  • 首部行(请求头):声明客户端、服务器/报文的部分信息
  • 实体主题(请求体):存放需要发送的数据信息

 关于get方法和post方法的区别

  • get方法:传递参数受长度限制(因为参数写在URL里);参数类型只允许ASCII字符;安全性较差;通常用于数据不敏感的小量数据。
  • post方法:传递参数不受长度限制;参数类型可以是任何类型;安全性较高;通常用于大量的敏感数据。

 

常见的请求头

1)请求和响应报文通用Header

  • Content-Type:请求体/响应体的类型,如:text/plain、application/json
  • Accpet:说明接收的类型,可以用多个值,用“,(半角逗号)”隔开
  • Content-Length:请求体/响应体的长度,单位字节
  • Content-Encoding:告知对方接收的Content-Encoding
  • ETag:给当前资源的标识,和Last-Modified、If-None-Match等配合,用于缓存控制
  • Cache-Control:取值一般为no-cache或max-age=XX,XX为整数,表示该资源缓存有效期(秒)

 

2)常见请求Header

  • Authorization:用于设置身份证信息
  • User-Agent:用户表示,如OS和浏览器类型和版本
  • If-Modified-Since:值为上一次服务器返回的Last-Modified值,用于确认某个资源是否被更改过,没有更改过(304)就从缓存中读取
  • If-None-Match:值为上一次服务器返回的ETag值,一般会和If-Modified-Since一起出现
  • Cookie:已有的Cookie
  • Referer:表示请求引用自哪个地址,比如从页面A跳转到页面B时,值为页面A的地址
  • Host:请求的主机和端口号

 

请求体:

存放需要发送给服务器的信息

 

2)响应报文

其中响应头、响应体与请求报文的请求头、请求体类似,最大的不同在于状态行和请求行

1)状态行

示例:HTTP/1.1 202 Accepted(接受)、HTTP/1.1 404 Not Found(找不到)

常见状态码:

  • 1XX:表示信息通知,如请求收到了或者正在处理
  • 2XX:表示成功,如果接受
  • 3XX:表示重定向,如果请求完成还必须采取进一步行动
  • 4XX:表示客户端错误,请求包含语法错误/无法实现
  • 5XX:表示服务器错误,服务器不能实现一种明显无效的请求

2)响应头

请求/响应通用请求头可以看上面

响应头常见Header

 

关于Cookie,Cookie是由服务器生成的。客户端第一次向服务器发送Http请求时,由于没有Cookie,在Http请求头中即Header中不包含"Cookie"。此时在服务器返回的相应(HttpResponse)中会多一个字段"Set-Cookie",此字段的值就是服务器生成的Cookie值,下次再由此客户端程序访问该服务器时,就可以把该Cookie值放入Http请求头中。服务器就会知道是哪个用户再次访问了该服务器。客户端需要保存该Cookie以此用户再次访问服务器时使用。Cookie会有一个失效时间,客户端在Cookie失效后再次访问服务器,服务器会返回一个Cookie失效的状态码(比如403之类的),并在HttpResponse中包含"Set-Cookie"字段,这里面是新的Cookie。客户端需要做的操作是:1.将新Cookie覆盖旧的Cookie。2.跳入用户登录界面,让用户用新的Cookie重新登陆。Cookie 可以保存在SharePreferenced或者Sqlite中。 

  • Data:服务器时间 
  • Last-Modified:该资源最后被修改时间
  • Transfer-Encoding:取值一般为chunked,出现在Content-Length不能确定的情况下,表示服务器不知道响应版本体的数据大小,一般同时还会出现Content-Encoding响应头
  • Set-Cookie:设置Cookie
  • Lication:重定向到另一个URL,如输入浏览器就是google.com回车,会自动跳到https:www.google.com,就是通过响应头控制的
  • Sever:服务器后台

 

5.Http处理长链接的方式 

http1.1默认保持长连接,即数据完成传输后TCP连接不断开,继续使用该通道传输数据

 

建立长链接

Http头部字符:Connection

  • 不使用长连接: Connection:close
  • 长连接的失败次数: Connection:keep-alive  Keep-alive:max = 10(即链接超过该次数则断开)
  • 长连接的超时时间: Connection:keep-alive  Keep-alive:time = 10(即超过该时间则断开)

Keep-Alive机制:

Keep-Alive机制开启后,TCP层将定时发送相应的 Keep-Alive探针以确定链接的可以用性,以次来检测链接的有无

 

结束长链接:

  • 判断传输数据是否达到了Content-Length指示的大小
  • 根据chunked编码判断:若chunked编码的数据在最后有一个空的chunked快,则表明本次传输数据结束

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值