zoukankan      html  css  js  c++  java
  • Androidclient採用Http 协议Post方式请求与服务端进行数据交互

    本演示样例以Servlet为例,演示Android与Servlet的通信

    众所周知,Android与server通信通常採用HTTP通信方式和Socket通信方式。而HTTP通信方式又分get和post两种方式。至于Socket通信会在以后的博文中介绍。

     

    HTTP协议简单介绍:

    HTTP (Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网经常使用的协议之中的一个,HTTP协议是建立在TCP协议之上的一种协议。

     

    HTTP连接最显著的特点是client发送的每次请求都须要server回送响应。在请求结束后,会主动释放连接。

    从建立连接到关闭连接的过程称为“一次连接”。  在HTTP 1.0中。client的每次请求都要求建立一次单独的连接。在处理完本次请求后,就自己主动释放连接。  在HTTP 1.1中则能够在一次连接中处理多个请求,而且多个请求能够重叠进行,不须要等待一个请求结束后再发送下一个请求。

     

    因为HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”、“无状态”,要保持client程序的在线状态,须要不断地向server发起连接请求。通常的做法是即使不须要获得不论什么数据,client也保持每隔一段固定的时间向server发送一次“保持连接”的请求,server在收到该请求后对client进行回复。表明知道client“在线”。

    若server长时间无法收到client的请求,则觉得client“下线”,若client长时间无法收到server的回复,则觉得网络已经断开。

     

    基于HTTP1.0协议的client在每次向server发出请求后,server就会向client返回响应消息,在确认client已经收到响应消息后,服务端就会关闭网络连接。

    在这个传输数据过程中,并不保存不论什么历史信息和状态信息,因此,HTTP协议也被觉得是无状态的协议。

     
    HTTP1.1和HTTP1.0相比較而言,最大的差别就是添加了持久连接支持。

    当client使用HTTP1.1协议连接到server后,server就将关闭client连接的主动权交还给client;也就是说,仅仅要不调用Socket类的close方法关闭网络连接。就能够继续向server发送HTTP请求。

     

    HTTP连接使用的是“请求—响应”的方式(2次握手)。不仅在请求时须要先建立连接,并且须要client向server发出请求后,server端才干回复数据。

    而Socket连接在两方建立起连接后就能够直接进行数据的传输

     

     
    HTTP协议的特点:

    支持B/S及C/S模式;

    简单高速:客户向server请求服务时,仅仅需传送请求方法和路径。请求方法经常使用的有GET、HEAD、POST。

    灵活:HTTP 同意传输随意类型的数据对象。正在传输的类型由Content-Type 加以标记。

    无状态:HTTP 协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着假设兴许处理须要前面的信息。则它必须重传。这样可能导致每次连接传送的数据量增大。

     

    HTTP协议请求方法:

    请求行中包含了请求方法,解释例如以下:

    GET 请求获取Request-URI 所标识的资源;

    POST 在Request-URI 所标识的资源后附加新的数据;

    HEAD 请求获取由Request-URI 所标识的资源的响应消息报头

    PUT 请求server存储一个资源,并用Request-URI 作为其标识

    DELETE 请求server删除Request-URI 所标识的资源;

    TRACE 请求server回送收到的请求信息。主要用于測试或诊断

    CONNECT 保留将来使用

    OPTIONS 请求查询server的性能,或者查询与资源相关的选项和需求

     

    Get与Post请求差别:

    Post请求能够向server传送数据。并且数据放在HTML HEADER内一起传送到服务端URL地址,数据对用户不可见。而get是把參数数据队列加到提交的URL中,值和表单内各个字段一一相应, 比如(http://www.baidu.com/s?

    w=%C4&inputT=2710)

    get 传送的数据量较小,不能大于2KB。

    post传送的数据量较大,一般被默觉得不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。

    get安全性很低。post安全性较高。

    项目结构图:

     

      get方式:

             get机制用的是在URL地址里面通过?号间隔。然后以name=value的形式给client传递參数。所以首先要在Androidproject下的AndroidGetTest.java中onCreate方法定义好其URL地址以及要传递的參数。然后通过URL打开一个HttpURLConnection链接,此链接能够获得InputStream字节流对象。也是往服务端输出和从服务端返回数据的重要过程,而若服务端response.getInputStream.write()往andorid返回信息时候,就能够通过InputStreamReader作转换,将返回来的数据用BufferReader显示出来。

    详细代码例如以下:

             Servlet端接收数据并返回通知:

     

      Android端发送消息并接收Servlet返回的消息:

    post方式:

             post传输方式不在URL里传递,也正好攻克了get传输量小、easy篡改及不安全等一系列不足。主要是通

    过对HttpURLConnection的设置。让其支持post传输方式。然后在通过相关属性传递參数(若须要传递中文字符,则能够通过URLEncoder编码,而在获取端採用URLDecoder解码就可以)

     


  • 相关阅读:
    Compression algorithm (deflate)
    tcpip数据包编码解析(chunk and gzip)_space of Jialy_百度空间
    What's the difference between the "gzip" and "deflate" HTTP 1.1 encodings?
    gzip压缩算法: gzip 所使用压缩算法的基本原理
    Decompressing a GZip Stream with Zlib
    Frequently Asked Questions about zlib
    how to decompress gzip stream with zlib
    自己动手写web服务器四(web服务器是如何通过压缩数据,web服务器的gzip模块的实现)
    What's the difference between the "gzip" and "deflate" HTTP 1.1 encodings?
    C语言抓http gzip包并解压 失败 C/C++ ChinaUnix.net
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/7100420.html
Copyright © 2011-2022 走看看