Windows环境下浏览器里的HTTP——说说你是怎么访问Web网页的

2023-11-04

我是荔园微风,作为一名在IT界整整25年的老兵,年轻的时候我经常把HTTP和访问网页看Web页划等号,这种错误观念曾导致我对HTTP的理解一直浮于表面。今天我就把我的经验在这里写一写。

HTTP是工作在客户/服务器模式下的基于TCP的协议。HTTP使用TCP而不是UDP的原因在于,打开一个网页必须传送很多数据,而TCP协议提供传输控制,可以按顺序组织数据,并且期间可以对错序数据进行纠正。客户端一般是终端用户,服务器端一般是网站服务器。

客户端通过使用Web浏览器或其他工具,发起一个到服务器上指定端口(默认为80)的HTTP请求。一旦收到请示,服务器向客户端发回响应消息,消息的内容可能是以下三种:

1.请示的文件

2.错误消息

3.其他信息

客户端请示和连接端口需要大于1024。

当你在浏览器上单击 http://www.csdn.net/blog/index.html这条URL会发生什么事情呢,我们来看一下:

1.发生地点:客户端浏览器

发生动作:用户单击URL

2.发生地点:客户端浏览器——>域名服务器

发生动作:请示解析www.csdn.net的IP地址

3.发生地点:域名服务器——>客户端浏览器

发生动作:返回www.csdn.net的IP地址

4.发生地点:客户端浏览器<——>www.csdn.net服务器(注意箭头,是双向的)

发生动作:建立TCP连接,服务器端口80

5.发生地点:客户端浏览器——>www.csdn.net服务器

发生动作:请求报文GET /blog/index.html

6.发生地点:www.csdn.net服务器——>客户端浏览器

发生动作:响应并传输HTML文件

7.发生地点:客户端浏览器<——>www.csdn.net服务器(注意箭头,是双向的)

发生动作:释放TCP连接

Web服务器往往访问压力比较大,为了提高效率,HTTP1.1规定浏览器与服务器的连接时间很短,浏览器的每次请求都需要与服务器建立新的TCP的连接,服务器处理完请求之后立即断开TCP连接,服务器不记录过去的请求。

按这种行为方式,访问具有多个文档、图像或图片的网页时,需要建立多个独立连接进行请求与响应,每个连接只传输一个文档、图像或图片。客户端和服务器端需要频繁的建立和关闭连接,会严重影响双方的性能。网页中如果包含Applet、JavaScript、CSS时,也会出现性能下降。

为了解决这个问题,HTTP1.1后来开始支持持久连接。这样通过一个TCP连接,就能传送多个HTTP请求和响应,大大减少建立和关闭连接造成的消耗和延迟。这样访问一个多图片的网页文件,可以在同一连接中传输多个请求与应答。当然,多文件请求与应答,还是需要分别进行连接。

HTTP1.1允许客户端可以不用等待上一次请求返回的结果,就可以进行下一次请求,但是服务器端必须按照接收到请求的先后顺序依次返回结果,以确保客户端能分清每次请求的响应内容。

后来HTTP出现了更多的协议,大家可以直接搜索相关信息。

各位小伙伴,这次我们就说到这里,下次我们再深入研究Windows这个强大的系统,相信你一定能喜欢上Windows。如果要转载我的文章请说明出处哦。

