zoukankan      html  css  js  c++  java
  • 【整理】【原理】理解HTTP协议的Request/Response(请求响应)模型

    【原理】理解HTTP协议的Request/Response(请求响应)模型

    系列目录

      【简介】“请求/响应”模型

        http://www.cnblogs.com/engraver-lxw/p/7550514.html

      【原理】理解HTTP协议的Request/Response(请求响应)模型——当前

        http://www.cnblogs.com/engraver-lxw/p/7550691.html

      【报文】理解HTTP协议的Request/Response(请求响应)模型

        http://www.cnblogs.com/engraver-lxw/p/7551041.html

    一.上网的整个过程

      假设我们点击了某网页上的一个链接,指向清华大学院系设置,其URL是:http://www.tsinghua.edu.cn/chn/yxsz/index.html。我们来分析一下整个过程:
      1.浏览器分析链接指向页面的URL
      2.浏览器向DNS请求解析www.tsinghua.edu.cn的IP地址
      3.DNS系统解析出清华大学服务器的地址是166.111.4.100
      4.浏览器与服务器建立TCP连接
      5.浏览器发出取文件命令:GET /chn/yxsz/index.html
      6.服务器www.tsinghua.edu.cn给出响应,把文件index.html返回给浏览器
      7.释放TCP连接
      8.浏览器解析并显示“清华大学院系设置”文件index.html中的内容

    二.HTTP协议

      Internet的基本协议是TCP/IP协议,目前广泛使用的FTP、HTTP协议都是基于TCP/IP的,HTTP是Web应用使用最主要的协议。
      HTTP基于请求响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URI、协议版本、以及包含请求修饰符、客户端信息和内容的类似MIME的消息结果。服务器则返回一个状态行作为响应,内容包括消息协议的版本、成功或失败编码加上包含服务器信息、实体元信息以及可能的实体内容。
      HTTP协议是无状态的,也就是说同一用户在第二次访问同一台服务器上的页面时,服务器的响应与第一次被访问时相同。
      HTTP是无连接的,虽然HTTP是基于TCP的,但是HTTP本身是无连接的。客户端和服务器的链接是基于一种请求应答模式。及客户端和服务器建立一个链接,客户端提交一个请求,服务器端收到请求后返回一个响应,然后二者就断开链接。

      PS: 无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

    三.请求/响应过程

      把上面的上网过程抽象一下,得到下面的模型:

      上面这个模型比较简单,它描述的是HTTP1.0中的请求/响应过程。我们分析一下,整个过程中花费的时间包括:建立TCP三次握手的时间、客户端发送请求的时间、服务器返回响应的时间。

      示例一:这里我们举个比较熟悉的案例——一个多图网页的浏览。
      1.建立连接,客户端发送一个网页请求,服务器端返回一个html页面(这里的页面只是一个纯文本的文本,也就是我们写的html代码),关闭连接;
      2.浏览器解析html文件,遇到图片标记得到url这时,客户端和服务器在建立连接,客户端发送一个图片请求,服务器返回图片应答,关闭连接。(这里又涉及到无状态定义:对于服务器来说,这次的请求虽然是同一个客户端的请求但是他还是不知道这个是之前的那个客户端是同一个,及对于事务处理没有记忆能力);
      3.重复2步骤直到html解析完毕;

      示例二:下图为请求一个万维网文档所需的时间。

      这样一次成功的请求/响应就要花费2*RTT+传输文档的时间,另外还要考虑客户端和服务器为每一次建立TCP连接分配缓存和变量的开销,如果每次请求都这样,显然开销太大。特别是当有很多用户访问同一台服务器时,这种非持续的连接会使得服务器负担很重。HTTP1.1通过引入持续连接,较好的解决了这个问题。

      所谓持续连接就是服务器在发送一次响应后不是立即断开TCP连接,而是在一段时间内仍然保持连接,使同一用户和该服务器可以继续在这条连接上传送后续的请求和响应。持续连接有两种工作方式:非流水线式和流水线式。
      非流水线式:客户在收到一个响应后才能发送下一个请求
      流水线式:客户在收到HTTP的响应报文之前能够接着发送新的请求报文。于是一个接一个的请求到达服务器后,服务器就可以连续的返回响应报文。

      但是需注意的是,服务器的响应次序必须是和客户端请求次序相同的。

    四.代理服务器

      代理服务器是一种网络实体,它又称为万维网高速缓存。代理服务器把最近的一些请求和响应暂存在本地磁盘中。若一个网络中使用了代理服务器,该网络中的主机浏览器向因特网的服务器请求服务时,就先和代理服务器建立TCP连接,并向代理服务器发出HTTP请求报文。若代理服务器中已经存放了所请求的对象,则把这个对象放入HTTP响应报文中返回给客户浏览器;否则,代理服务器就代表客户浏览器与因特网上的源点服务器建立TCP连接,并发送HTTP请求报文。源点服务器把所请求的对象放在HTTP响应报文中返回给代理服务器。代理服务器收到这个对象后,先复制在自己的本地存储器中,然后再把这个对象放在HTTP响应报文中,通过已经建立的TCP连接返回给客户浏览器。

     五.后言

      客户端与服务器进行动态交互的Web应用程序出现之后,HTTP无状态的特性严重阻碍了这些应用程序的实现,毕竟交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品。于是,两种用于保持HTTP连接状态的技术就应运而生了,一个是Cookie,而另一个则是Session。HTTP本身是一个无状态的连接协议,为了支持客户端与服务器之间的交互,我们就需要通过不同的技术为交互存储状态,而这些不同的技术就是Cookie和Session了。

    ——如有不对的地方,非常欢迎给予指导!

    ——【感谢】资料来源http://blog.csdn.net/vosamo007/article/details/49684603

    ——【感谢】资料来源http://blog.csdn.net/dzweather/article/details/51284149

    ——【感谢】资料来源http://blog.csdn.net/huan_mie/article/details/6092469

    ——【感谢】资料来源http://www.cnblogs.com/pingguohua/articles/687856.html

  • 相关阅读:
    quick cocos2dx 播放序列帧动画的实现
    PS学习笔记
    python自学笔记(十一)关于函数及书写格式
    python自学笔记(十)语句与数据结构应用
    python自学笔记(九)python练习题
    python自学笔记(八)python语句
    python自学笔记(七)排序与多级排序
    python自学笔记(六)二进制与位移
    python自学笔记(五)python文本操作
    python自学笔记(四)python基本数据类型之元组、集合、字典
  • 原文地址:https://www.cnblogs.com/engraver-lxw/p/7550691.html
Copyright © 2011-2022 走看看