【计算机网络笔记】Web应用之HTTP协议(涉及HTTP连接类型和HTTP消息格式)

系列文章目录

什么是计算机网络?
什么是网络协议?
计算机网络的结构
数据交换之电路交换
数据交换之报文交换和分组交换
分组交换 vs 电路交换
计算机网络性能(1)------速率、带宽、延迟
计算机网络性能(2)------时延带宽积、丢包率、吞吐量/率
计算机网络体系结构概念
OSI参考模型基本概念
OSI参考模型中非端-端层(物理层、数据链路层、网络层)功能介绍
OSI参考模型中端-端层(传输层、会话层、表示层、应用层)功能介绍
TCP/IP参考模型基本概念,包括五层参考模型
网络应用的体系结构
网络应用进程通信
网络应用对传输服务的需求



什么是Web

Web:World Wide Web(即我们常见的www),也叫万维网。由Tim Berners-Lee这位伟大的科学家发明。

Web最基本的构成要素是网页,网页之间互相链接就形成了庞大的信息网络、服务网络等等。

网页(Web Page)包含多个对象(objects)。

  • 对象:HTML文件、JPEG图片、视频文件、动态脚本等
  • 每个网页包含基本HTML文件,这个文件又包含对其他对象引用的链接。

互联网上有那么多的网页,那就又遇到了寻址的问题。这里就是web对象的寻址 。用URL (Uniform Resoure Locator)统一资源定位器标识web对象(在RFC1738中有详细描述)。基本格式为:Scheme://host:port/path。如下所示,这里省略了协议名称,默认是http协议。


HTTP协议概述

Web应用遵循的协议就是HTTP协议(HyperText Transfer Protocol)。

  • 即超文本传输协议。
  • 这个协议采用C/S 结构。
    • 客户---Browser:请求、接收、展示Web 对象
    • 服务器---Web Server:响应客户的请求 ,发送对象。Apache web server是现在是一个标准。

HTTP应用层协议使用的传输层协议就是TCP协议

  • 服务器在80端口等待客户的请求
  • 浏览器发起到服务器的TCP连接(创建套接字Socket)
  • 服务器接受来自浏览器的TCP连接
  • 浏览器(HTTP客户端)与Web服务器(HTTP服务器)交换HTTP消息
  • 关闭TCP连接

HTTP应用协议是一个无状态(stateless)协议。通俗地讲就是服务器不维护任何有关客户端过去所发请求的信息。比如两分钟之前请求了百度的页面,两分钟后再次请求,服务器端对这两次请求是不区分的。服务器就是无记忆的。

一般来说,大家更喜欢使用无状态的协议,因为有状态的协议往往更复杂。因为需要维护状态(历史信息),此外,如果客户或服务器失效,会产生状态的不一致,解决这种不一 致代价高。


HTTP连接

我们已经知道,web应用所遵循的应用层协议是HTTP协议,HTTP底下依靠的是TCP传输层协议建立连接。

那在对TCP的使用上是有两种不同的方法的,我们称为HTTP连接的两种类型


非持久性连接(Nonpersistent HTTP)

  • 每个TCP连接最多允许传输一个 对象
  • HTTP 1.0版本使用非持久性连接

大致工作过程:

大家可能遇到过这种情况:网速较慢的情况下,我们打开一个网页,文字都出来了,但是那些图片一张一张地慢慢才出来,这从一定程度上反映了上面的工作过程。

我们怎么来计算这个过程的时间?下面进行响应时间分析与建模

  • RTT(Round Trip Time):从客户端发送一个很小的数据包到服务器 并返回所经历的时间。

  • 响应时间(Response time):

    • 发起、建立TCP连接:1个RTT
    • 发送HTTP请求消息到HTTP响应消息的前几个字节到达:1个RTT
    • 响应消息中所含的文件/对象传输时间...
  • Total=2RTT +文件发送时间

非持久性连接的问题:

  • 每个对象需要2个RTT以上的时间才能获得。
  • 操作系统需要为每个TCP连接开销资源(overhead)。
  • 浏览器打开多个并行的TCP连接以获取网页所需对象,这个时候给服务器端带来很大的负担。

