Http协议
Http协议是客户端与服务端通信时的一种非常常用的协议。Http协议主要定义了客户端与服务端的通信过程与数据包的格式。
短连接与长连接:
短连接:
当连接建立完毕后,客户端发送了请求,服务端返回响应后,连接断开。
优点:
节省服务端资源。
长连接:
客户端与服务端连接建立成功后,在整个通讯过程中连接不关闭,持续连接。
优点:
维持连接可以保证数据通信的实时性。常用于 即时通讯或网络游戏等。
Http协议的通讯过程:
Http协议是一款基于短连接模式的协议。当请求发送,响应接收后,连接断开。
Http协议中数据包的格式:
请求数据包:
1>请求行(Request Line)
GET .../test_http/get HTTP/1.1
GET:请求方式
.../test_http/get:请求资源路径
HTTP/1.1 :协议的类型与版本
2>请求消息头(Request Header)
用于告诉服务端客户端的状态及客户端传递请求参数的状态。
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
3>请求实体(Request Entity)
请求实体主要用于存放在post请求方式下向服务端传递的请求参数。
响应数据包:
1>状态行(Status Line)
HTTP/1.1 200 OK
HTTP/1.1:协议的类型与版本
200: 响应状态码(404, 500, 302)
OK: 状态描述
2>响应消息头(Response Header)
这些键值对用于告诉客户端服务端的状态以及服务端传递响应数据的状态
Server: Apache-Coyote/1.1
Content-Type: text/xml;charset=utf-8
Transfer-Encoding: chunked
Date: Sat, 08 Oct 2016 02:30:02 GMT
3>响应实体(Response Entity)
存放服务端返回给客户端的具体数据。
比如:XML文档、普通字符串、图片、二进制文件等
GET请求与POST请求的区别
1>请求参数的存放位置不同。
GET请求:参数存放在请求资源路径后用?连接
POST请求:参数存放在请求数据包的实体部分
2>是否适合传递中文参数
GET:不适合
POST:适合
3>是否适合大数据参数的提交
GET:不适合
POST:理论上没限制
4>安全性
GET:不安全
POST:相对安全
如何使用Android代码发送HTTP GET请求?
1.创建URL对象
Url url =new Url("http://ip:port/app/path");
2.通过URL对象创建HttpURLConnection对象
HttpURLConnection conn=(强转) url.openConnection();
3.设置请求方式
conn.setRequsertMethod("GET");
4.发送请求,获取响应数据包中的输入流
InputStream is =conn.getInputStream();
5.解析输入流,获取响应数据
实现把输入流中的数据解析为字符串文本。
注意:1.网络操作必须在工作线程中完成
2.网络操作需要在清单文件中注册权限
android.permission.INTERNET
如何使用Android代码发送HTTP POST请求?
1.创建URL对象
Url url =new Url("http://xx");
2.获取HttpURLConnection
HttpURLConnection conn =url.openConnection();
3.设置请求方式为POST
conn.setRequestMethod("POST");
4.设置post请求的消息头
conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
5.设置post请求的请求参数(使用输出流输出)
conn.setDoOutput(true);//开启输出流
OutPutStream os= conn.getOutputStream();
os.write("date=2018-2-23&from=广州".getBytes("utf-8"));
os.flush();
6.发送请求,获取响应输入流
InputStream is =conn.getInputStream();
7.解析输入流获取字符串文本
操作输入流——>字符串