Android HTTP网络详解

xiaoxiao2021-02-28  57

一:HTTP网络请求原理

HTTP的请求方式:

1、GET请求:获取服务器中的某个资源,例如客户端请求链接为www.ylog.me/articles/123.html则此时服务器将123.html的内容返回给客户端,在请求时如果需要传递参数,则需要在链接后添加?符号。例如需要传递用户名与用户id两个参数,那么格式应该为www.ylog.me/articles/123.html?username=myname&userid=123 2、POST请求:POST通常用于提交参数给客户端,返回值为服务器状态码 3、PUT请求:与POST方法相同,区别在于PUT写入资源 4、DELETE请求:DELETE方法就是请求服务器请求URL所指定的资源,参数传递需要与GET请求一样,参数都需要放在请求URL中 5、HEAD请求:HEAD请求与GET方法类似,在响应中只返回首部。并不返回实体的主体部分,只用于检查资源的首部进行检查,通过查看相应中的状态码,查看对象是否存在。 6、TRACE请求:TRACE请求会在目的服务器发起一个“回环”诊断,行程最后一站弹回一条TRACE响应,并在相应主体中携带他收到的原始请求报文,以便于开发人员查看原始报文检查是否被毁坏或修改过 7、OPTIONS请求:请求WEB服务器告知其支持的各种功能。通过询问服务器通常支持哪些方法,或者对某些特殊资源支持哪些方法。

HTTP报文格式解析:

1、起始行:为报文的第一行,在相应报文中粗略的说明了报文的执行结果 2、首部字段:起始行后面有零个或多个首部字段,每个首部字段都包含一个名字和一个值,为了便于解析,两者之间用冒号进行分隔。 3、主体:首部字段的空格之后就是可选的报文主体了,其中包含了所有类型的数据,起始行和首部就是结构化的文本形式,而主体则可以包含任意的二进制数据

报文示例

GET报文:

GET /?p=909 HTTP/1.1<br> Host: www.ylog.me<br> Cache-Control: no-cache<br>

POST(PUT)报文:

POST /?p=909 HTTP/1.1<br> Accept-Encoding: gzip<br> Content-Length: 22587<br> Content-Type:multipart/form-data; boundary=OCqxMF6-JxtxoMDHmoG5W5Y9MGRsTbF6-JxtxoMDHmoG5W5Y9MGRsTb<br> Host: www.ylog.me Connection: Keep-Alive<br> //此处开始为请求内容<br> --OCqxMF6-JxtxoMDHmoG5W5Y9MGRsTbF6-JxtxoMDHmoG5W5Y9MGRsTb<br> Content-Disposition:form-data; name="username"<br> Content-Type: text/plain; charset=UTF-8<br> Content-Transfer-Encoding: 8bit<br> Mr.Simple(参数,上面的参数数据格式对应当前参数)<br> --OCqxMF6-JxtxoMDHmoG5W5Y9MGRsTbF6-JxtxoMDHmoG5W5Y9MGRsTb<br> Content-Disposition: form-data; name="images"<br> filename="/filepath/iamge.jpg"<br> Content-Type: application/octet-stream<br> Content-Transfer-Encoding: binary<br> 此处为图片的二进制数据,数据过程,在此省略
响应报文:

HTTP响应由三个部分组成,分别为:状态行,消息报文,相应报文

<状态栏> <响应报文header> <空行> [响应报文内容]

状态行格式如下:

HTTP-Version Status-Code Reason-Phrase CRLF

状态返回表如下

取值范围含义100~199指示信息–表示请求已接收,继续处理200~299请求成功。表示请求已被接收,理解,接收300~399重定向。要完成请求必须进行更进一步的操作400~499客户端错误。请求有语法错误或请求无法实现500~599服务器端错误。服务器未能实现合法的请求

Notes:常见状态码,状态描述的说明如下 (a) 200 OK:客户端请求成功 (b) 400 Bad Request: 客户端请求有语法错误,不能被服务器所理解 (c) 401 Unauthorized: 请求未授权,这个状态代码必须和WWW-Authenticate报头域一起使用 (d) 403 Forbidden: 服务器收到请求,但是拒绝提供服务 (e) 404 Not Found: 请求资源不存在,举个例子: 输入了错误的URL (f) 500 Internal Server Error: 服务器发生不可预期的错误 (g) 503 Server Unavaliable: 当前服务器无法请求客户端的需求,一段时间后可能恢复正常

GET请求的Response返回示例

HTTP/1.1 200 OK Date: Sat, 31 Dec 2005 23:59:59 GMT Content-Type: text/html;charset=UTF-8 Content-Length: 122 <html> <head> <title>测试数据</title> </head> <body> <!-这里是Body--> </body> </html>

常见的请求头部 HTTP首部可以分为以下几类,如表所示

首部类型作用通用首部可以同时出现在请求报文和响应报文中请求首部提供更多有关请求的信息响应首部提供更多有关响应的信息实体首部描述主体的长度和内容,或者资源本身扩展首部HTTP规范中没有定义的新首部

经典的请求头为: - Content-Type: 请求数据的格式 - Content-Length: 消息长度 - Host: 请求的主机名,允许多个域名同处一个IP地址,即虚拟主机 - User-Agent: 发出请求的浏览器类型,可以自行设置 - Accept: 客户端可识别的内容类型列表 - Accept-Encoding: 客户端可识别的数据编码 - Connection : 允许客户端和服务器指定与请求/响应连接有关的选项,例如Keep-Alive - Transfer-Encoding:告知接收端为了保证报文的可靠传输,对报文采用了什么编码方式

转载请注明原文地址: https://www.6miu.com/read-72031.html

最新回复(0)