1、上网的整个过程

  假设我们点击了某网页上的一个链接,指向清华大学院系设置,其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中的内容

2、HTTP协议

  Internet的基本协议是TCP/IP协议,目前广泛使用的FTP、HTTP协议都是基于TCP/IP的,HTTP是Web应用使用最主要的协议。

  HTTP基于请求响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URI、协议版本、以及包含请求修饰符、客户端信息和内容的类似MIME的消息结果。服务器则返回一个状态行作为响应,内容包括消息协议的版本、成功或失败编码加上包含服务器信息、实体元信息以及可能的实体内容。

  HTTP协议是无状态的,也就是说同一用户在第二次访问同一台服务器上的页面时,服务器的响应与第一次被访问时相同。

  HTTP是无连接的,虽然HTTP是基于TCP的,但是HTTP本身是无连接的。客户端和服务器的链接是基于一种请求应答模式。及客户端和服务器建立一个链接,客户端提交一个请求,服务器端收到请求后返回一个响应,然后二者就断开链接。

3、请求/响应过程

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

请求/响应模型

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

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

  所谓持续连接就是服务器在发送一次响应后不是立即断开TCP连接,而是在一段时间内仍然保持连接,使同一用户和该服务器可以继续在这条连接上传送后续的请求和响应。持续连接有两种工作方式:非流水线式流水线式

  • 非流水线式:客户在收到一个响应后才能发送下一个请求
  • 流水线式:客户在收到HTTP的响应报文之前能够接着发送新的请求报文。于是一个接一个的请求到达服务器后,服务器就可以连续的返回响应报文。

4、代理服务器

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

5、报文

HTTP有两类报文:

  • 请求报文:从客户向服务器发送请求报文。
  • 响应报文:从服务器到客户的回答。

由于HTTP是面向文本的,因此在报文中的每一个字段都是一些ASCII码串,因而各个字段的长度都是不确定的。HTTP请求报文和响应报文都是由三个部分组成。这两种报文格式的区别就是开始行不同。

  • 开始行:用于区分是请求报文还是响应报文。在请求报文中的开始行叫做请求行,而在响应报文中的开始行叫做状态行。
  • 首部行:用来说明浏览器、服务器或报文主体的一些信息。首部可以有好几行,但也可以不使用。
  • 实体主体:在请求报文中一般都不用这个字段,而在响应报文中也可能没有这个字段。

请求报文

响应报文

请求:

GET/sample.jspHTTP/1.1
Accept:image/gif.image/jpeg,/
Accept-Language:zh-cn
Connection:Keep-Alive
Host:localhost
User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)
Accept-Encoding:gzip,deflate

上面是一个请求的例子。

6、请求方法和状态码

请求方法  

客户端和服务器之间交互会使用不同的方法。下表列出了HTTP请求报文的几种方法:

方法(操作) 意义
OPTIOON 请求一些选项的信息
GET 请求读取由URL所标记的信息
HEAD 请求读取由URL所标记的信息的首部
POST 向服务器提交信息
PUT 在指明的URL下存储一个文档
DELETE 删除指明的URL所标记的资源
TRACE 用来进行环回测试的请求报文
CONNECT 用于代理服务器

状态码

状态码都是三位数字的:

  • 1xx 表示通知信息,如请求收到或正在进行处理
  • 2xx 表示成功,如接受或知道了
  • 3xx 表示重定向,如要完成请求还必须采取进一步的行动
  • 4xx 表示客户的差错,如请求中有错误的语法或不能完成
  • 5xx 表示服务器的差错,如服务器失效无法完成请求

参考资料

————————————————

版权声明:本文为CSDN博主「Orange_ysen」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/moveym/article/details/92840574

