• Android网络编程随想录(2)


            上篇文章介绍了传输层TCP协议的理论知识,本文主要介绍了TCP协议基础之上HTTP协议和HTTPS协议的理论知识。

            HTTP协议基于TCP协议定义了客户端向服务器请求数据的方式,它是面向事务的应用层协议具有灵活、简单快速、无连接和无状态的特点,是网络中交换各类数据的基础。

    HTTP协议的请求与响应报文

            HTTP报文的格式如下所示:

    image

            我们可以看出,HTTP协议的报文主要分为报文首部和报文主体两部分,中间用空行隔开。下面让我们详细介绍一下请求报文和响应报文:

        请求报文

            请求报文由三部分组成:请求行,请求报头,报文主体(请求数据)。如下图所示

            请求行中包括了请求方法、URI、协议版本三部分信息。

            其中请求方法包括以下八种,常用的是GET和POST:

      1. GET     请求获取Request-URI所标识的资源
      2. POST    在Request-URI所标识的资源后附加新的数据
      3. HEAD    请求获取由Request-URI所标识的资源的响应消息报头
      4. PUT     请求服务器存储一个资源,并用Request-URI作为其标识
      5. DELETE  请求服务器删除Request-URI所标识的资源
      6. TRACE   请求服务器回送收到的请求信息,主要用于测试或诊断
      7. CONNECT 保留将来使用
      8. OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求

            请求的URI标识了请求资源的位置,而协议版本主要有HTTP/1.0和HTTP/1.1两个版本。

            请求报头中包含了有关请求的各种信息,例如

    User-Agent:产生请求的浏览器类型。
    Accept:客户端可识别的内容类型列表。
    Host: 请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。

            报文主体中存放了请求的数据,主要是在post方法中使用,适用于提交表单等场合。

        响应报文

            响应报文也由三部分构成:状态行,响应报头,报文主体,如下图所示:

            状态行中包括HTTP协议版本,响应状态码以及状态码的文本描述。其中状态码有五类:

    1xx:指示信息--表示请求已接收,继续处理
    2xx:成功--表示请求已被成功接收、理解、接受
    3xx:重定向--要完成请求必须进行更进一步的操作
    4xx:客户端错误--请求有语法错误或请求无法实现
    5xx:服务器端错误--服务器未能实现合法的请求

            响应报头中包含了有关响应的各种信息。在报文主体中包含了需要传输的响应数据,例如HTML,二进制的数据等等。

     

            介绍完了HTTP协议的请求与响应报文,下面以浏览器请求HTML页面为例,我们看一下HTTP客户端与服务器之间的交互过程:

      1. 客户端浏览器分析URL,向DNS请求解析地址
      2. 域名系统DNS解析出服务器的IP地址返回给客户端
      3. 客户端与服务器建立TCP连接并发送GET请求报文
      4. 服务器给出响应,把相应html文件发送给客户端浏览器
      5. 释放TCP连接
      6. 浏览器显示HTML文件

            HTTP使用了TCP协议保证了可靠传输,但其本身是无连接的,也就是说双方在发送报文之前无需建立连接。同时,HTTP协议也是无状态的,服务器不保存客户端信息,更容易支持大量并发的HTTP请求。在HTTP1.0中,每次请求一个连接对象,都要发起一次连接,这样会导致请求很低效。在HTTP1.1中,使用了持续连接,也就是说服务器在响应客户端请求后在一段时间内保持连接,这样客户端与服务器之间在一段时间内可以持续保持着条连接。HTTP1.1协议持续连接有两种工作方式:

      • 非流水线方式:客户端在收到一个响应报文后才发送下一个请求。服务器在发送完一个对象后,TCP连接处于空闲状态,浪费了服务器资源。
      • 流水线方式:客户端在收到响应报文之前就可以连续发送请求报文,提高了传输效率。

        cookie

            上面提到HTTP协议是无状态的,无论客户端还是服务端都不记录HTTP相关信息。但是可以通过cookie来保存客户端和服务端保存信息,机制如下:

            cookie是一种很小的文本文件,用于在客户端保存由服务器确定的内容,请求报文会自动添加cookie中的内容。

     

        HTTPS协议

            HTTP协议在传输过程中采用明文,并且无认证和完整性验证。而HTTPS就是使用了SSL协议的HTTP协议,虽然牺牲了速度,但是保证了数据的安全性,适用于金融支付环境。

     

            总结完HTTP协议的知识,下一篇文章将会介绍在Android开发中会用到的HttpClient和UrlConnection库。

  • 相关阅读:
    Qt状态机实例
    <STL> accumulate 与 自定义数据类型
    <STL> 容器混合使用
    散列表(C版)
    Canonical 要将 Qt 应用带入 Ubuntu
    <STL> set随笔
    C++ 文件流
    视频播放的基本原理
    <STL> pair随笔
    c++ 内存存储 解决char*p, char p[]的问题
  • 原文地址:https://www.cnblogs.com/cqumonk/p/4802062.html
Copyright © 2020-2023  润新知