6.7、万维网(如HTTP超文本传输协议)

news2024/11/16 12:45:16

1、基本介绍

万维网 WWW (World Wide Web) 并非某种特殊的计算机网络 \color{red}并非某种特殊的计算机网络 并非某种特殊的计算机网络

  • 它是一个大规模的、联机式的信息储藏所,是运行在因特网上的一个分布式应用。

万维网利用网页之间的 超链接 \color{red}超链接 超链接将不同网站的网页链接成一张逻辑上的信息网。

万维网是欧洲粒子物理实验室的 Tim Berners-Lee 最初于 1989 年 3 月提出的

image-20230110182221193


1993 年 2 月,第一个图形界面的浏览器 Mosaic

1995 年著名的 Netscape Navigator 浏览器上市。

image-20230110182312049

2、目前比较流行的游览器

image-20230110182512024

浏览器最重要的部分是 渲染引擎 \color{red}渲染引擎 渲染引擎,也就是 浏览器内核 \color{red}浏览器内核 浏览器内核。负责对网页内容进行解析和显示。

  • 不同的浏览器内核对网页内容的解析也有不同,因此同一网页在不同内核的浏览器里的显示效果可能不同
  • 网页编写者需要在不同内核的浏览器中测试网页显示效果。

3、万维网应用

在游览器地址栏中输入湖南科技大学的域名,并按下回车键后,游览器将发送请求报文给服务器

服务器收到请求报文后执行相应操作,然后给游览器发回响应报文

  • 游览器解析并渲染响应报文的内容,这样就可以访问到该首页了

image-20230110184325671


4、统一资源定位符 URL

为了方便地访问在世界范围的文档,万维网使用 统一资源定位符 URL \color{red}统一资源定位符\texttt{URL} 统一资源定位符URL 来指明因特网上任何种类 “资源” 的位置。

URL 的一般形式由以下四个部分组成:

image-20230110184502948

image-20230110184519934

5、万维网的文档

image-20230110184716369

image-20230110184746738

HTMLCSSJavaScirpt 编写的万维网文档,由游览器内核负责解析和渲染

image-20230110184953476

但是所呈现出来的内容样式过于简单,或者说不够美观,可以在 CSS 文档中定义一些所需的央视对网页显示内容进行美化

image-20230110185144013

image-20230110185151847


JavaScript demo

image-20230110185254770

click.gif


需要注意的是:这些文档都部署在服务器端

  • 有一些是 Web 前端开发人员设计好的静态页面
  • 有一些是服务器后端程序根据用户需求自动生成的动态页面
  • 它们都需要从服务器传送给用户游览器进行解析和渲染

这就提到 TCP/IP 体系应用层中的一个非常重要的协议

  • 超文本传输协议:HTTP

6、超文本传输协议 HTTP(HyperText Transfer Protocol)

超文本传输协议 HTTP(HyperText Transfer Protocol)

HTTP 定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及万维网服务器怎样把万维网文档传送给浏览器。


6.1、基本过程

image-20230110185954377

游览器进程首先发起与服务器进程的 TCP 连接,使用熟知端口号 80 80 80

基于这条游览器进程向服务器进程发送 HTTP 请求报文

  • 服务器进程收到后,执行相应操作

    然后给游览器进程发回 HTTP 响应报文

image-20230110192847525

6.2、非持续连接方式

HTTP/1.0 采用 非持续连接方式 \color{red}非持续连接方式 非持续连接方式。在该方式下,每次浏览器要请求一个文件都要与服务器建立 TCP 连接,当收到响应后就立即关闭连接。


例如:如下所示,在这个三个报文种的最后一个报文的数据载荷部分,携带有 HTTP 请求报文

服务器收到后,给客户发回 HTTP 响应报文

image-20230110193158580


HTTP/1.0 采用 非持续连接 \color{red}非持续连接 非持续连接方式。在该方式下,每次浏览器要请求一个文件都要与服务器建立TCP连接,当收到响应后就立即关闭连接。

  • 每请求一个文档就要有两倍的 RTT 的开销。若一个网页上有很多引用对象(例如图片等),那么请
    求每一个对象都需要花费 2 RTT 2\texttt{RTT} 2RTT 的时间。

  • 为了减小时延,浏览器通常会建立多个并行的 TCP 连接同时请求多个对象。

    但是,这会大量占用万维网服务器的资源,特别是万维网服务器往往要同时服务于大量客户的请求,这会使其负担很重。