1、HTTP的基本概念与交互模型的更多相关文章

  1. (转)iOS Wow体验 - 第六章 - 交互模型与创新的产品概念(2)

    本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第六章译文精选的第二部分,其余章节将陆续放出.上一 ...

  2. (转)iOS Wow体验 - 第六章 - 交互模型与创新的产品概念(1)

    本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第六章译文精选,其余章节将陆续放出.上一篇:Wow ...

  3. OpenGL坐标变换及其数学原理,两种摄像机交互模型(附源程序)

    实验平台:win7,VS2010 先上结果截图(文章最后下载程序,解压后直接运行BIN文件夹下的EXE程序): a.鼠标拖拽旋转物体,类似于OGRE中的“OgreBites::CameraStyle: ...

  4. 关于AJAX 的交互模型、交互流程及代码示范

    AJAX  = 异步JavaScript + XML. 它是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况 ...

  5. ajax 、ajax的交互模型、如何解决跨域问题

    1.ajax是什么? — AJAX全称为“AsynchronousJavaScript and XML”(异步JavaScript和XML),是一种创建交互式网页应用的网页开发技术. — 不是一种新技 ...

  6. AJAX是什么? AJAX的交互模型(流程)?同步和异步的区别? AJAX跨域的解决办法?

      AJAX是什么? AJAX的交互模型(流程)?同步和异步的区别? AJAX跨域的解决办法? 分类: web前端面试题2013-07-20 22:40 630人阅读 评论(0) 收藏 举报 目录(? ...

  7. 高并发第二弹:并发概念及内存模型(JMM)

    高并发第二弹:并发概念及内存模型(JMM) 感谢 : 深入Java内存模型 http://www.importnew.com/10589.html, cpu缓存一致性 https://www.cnbl ...

  8. Ajax 的概念及过程?Ajax 的交互模型?同步和异步的区别?如何解决跨域问题?

    Ajax 是什么: 1)  通过异步模式,提升了用户体验 2)  优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用 3)  Ajax 在客户端运行,承担了一部分本来由服务器承担的工 ...

  9. spark概念、编程模型和模块概述

    http://blog.csdn.net/pipisorry/article/details/50931274 spark基本概念 Spark一种与 Hadoop 相似的通用的集群计算框架,通过将大量 ...

  10. CSS概念 - 可视化格式模型(一) 盒模型与外边距叠加

    可以参考<精通CSS 高级WEB标准解决方案>第三章. 可视化格式模型 可视化格式模型要掌握的3个最重要的CSS概念是 浮动.定位.盒模型. 这些概念控制在页面上安排和显示元素的方式, 形 ...

随机推荐

  1. 关于import-route static 和default-route-advertise区别知识总结

    关于import-route static 和default-route-advertise区别知识总结 一.相关解释 import-route static  命令不能引入外部路由的默认路由,OSP ...

  2. CSS入门学习笔记

    CSS入门学习笔记一.CSS简介1.什么是CSS?2.为什么使用CSS?3.CSS的作用二.CSS语法1.CSS基础语法2.CSS注释语法3.CSS应用方法三.CSS选择器1.元素选择器2.类选择器3 ...

  3. 修改Linux终端默认编辑器,实现代码高亮

    echo export EDITOR=vim >>/etc/profile.d/env.sh

  4. mapper动态代理

    Dao接口的实现类仅仅是通过sqlsession的相关api定位到映射文件mapper中的相应id的sql语句,真正对DB进行操作的工作是由框架通过mapper中的sql完成的. mybatis框架抛 ...

  5. yum无法安装nginx

    yum无法安装nginx,检查yum配置文件  

  6. re的finditer()

    在前面学习了findall()函数,它可以一次性找到多个匹配的字符串,但是不能提供所在的位置,并且是一起返回的,如果有数万个一起返回来,就不太好处理了,因此要使用finditer()函数来实现每次只返 ...

  7. Unity中的深度测试相关知识与问题

    https://www.jianshu.com/p/f420b55edd0b?utm_campaign=hugo

  8. SAP 结构转JSON

    *使用方式 jsonstr = zui2_json=>serialize( data = ls_in compress = abap_true pretty_name = zui2_json=& ...

  9. python下载文件headers

    from aiohttp import webfrom urllib.parse import quote r = web.Response()# r.content_type = 'applicat ...

  10. new关键字解析

    new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例.new 关键字会进行如下的操作: 创建一个空的简单JavaScript对象(即{}): 链接该对象(即设置该对象的构造函数 ...