前言
基本上只要做过Android开发都离不开网络编程,大部分我们跟服务器做的交互都是通过Http协议来完成的,虽然现在有很多的开源库帮我们完成了网络请求,但是作为一个有追求的程序员如果只会使用开源库,连http协议都没搞清楚,这肯定是不行的,废话不多说,直接进入正题。
Http报文构成
http协议作为互联网使用最频繁的一种网络协议,主要使用在客户端和服务器端的通讯。请求访问文本或者图像等资源的一端称为客户端,提供资源响应的一端称为服务端。Http协议所有传输的数据都是以Ascii编码的文本,具有可读。Http传输时只有两种格式的报文,一般为客户端发送的请求报文,服务端响应的响应报文。
请求报文构成: 1. 请求方法 2. 请求URI 3. 协议版本 4. 可选的请求首部字段(Key:Value)5. 内容实体构成。
响应报文构成:1. 协议版本 2. 状态码(200-500) 3.用于解释状态码的原因短语,4.可选的响应首部字段 5. 内容实体构成。
Http请求方法
Get: 获取资源
用来请求访问已被URI识别的资源。指定的资源经过服务器解析后返回响应内容。
Post: 传输主体数据
虽然GET方法也可以传输实体的主题,但是我们一般使用Post方法,Post的主要木钉并不是要获取响应的主体内容。
HEAD:获取报文首部
Head方法和get方法一样,只是不返回报文主体部分。用于确认URI的有效性以及资源更想的日期时间。
PUT DELETE方法: 新增文件 删除文件
用的比较少,因为http协议这两个方法不带有验证机制,所有WEB用的很少。
OPTIONS:询问支持的方法
用来查询针对请求URI指定的资源支持的方法(Http方法)。
TRACE:追踪路径
用于让WEB服务器将之前的请求通信环回给客户端的方法。发送请求时,在Max-forward首部字段填入数值,每经过一个服务器就将该数字减1,当数值刚好减到0,就停止传输,最后接受到的服务器端则返回状态200 OK的响应。
CONNECT: 要求用隧道协议连接代理
要求在与代理服务器通信时建立隧道,实现隧道协议进行TCP通信。主要使用SSL和TLS协议传输。一般也用的比较少。
响应报文的状态码
100-199:信息状态码 接受的请求正在处理
200-299:成功状态码 请求正常处理完毕
300-399:重定向状态码 需要额外的操作完成请求
400-499:客户端错误码 服务器无法处理请求
500- :服务器错误码 服务器处理请求失败