6.3、持续链接方式

HTTP/1.1 采用 持续连接方式 \color{red}持续连接方式 持续连接方式(可以设置为非持续连接的方式)。

  • 在该方式下,万维网服务器在发送响应后仍然保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的HTTP请求报文和响应报文。
  • 这并不局限于传送同一个页面上引用的对象,而是只要这些文档都在同一个服务器上就行。

为了进一步提高效率,HTTP/1.1 的持续连接还可以使用 流水线 \color{red}流水线 流水线方式工作,

  • 即浏览器在收到 HTTP 的响应报文之前就能够连续发送多个请求报文。

  • 这样的一个接一个的请求报文到达服务器后,服务器就发回一个接一个的响应报文。

    这样就节省了很多个 RTT 时间,使 TCP 连接中的空闲时间减少,提高了下载文档的效率。

6.4、HTTP的报文格式

HTTP 的报文格式

  • HTTP 面向文本 \color{red}面向文本 面向文本的,其报文中的每一个 字段 \color{red}字段 字段都是一些 ASCII 码串 \color{red}\texttt{ASCII}码串 ASCII码串

  • 并且每个字段的 长度 \color{red}长度 长度都是 不确定 \color{red}不确定 不确定的。

6.5、HTTP请求报文的格式

image-20230110194022498

例如:image-20230110194036987


HTTP 请求报文支持以下方法

方法描述
GET请求URL标志的文档
HEAD请求URL标志的文档的首部
POST向服务器发送数据
PUT在指明的URL下存储一个文档
DELETE删除URL标志的文档
CONNECT用于代理服务器
OPTIONS请求一些选项信息
TRACE用来进行环回测试
PATCH对PUT方法的补充,用来对已知资源进行局部更新

6.6、HTTP响应报文的格式

image-20230110194455795


状态行中的状态码分为五大类(33种)

状态码(五大类 33 种)描述
1 XX 1\texttt{XX} 1XX表示通知信息,如请求收到了或正在进行处理;
2 XX 2\texttt{XX} 2XX表示成功,如接受或知道了;
3 XX 3\texttt{XX} 3XX表示重定向,即要完成请求还必须采取进一步的行动;
4 XX 4\texttt{XX} 4XX表示客户的差错,如请求中有错误的语法或不能完成;
5 XX 5\texttt{XX} 5XX表示服务器的差错,如服务器失效无法完成请求。

响应报文种常见的状态行

image-20230110194954546

游览器并不会之间显示出服务器发送来的这些状态行信息

  • 而是以更有好的方式向用户告知服务器所返回的状态信息

image-20230110195018428

7、Cookie

使用 Cookie 在服务器上记录用户信息

早期的万维网应用非常简单,仅仅是用户查看存放在不同服务器上的各种静态的文档

  • 因此HTTP被设计为—种 无状态 \color{red}无状态 无状态的协议。这样可以简化服务器的设计。

现在,用户可以通过万维网实现各种复杂的应用,如网上购物、电子商务等。

  • 这些应用往往需要万维网服务器能够识别用户。

image-20230110195424603

如上所示,这样当我们使用该游览器再次访问该网站时,网站可以自动识别出我们,而不用我们再次输入账号信息


Cookie 提供了一种机制使得万维网服务器能够“记住”用户,而无需用户主动提供用户标识信息。

  • 也就是说, Cookie 是一种对无状态的 HTTP 进行状态化的技术 \color{red}\texttt{Cookie}是一种对无状态的\texttt{HTTP}进行状态化的技术 Cookie是一种对无状态的HTTP进行状态化的技术

7.1、Cookie的工作原理

image-20230110195636866

用户主机中的游览器进程首先与万维网服务器中的服务器进程建立 TCP 连接

