【计算机网络笔记】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字段所指定的文件
相关推荐
霍格沃兹测试开发学社测试人社区15 分钟前
软件测试学习笔记丨Flask操作数据库-数据库和表的管理
软件测试·笔记·测试开发·学习·flask
幸运超级加倍~35 分钟前
软件设计师-上午题-16 算法(4-5分)
笔记·算法
王俊山IT1 小时前
C++学习笔记----10、模块、头文件及各种主题(一)---- 模块(5)
开发语言·c++·笔记·学习
Yawesh_best2 小时前
思源笔记轻松连接本地Ollama大语言模型,开启AI写作新体验!
笔记·语言模型·ai写作
follycat2 小时前
[极客大挑战 2019]HTTP 1
网络·网络协议·http·网络安全
earthzhang20213 小时前
《深入浅出HTTPS》读书笔记(5):随机数
网络协议·http·https
xiaoxiongip6663 小时前
HTTP 和 HTTPS
网络·爬虫·网络协议·tcp/ip·http·https·ip
CXDNW3 小时前
【网络面试篇】HTTP(2)(笔记)——http、https、http1.1、http2.0
网络·笔记·http·面试·https·http2.0
使者大牙3 小时前
【大语言模型学习笔记】第一篇:LLM大规模语言模型介绍
笔记·学习·语言模型
ssf-yasuo4 小时前
SPIRE: Semantic Prompt-Driven Image Restoration 论文阅读笔记
论文阅读·笔记·prompt