作者简介:荔园微风,1981年生,高级工程师,浙大工学硕士,软件工程项目主管,做过程序员、软件设计师、系统架构师,早期的Windows程序员,Visual Studio忠实用户,C/C++使用者,是一位在计算机界学习、拼搏、奋斗了25年的老将,经历了UNIX时代、桌面WIN32时代、Web应用时代、云计算时代、手机安卓时代、大数据时代、ICT时代、AI深度学习时代、智能机器时代,我不知道未来还会有什么时代,只记得这一路走来,充满着艰辛与收获,愿同大家一起走下去,充满希望的走下去。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows环境下浏览器里的HTTP——说说你是怎么访问Web网页的 的相关文章

  • 更新面板工作速度非常慢

    我正在编写一个用户可以注册的应用程序 注册时 可以选择多个选项 并根据这些注册字段可见或不可见以及是否必需 我想出了一个想法 所有字段都将位于 updatePanel 中 当用户更改注册选项时 我将在服务器端设置这些字段的可见性 它可以工作
  • 为什么这个 Web api 控制器不并发?

    我有一个 Web API 控制器 里面有以下方法 public string Tester Thread Sleep 2000 return OK 当我调用它 10 次 使用 Fiddler 时 我预计所有 10 次调用都会在大约 2 秒后
  • 如何在 VC++ CString 中验证有效的整数和浮点数

    有人可以告诉我一种有效的方法来验证 CString 对象中存在的数字是有效整数还是浮点数吗 Use tcstol http msdn microsoft com en us library w4z2wdyc aspx and tcstod
  • Grpc - 将消息从一个客户端发送到连接到同一服务器的另一个客户端

    是否可以将消息从一个客户端发送到连接到同一服务器的另一个客户端 我想将数据从一个客户端发送到服务器然后发送到特定客户端 我想我需要获取客户端 ID 但我不知道如何获取此 ID 以及如何从服务器将此消息发送到该客户端 我这里有一个样本 这是一
  • 将类对象放置在向量中?

    我注意到我可以将一个类放置在一个向量中 这是我的程序 我收到以下错误 out blackjack exe blackjack obj blackjack obj error LNK2019 unresolved external symbo
  • 前向声明类型和“已声明为类类型的非类类型”

    我对以下代码有问题 template
  • java中如何重新初始化int数组

    class PassingRefByVal static void Change int pArray pArray 0 888 This change affects the original element pArray new int
  • 无法注册时间触发的后台任务

    对于 Windows 8 应用程序 在 C Xaml 中 我尝试注册后台任务 很难说 但我想我的后台任务已正确注册 但是当我单击调试位置工具栏上的后台任务名称时 我的应用程序停止工作 没有任何消息 我查看了事件查看器上的日志 得到 具有入口
  • 在 C# 中,如何根据在 gridview 行中单击的按钮引用特定产品记录

    我有一个显示产品网格视图的页面 该表内有一列 其中有一个名为 详细信息 的超链接 我想这样做 以便如果用户单击该特定产品的详细信息单元格 将打开一个新页面 提供有关该产品的更多信息 我不确定如何确定哪个Product记录链接的详细信息以及我
  • 如何使用 Regex.Replace 从字符串中删除数字?

    我需要使用Regex Replace从字符串中删除所有数字和符号 输入示例 123 abcd33输出示例 abcd 请尝试以下操作 var output Regex Replace input d string Empty The d标识符
  • 什么是空终止字符串?

    它与什么不同标准 字符串 http www cplusplus com reference string string 字符串 实际上只是一个数组chars 空终止字符串是指其中包含空字符的字符串 0 标记字符串的结尾 不一定是数组的结尾
  • 如何使用 ASP.NET Core 获取其他用户的声明

    我仍在学习 ASP NET Core 的身份 我正在进行基于声明的令牌授权 大多数示例都是关于 当前 登录用户的 就我而言 我的 RPC 服务正在接收身份数据库中某个用户的用户名和密码 我需要 验证是否存在具有此类凭据的用户 获取该用户的所
  • C++中判断unicode字符是全角还是半角

    我正在编写一个终端 控制台 应用程序 该应用程序应该包装任意 unicode 文本 终端通常使用等宽 固定宽度 字体 因此要换行文本 只需计算字符数并观察单词是否适合一行并采取相应的操作 问题是 Unicode 表中的全角字符在终端中占用了
  • 从网页运行 ClickOnce 应用程序,无需用户操作

    我们有一个基于 Java 的 Web 应用程序以及用 C 编写的相同应用程序 如果 java 检查器发现客户端计算机上没有安装 Java 则应该运行该应用程序 这个想法是运行 C 单击一次 http en wikipedia org wik
  • 已发布的 .Net Core 应用程序警告安装 .Net Core,但它已安装

    我制作了一个 WPF 和控制台应用程序 供某人在我无法访问的私人服务器上使用 我使用 Visual Studio 2019 的内置 发布向导 来创建依赖于框架的单文件应用程序 当该人打开 WPF 应用程序时 他们会看到标准警告 他们单击 是
  • 如何递归取消引用指针(C++03)?

    我正在尝试在 C 中递归地取消引用指针 如果传递一个对象 那就是not一个指针 这包括智能指针 我只想返回对象本身 如果可能的话通过引用返回 我有这个代码 template
  • 在 C# 中为父窗体中的子窗体控件添加事件处理程序

    我有两种形式 一种是带有按钮和文本框的父表单 单击该按钮时 将打开一个对话框 该子窗体又包含一个文本框和一个按钮 现在我想要的是 每当子表单文本框中的文本更改时 父表单文本框中的文本会自动更改 为了获得这个 我所做的是 Form3 f3 n
  • C++ - 多维数组

    处理多维数组时 是否可以为数组分配两种不同的变量类型 例如你有数组int example i j 有可能吗i and j是两种完全不同的变量类型 例如 int 和 string 听起来您正在寻找 std vector
  • 我可以使用 lambda 函数或 std::function 对象来代替函数指针吗?

    我有一个需要使用的库 它定义了以下内容 typedef void CallbackFunction const int i 并且有一个注册回调的函数 如下所示 void registerCallback CallbackFunction p
  • MySqlConnectionStringBuilder - 使用证书连接

    我正在尝试连接到 Google Cloud Sql 这是一个 MySql 解决方案 我能够使用 MySql Workbench 进行连接 我如何使用 C 连接MySqlConnectionStringBuilder 我找不到提供这三个证书的

随机推荐