当用户的游览器进程初次向服务器进程发送 HTTP 请求报文时,

  • 服务器进程就会为其产生一个唯一的 Cookie 识别码,

    并以此为索引在服务器的后端数据中创建一个项目,用来记录该用户访问该网站的各种信息

image-20230110195839543

接着就会给游览器进程发回 HTTP 响应报文

在响应报文种,包含一个首部字段为 Set-Cookie \texttt{Set-Cookie} Set-Cookie 的首部行

  • 该字段的取值就是 Cookie 识别码

image-20230110201150209

当游览器进程收到该响应报文后,就在特定的 Cookie 文件中添加一行,

  • 记录该服务器的域名Cookie 识别码

image-20230110201240606


当用户再次使用该游览器访问这个网站时,每发送一个 HTTP 请求报文,

  • 游览器都会从 Cookie 文件中取出该网站的 Cookie 识别码,并放到 HTTP 请求报文的 Cookie 首部行中

服务器根据 Cookie 识别码就可以识别出该用户

  • 并返回该用户的个性化网页

image-20230110201507870

8、万维网缓存与代理服务器

在万维网中还可以使用缓存机制以提高万维网的效率。

万维网缓存又称为 Web缓存 \color{red}\texttt{Web缓存} Web缓存(Web Cache),可位于客户机,也可位于中间系统上,

  • 位于中间系统上的 Web 缓存又称为 代理服务器 \color{red}代理服务器 代理服务器(Proxy Server)。

Web 缓存把最近的一些请求和响应暂存在本地磁盘中。

  • 当新请求到达时,若发现这个请求与暂时存放的请求相同 , \color{red}当新请求到达时,若发现这个请求与暂时存放的请求相同, 当新请求到达时,若发现这个请求与暂时存放的请求相同,

    就返回暂存的响应,而不需要按 URL 的地址再次去因特网访问该资源 \color{red}就返回暂存的响应,而不需要按\texttt{URL}的地址再次去因特网访问该资源 就返回暂存的响应,而不需要按URL的地址再次去因特网访问该资源


8.1、具体过程

image-20230110201951838

当校园网中的某台主机要访问因特网上的原始服务器时,

  • 它首先会向校园网中的代理服务器发送请求

若代理服务器中存放有所请求的对象,

  • 则代理服务器会向该主机发回包含所请求对象的响应

image-20230110202209140

若代理服务器中没有所请求的对象

  • 则代理服务器会向因特网上的原始服务器发送请求

原始服务器将包含有所请求对象的响应发回给代理服务器

代理服务器将该响应存入 Web 缓存,然后给主机发回该响应

image-20230110202343252


Web 缓存的命中率比较高

  • 将大大减少了路由器 R1R2 之间的链路上的通信量
  • 因而减少了访问因特网的时延

image-20230110202411333


8.2、缓存最终一致性

image-20230110202715809

假设原始服务器中的文档已被更改,之后,校园网中的某台主机要请求该文档

它首先向校园网中的代理服务器发送请求,代理服务器找到该文档后,将其封装在响应报文中发回给主机

这样,主机所请求到的文档与原始服务器中的文档就不一致了

image-20230110202957511


实际上,原始服务器通常会为每个响应的对象设置一个修改时间字段和一个有效日期字段

当校园网中的某台主机要请求原始服务器中的该文档时,

  • 它首先会向校园网中的代理服务器发送请求

若代理服务器中的该文档未过期,则代理服务器其封装在响应报文中发回给该主机

image-20230110203334894

若代理服务器中的该文档已过期,则代理服务器会向因特网上的原始服务器发送请求

  • 在请求报文中包含有一个首部字段为 if-modified-since \texttt{if-modified-since} if-modified-since 的首部行,

    该字段的取值就是该文档的修改日期

原始服务器根据该文档的修改日期就可以判断出代理服务器中存储的该文档是否与自己存储的该文档一致

若一致,则给代理服务器发送不包含实体主体的响应,状态码为 304 Not   Modified 304\quad\texttt{Not Modified} 304Not Modified

  • 代理服务器重新更新该文档的有效日期,然后将该文档封装在响应报文中发回给该主机

image-20230110203913170

若不一致,则给代理服务器发送包含实体主体的响应,这样代理服务器就更新了文档

  • 然后将更新后的该文档封装在响应报文中发回给主机