持久性连接(Persistent HTTP)

  • 每个TCP连接允许传输多个对象
  • HTTP 1.1版本默认使用持久性连接

建立TCP资源是有代价的,也就是说TCP连接资源是宝贵的。那我们就尽可能多利用这次连接。

对比非持久性连接,持久性连接:发送响应后,服务器保持TCP连接的打开,后续的HTTP消息可以通过这个连接发送。

细分的话就有两种类型:

  • 无流水(pipelining)的持久性连接:

    • 客户端只有收到前一个响应后才发送新的请求。
    • 每个被引用的对象耗时1个RTT(对比2RTT,减少了建立连接的一个RTT时间开销)。
  • 带有流水机制的持久性连接:

    • HTTP 1.1的默认选项。
    • 客户端只要遇到一个引用对象就尽快发出请求。就不用等前面那个响应来。
    • 理想情况下,收到所有的引用对象只需耗时约1个RTT。

HTTP消息格式

HTTP协议有两类消息:

  • 请求消息(request)
  • 响应消息(response)

HTTP请求消息

请求消息是用ASCII码写的,所以只要有计算机基础的人就可以读懂。

  • 第一行是请求行。包括请求命令(GET、POST...)、URL、http版本

  • 接着几行是头部行。包括主机名称Host、浏览器类型和版本、连接状态、接受的语言。

  • 接着是一个空行

  • 空行下面是消息体

什么时候请求会有消息体呢?想想我们平时登录一个网站,是不是要填写一些基本信息和密码,浏览器就会把这些数据传给服务器。那把这些用户输入信息传给服务器有哪些方法?

主要有下面这些方法:

  • POST方法 。使用POST方法,可以把网页中的表格里的数据放到请求消息的消息体里传给服务器,服务器再从消息体里提出这些数据。

  • GET方法 。也叫URL方法 。输入的信息比较少的话,可以把输入信息通过请求行的URL字段 上传。这样URL就会有变。比如:


HTTP响应消息

HTTP响应消息同样是由ASCII码写的,所以我们也是可以直接读的。

  • 第一行是状态行。包括http版本和状态码以及状态码的解释。
  • 接着几行是头部行。包含的内容和请求消息的头部行差不多。注意Date字段是Web服务器生成这个响应消息的时间;Server是服务器端所使用的软件。
  • 接着是一个空行
  • 接着是响应的HTML文件数据。

HTTP方法的类型

  • HTTP/1.0:

    • GET
    • POST
    • HEAD。要求服务器(server)不要将所请求的对象放入响应消息中。这个往往是做测试用。
  • HTTP/1.1:

    • GET、
    • PUT。将消息体中的文件上传到URL字段所指定的路径。
    • DELETE 。 删除URL字段所指定的文件
相关推荐
聪明的笨猪猪1 小时前
Java Spring “IOC + DI”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
im_AMBER2 小时前
Web 开发 24
前端·笔记·git·学习
烧冻鸡翅QAQ3 小时前
考研408笔记
笔记·考研
StarPrayers.3 小时前
卷积层(Convolutional Layer)学习笔记
人工智能·笔记·深度学习·学习·机器学习
能不能别报错3 小时前
K8s学习笔记(十五) pause容器与init容器
笔记·学习·kubernetes
无言以对,沉默不语,随你随你。4 小时前
【解决办法】GitBash不能在任意文件夹打开
经验分享·笔记·git
牛马大师兄4 小时前
STM32独立看门狗IWDG与窗口看门狗WWDG知识梳理笔记
笔记·stm32·单片机·嵌入式硬件·嵌入式·看门狗
wan5555cn5 小时前
Windows 11系统鼠标键盘被禁用问题的全面解决方案
windows·笔记·深度学习·计算机外设
zhangrelay5 小时前
ROS云课三分钟-使用动态参数重配置调试Teb导航案例-251008
笔记·学习
BingeBlog5 小时前
[01] Qt的UI框架选择和对比
开发语言·c++·笔记·qt·ui·开源软件