Android HTTP编程基础

HTTP协议是一种请求响应式通信协议,通常是客户端向服务器端发送资源请求,服务器接收到客户端请求后返回对应资源响应,两端不断重复请求响应的过程就完成了客户端与服务器端的会话操作。HTTP是运行与TCP协议之上的应用层协议,它定义自己独特的报文格式,HTTP报文在网络发送时传输层使用了TCP协议,TCP协议重传和确认机制能够确保HTTP报文到达接收端,因而HTTP协议是一种可靠的数据传输协议。
在这里插入图片描述

HTTP报文

为了方便查看HTTP报文笔者搭建了简单的JSP/Servlet网络应用HttpServer并且部署在Tomcat服务器上,在应用的根路径下有一个简单的index.jsp文件。Charles网络抓包工具能够抓取本机发送和接收到的HTTP网络数据,这里就使用Charles抓包工具来查看浏览器请求index.jsp文件发送的HTTP报文。

GET /HttpServer/index.jsp HTTP/1.1 
Host: 192.168.137.240:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,
 like Gecko) Chrome/69.0.3497.100 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,
image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: JSESSIONID=FBD78F118328969D843751AAD84162CB; 
_ga=GA1.1.2124913443.1537969664; jenkins-timestamper-offset=-28800000

在发送报文分成三个部分,第一行的请求行,中间的请求头部分和最后的请求体部分,index.jsp的请求报文并不包含请求体部分,后面章节讨论请求方式的时候会重点讲解请求体。
在这里插入图片描述
请求行的GET代表请求获取服务器上的资源,资源的路径在服务器的/HttpServer/index.jsp路径下,HTTP/1.1本次请求使用的HTTP版本是1.1版本。HTTP的资源请求方式除了GET获取,用的最多的就是POST代表向服务器发送数据,其他还有五种请求方式相对来说使用的较少。

HTTP请求方式 备注
GET 请求服务器发送资源
HEAD 请求服务器资源,但不返回资源实体,只返回资源相关的头部
POST 向服务器发送数据的,HTTP中最常见的数据交互方式
PUT 请求服务器用请求的主体部分来创建资源,相当于上传主体数据
TRACE 用于获取请求经过的网络路径信息
OPTIONS 获取服务器支持的操作信息
DELETE 请求服务器删除请求URL所指定的资源

在请求头下面的多条键值对形式存在的头部用来描述本次请求的属性,Host代表服务器对象的IP地址和端口号,User-Agent代表使用的浏览器类型,Accept-*开头的头部表明本次请求支持返回的数据类型、编码和语言。最后一个Cookie代表本次HTTP请求客户端保存的Cookie信息,里面有三个键值对,重点看一下JSESSIONID键值对。HTTP协议属于无状态协议,所谓的无状态是指在HTTP协议本身并不会记录之前处理的信息,如果后续的请求需要在之前的信息上做处理,那么旧的数据必须重新传递给服务器端,重传之前数据会导致资源浪费和效率低下,现代的HTTP客户端会使用Cookie来保存之前的状态信息,而服务器端会在Session对象中保存信息。Tomcat服务器内部就是用JSESSIONID值来代表同一个会话Session对象,只要客户端请求里带了相同的JSESSIONID Cookie值这些请求就属于同一个会话,它们就可以共用键值为JSESSIONID的Session中的数据。

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=UTF-8
Content-Length: 64
Date: Sat, 04 May 2019 10:17:30 GMT
Connection: Keep-alive

<html>
<head><title>Insert title here</title></head>
</html>

接着查看Tomcat服务器返回的index.jsp响应报文,响应报文也包含了三个部分,第一行的响应结果行,接着是多个键值对组成的响应头部,响应头部下方就是服务器返回的HTML内容。
在这里插入图片描述
响应结果行里的状态码和状态描述说明本次请求的响应结果,200代表请求响应成功,OK只是简单的文本描述,HTTP定义多个响应状态值,它们主要分成了五个区间。

HTTP响应码 含义
100~199 消息型状态码
200~299 成功型状态码,通常表示本次请求成功或部分成功
300~399 重定向状态码,访问的资源位置发生变化
400~499 客户端错误状态码
500~599 服务器错误状态码

其中重定向状态码代表客户端请求的资源位置发生变化,通常会返回Location消息头中包含新的资源位置,比如访问百度网站直接发送HTTP百度服务器就会要求用户浏览器重定向到HTTPS连接地址。

HTTP/1.1 302 Moved Temporarily
Location: https://www.baidu.com/

在响应头部分以Content-开头的头部是描述响应体类型的,index.jsp的类型就是text/html长度为64个字节,Date代表本次响应发生的时间。Connection头部代表要保持本次连接,不要立即将本次请求响应的网络连接断掉。在老版本的HTTP协议中客户端和服务器完成一次请求响应就会断掉之前的连接,下一次再做请求响应就重新创建连接,网络连接的创建相对来说是非常耗时的,这种断开重连的方式对服务器和网络都会产生性能消耗,在新版本的HTTP中允许一次请求响应后保持连接方便后续的操作复用之前的连接。

请求和响应报文中的头部主要用来增加一些附加信息,头部主要分成四种:请求头部,也就是只会在请求报文中出现的头部;响应头部,只会在响应报文中出现的头部;通用头部&

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值