image-20230110204110073


注意:针对于校园网,最好不要用校园网访问 xxxxx 网站,所以使用校园网的时候小心点

9、习题

image-20230110204321506

image-20230110211921267

答案:C


image-20230110211930792

image-20230110212216925

10、小结

image-20230110212307680

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/160749.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Web进阶:Day5 移动适配、rem、less

Web进阶:Day5 Date: January 10, 2023 Summary: 移动适配、rem、less 移动适配 移动适配指网页元素的宽高都要随着设备宽度等比缩放 rem : 目前多数企业在用的解决方案 vw / vh:未来的解决方案 rem 目标:能够使用rem单位设置网…

2022年跨境物流指数研究报告

第一章 行业概况 指提供跨境物流服务的行业。跨境物流是指在电子商务环境下,依靠互联网、大数据、信息化与计算机等先进技术,物品从跨境电商企业流向跨境消费者的跨越不同国家或地区的物流活动。 图 物流运输行业产业链结构图 资料来源:资产…

Tapdata Cloud 场景通关系列:集成阿里云计算巢,实现一键云上部署真正开箱即用

【前言】作为中国的 “Fivetran/Airbyte”, Tapdata Cloud 自去年发布云版公测以来,吸引了近万名用户的注册使用。应社区用户上生产系统的要求,Tapdata Cloud 3.0 将正式推出商业版服务,提供对生产系统的 SLA 支撑。Tapdata 目前专注在实时数…

VS2010 安装NuGet NPIO 基础连接已经关闭:发送时发生错误

1.下载Nuget并安装 NuGet Package Manager - Visual Studio Marketplace 工具->扩展管理器可看见 2.安装NPOI 3. 如果遇见基础连接已经关闭:发送时发生错误 要把https://packages.nuget.org/改为https://www.nuget.org/api/v2/ VS2019要使用https://www.nuget.org/api/v…

OAuth2.0 详解

OAuth2.0介绍 OAuth(Open Authorization)是一个关于授权(authorization)的开放网络标准,允许用户授权第三方 应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分…

【日常系列】LeetCode《26·动态规划1》

数据规模->时间复杂度 <10^4 &#x1f62e;(n^2) <10^7:o(nlogn) <10^8:o(n) 10^8<:o(logn),o(1) lc 509【剑指 10-1】&#xff1a;斐波那契数列问题 - 动态规划入门 https://leetcode.cn/problems/fibonacci-number/ 提示&#xff1a; 0 < n < 30 #方案…

WebSocket概念及实现简易聊天室

WebSocket实现简易聊天室 1 WebSocket介绍 网络通信协议是HTML5开始提供的一个单个TCP连接上进行全双工通信协议 1.1 诞生原因&#xff08;http无状态、无连接&#xff09; ①HTTP协议&#xff1a; 由于HTTP协议是一种无状态、无连接、单向的应用层协议&#xff0c;通信请求只…

Java反射机制是什么?

Java 反射机制是 Java 语言的一个重要特性。在学习 Java 反射机制前&#xff0c;大家应该先了解两个概念&#xff0c;编译期和运行期。 编译期是指把源码交给编译器编译成计算机可以执行的文件的过程。在 Java 中也就是把 Java 代码编成 class 文件的过程。编译期只是做了一些…

Qt Creator添加自定义向导

文章目录一、前言二、前置说明三、wizard.json解析3.1、宏观结构3.2、微观解释3.2.1、向导信息3.2.2、定义变量3.2.3、页面定义3.2.4、文件生成四、实战一、前言 在Qt Creator中&#xff0c;当我们选择新建时&#xff0c;Qt自带了很多选项&#xff1b; 如果我们在开发过程中&a…

软件测试——使用mujava测试过程中

文章目录下载对应安装包步骤二、修改代码第二部分&#xff0c;修改对应测试文件下载对应安装包 分别下载junit.jar、mujava.jar和openjava.jar三个包&#xff0c;并设定对应系统路径。三个安装包的下载路径以mujava.jar为例子 设置系统环境变量&#xff0c;计算机》属性》高级…

