1、HTTP的基本概念与交互模型
1、上网的整个过程
假设我们点击了某网页上的一个链接,指向清华大学院系设置,其URL是:http://www.tsinghua.edu.cn/chn/yxsz/index.html。我们来分析一下整个过程:
- 浏览器分析链接指向页面的URL
- 浏览器向DNS请求解析www.tsinghua.edu.cn的IP地址
- DNS系统解析出清华大学服务器的地址是166.111.4.100
- 浏览器与服务器建立TCP连接
- 浏览器发出取文件命令:GET /chn/yxsz/index.html
- 服务器www.tsinghua.edu.cn给出响应,把文件index.html返回给浏览器
- 释放TCP连接
- 浏览器解析并显示“清华大学院系设置”文件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 表示服务器的差错,如服务器失效无法完成请求
参考资料
- 计算机网络(第六版) 谢希仁
- Http协议分析
- 理解HTTP协议的Request/Response模型
- HTTP深入浅出 http请求
————————————————
版权声明:本文为CSDN博主「Orange_ysen」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/moveym/article/details/92840574
1、HTTP的基本概念与交互模型的更多相关文章
- (转)iOS Wow体验 - 第六章 - 交互模型与创新的产品概念(2)
本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第六章译文精选的第二部分,其余章节将陆续放出.上一 ...
- (转)iOS Wow体验 - 第六章 - 交互模型与创新的产品概念(1)
本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第六章译文精选,其余章节将陆续放出.上一篇:Wow ...
- OpenGL坐标变换及其数学原理,两种摄像机交互模型(附源程序)
实验平台:win7,VS2010 先上结果截图(文章最后下载程序,解压后直接运行BIN文件夹下的EXE程序): a.鼠标拖拽旋转物体,类似于OGRE中的“OgreBites::CameraStyle: ...
- 关于AJAX 的交互模型、交互流程及代码示范
AJAX = 异步JavaScript + XML. 它是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况 ...
- ajax 、ajax的交互模型、如何解决跨域问题
1.ajax是什么? — AJAX全称为“AsynchronousJavaScript and XML”(异步JavaScript和XML),是一种创建交互式网页应用的网页开发技术. — 不是一种新技 ...
- AJAX是什么? AJAX的交互模型(流程)?同步和异步的区别? AJAX跨域的解决办法?
AJAX是什么? AJAX的交互模型(流程)?同步和异步的区别? AJAX跨域的解决办法? 分类: web前端面试题2013-07-20 22:40 630人阅读 评论(0) 收藏 举报 目录(? ...
- 高并发第二弹:并发概念及内存模型(JMM)
高并发第二弹:并发概念及内存模型(JMM) 感谢 : 深入Java内存模型 http://www.importnew.com/10589.html, cpu缓存一致性 https://www.cnbl ...
- Ajax 的概念及过程?Ajax 的交互模型?同步和异步的区别?如何解决跨域问题?
Ajax 是什么: 1) 通过异步模式,提升了用户体验 2) 优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用 3) Ajax 在客户端运行,承担了一部分本来由服务器承担的工 ...
- spark概念、编程模型和模块概述
http://blog.csdn.net/pipisorry/article/details/50931274 spark基本概念 Spark一种与 Hadoop 相似的通用的集群计算框架,通过将大量 ...
- CSS概念 - 可视化格式模型(一) 盒模型与外边距叠加
可以参考<精通CSS 高级WEB标准解决方案>第三章. 可视化格式模型 可视化格式模型要掌握的3个最重要的CSS概念是 浮动.定位.盒模型. 这些概念控制在页面上安排和显示元素的方式, 形 ...
随机推荐
- system verilog与C语言的接口(包含使用方法以及实例)
资料来源 (1) sv绿皮书; (2) vcs user guide; (3) https://www.cnblogs.com/studyforever/p/5169243.html (4) syst ...
- ubuntu - 程序运行的一些基础知识
1.指定编码格式 -finput-charset=GB2312 指定 C 程序的编码方式为 GB2312,不指定时默认编码方式为 UTF-8 -fexec-charset=GB2312 指定 可执行程 ...
- RSTP-快速生成树协议
1 STP的不足之处STP协议虽然能够解决环路问题,但是由于网络拓扑收敛慢,影响了用户通信质量. 2 RSTP概述RSTP在许多方面对STP进行了优化,它的收敛速度更快,而且能够兼容STP. 通过接口 ...
- 执行celery --version报错
python 3.7.4安装celery后执行celery --version报错 安装命令: pip install celery -i https://pypi.douban.com/simple ...
- 解决每次centos7执行java --version git --version等命令时都要重新source /etc/profile后才能执行,否则找不到命令-转载
linux mint 我们通常将环境变量设置在/etc/profile这个文件中,这个文件是全局的. /etc/profile:在登录时,操作系 统定制用户环境时使用的第一个文件 ,此文件为系统的 ...
- SparkRDD所有算子操作,建议全部手敲一遍
说明: 1.以下方法全部来自这个RDD.scala,可以自己看源码 2.使用$SPARK_HOME/bin/spark-shell运行代码 3.注释部分是运行结果 //org.apache.spark ...
- linux 服务器 重命名
vim /etc/hosts 追加 10.10.134.68 RmcbTestDB3 RmcbTestDB3 # ip 名称 名称 127.0.0.1 localhost ...
- ubuntu16.04下载地址
ubuntu16.04下载地址: 中科大源 http://mirrors.ustc.edu.cn/ubuntu-releases/16.04/ 阿里云开源镜像站 http://mirrors.aliy ...
- HTML学习笔记3----制作一个简易网站
随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...
- centos7 yum安装配置Lnmp和负载配置
首先配置防火墙CentOS 7.0默认使用的是firewall作为防火墙1.关闭firewall: systemctl stop firewalld.service #停止firewallsystem ...