golang实现一个linux命令ls命令(命令行工具构建)

希望2023可以听到这些话&#xff1a; 恭喜你得到了这份工作恭喜你的建议被采用了恭喜你被录取了恭喜你的考试顺利通过了恭喜你上岸了恭喜你升职了恭喜你加薪了恭喜你体检结果一切正常在这篇文章下面许个愿吧&#xff01; ls 命令 要实现ls&#xff0c;首先先我们复习一下ls命令…

FPGA知识汇集-ASIC向FPGA的移植

ASIC原型验证是整个验证环节中非常重要的步骤之一&#xff0c;也是将ASIC的代码移植到FPGA平台上最重要的原因&#xff0c;本文章的意义在于&#xff1a; 对于系统构架师&#xff0c;将帮助他们在选择商用模拟器还是自行设计方案之间做出更好的选择&#xff1b; 对于逻辑工程师…

一文读懂Go Http Server原理

hello大家好呀&#xff0c;我是小楼&#xff0c;这是系列文《Go底层原理剖析》的第二篇&#xff0c;依旧是分析 Http 模块&#xff0c;话不多说&#xff0c;开始。 从一个 Demo 入手 俗话说万事开头难&#xff0c;但用 Go 实现一个 Http Server 真不难&#xff0c;简单到什么程…

2、Eclipse安装与使用

目录 一、简介 二、下载 三、Eclipse安装 &#xff08;1&#xff09;找到Eclipse安装包&#xff0c;右键【以管理员身份运行】 2.因为是写Java程序&#xff0c;所以安装第一个喽 3.安装位置设置&#xff08;不建议C盘安装哦&#xff09;&#xff0c;点击【INSTALL】 3.点…

day02 数组 | 977、有序数组的平方 209、长度最小的子数组 59、螺旋矩阵II

1、题目 977、有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 示例 1&#xff1a; 输入&#xff1a;nums [-4,-1,0,3,10] 输出&#xff1a;[0,1,9,16,100] 解释&#xff1…

github Page博客速度优化+Cloudflare_https两端配置+解决重定向次数过多问题

网站加速调优 自从加了CDN之后我的博客偶尔会报错”重定向次数过多“ 症状&#xff1a; XXX.XXX.XXX 将您重定向的次数过多。 尝试清除 Cookie. ERR_TOO_MANY_REDIRECTS 可能原因 参考阿里云cdn解决方案https://help.aliyun.com/document_detail/451418.html但是cloudflar…

【UCIe】UCIe Stall 介绍

&#x1f525;点击查看精选 UCIe 系列文章&#x1f525; &#x1f525;点击进入【芯片设计验证】社区&#xff0c;查看更多精彩内容&#x1f525; &#x1f4e2; 声明&#xff1a; &#x1f96d; 作者主页&#xff1a;【MangoPapa的CSDN主页】。⚠️ 本文首发于CSDN&#xff0…

【SAP Hana】SAP Hana存储过程开发

SAP Hana存储过程开发Hana 存储过程1、创建&更新语法2、删除语法3、调用语法4、实例演示&#xff08;1&#xff09;存储过程入门&#xff08;2&#xff09;指定 DEFAULT SCHEMA&#xff08;3&#xff09;定义内部变量&#xff0c;执行多个查询&#xff08;4&#xff09;定义…

【Javascript】高阶函数,JSON,forEach,map,filter,reduce等高阶函数,函数绑定

❤️ Author&#xff1a; 老九 ☕️ 个人博客&#xff1a;老九的CSDN博客 &#x1f64f; 个人名言&#xff1a;不可控之事 乐观面对 &#x1f60d; 系列专栏&#xff1a; 文章目录高阶函数箭头函数apply函数JSONfilter函数map函数总结reduce函数find/findIndex函数every/some函…

【Android安全】frida-gum教程

frida-gum教程 frida-gum概述 frida-gum是基于inline-hook实现的 提供的功能&#xff1a;代码跟踪&#xff08;Stalker&#xff09;、内存访问监控&#xff08;MemoryAccessMonitor&#xff09;、符号查找、栈回溯实现、内存扫描、动态代码生成和重定位 inline Hook 原理 .…