Go For Web:踏入Web大门的第一步——Web 的工作方式

news2024/11/24 16:20:31

 Web 的工作方式

  •  了解当你访问一个网页时,背后是如何运作的,发生了一些什么?

    其实当你输入网址(URL)并按下回车之后,你的浏览器相当于扮演了 客户端 的角色,首先你的浏览器会去请求 DNS 服务器进行域名解析,将你输入的 URL 地址 转化为对应的 ip 地址,通过 ip 地址 我们就可以找到对应的服务器位置,从而进行 TCP 连接。

    连接之后,你的浏览器会发送 HTTP 请求 (Request)包,服务区收到请求包之后开始从响应处理请求包,调用自身的服务,并返回 HTTP 响应 (Response)包。

    客户端收到了来自服务端的响应之后开始渲染这个响应包里的主体(body),等收到了全部的内容应答后,就会断开与服务器的 TCP 连接 (这里先讨论一般情况)
    如图👇

    image

而一个 Web 服务器也被称作 HTTP 服务器, 它通过 http 协议与客户端通信。这个客户端通常是指 Web 浏览器

所以 Web 服务器的工作原理可以简单的总结为:

  • 客户端通过 TCP/IP 协议建立与服务器的 TCP 连接
  • 客户端向服务器发送 HTTP 协议请求包,请求服务器里的资源文档
  • 服务器向客户机发送 HTTP 协议应答包, 如果请求的资源包含有其他动态语言的内容,服务器就会调用动态语言的解析引擎负责处理这些动态内容,并将处理得到的数据返回给客户端
  • 客户端与服务端断开连接。客户端开始解释收到的 HTML 文档,在客户端屏幕上渲染图形结果

以上步骤实现了一个 最简单的 HTTP 事务,在上述情况中,客户端与服务端的通信非持久连接,发送接收应答后就断开(这里暂时不讨论 http 1.1 之后的持久连接、后文会有专门说明)

  •  URL 和 DNS 解析

    刚刚我们提到了 URL,它可以用来输入访问网页,那具体 URL 是个什么东西呢?

URL 是 Uniform Resource Locator“统一资源定位符” 的英文缩写
基本格式如下图👇

image

而 DNS 则是 Domain Name System “域名系统” 的英文缩写,它是一种组织成 域层次结构的计算机和网络服务命名系统,它用于 TCP/IP 网络,它从事 将主机名 或者 域名转换为实际 IP 地址的工作。可以把他理解成 URL 的“翻译官”

工作原理如下图👇

image

我们来详细地解释一下 关于 DNS 的工作原理:

  1. 我们以 www.google.com 为例,在浏览器地址栏输入该域名,操作系统会首先检查自己的 hosts 文件中是否存在这个网址的映射关系,如果有,就可以直接调用这个 IP 地址的映射,完成域名解析
  2. 其次如果 hosts 里没有这个域名的映射,则查找本地 DNS 解析器缓存,看里面有没有这个网址的映射关系,如果有也直接调用
  3. 如果 hosts 和 本地 DNS 解析器缓存都没有,就会先去找 TCP/IP 参数中设置的首选 DNS 服务器,我们可以把他叫做 本地 DNS 服务器,此服务器收到查询需求时,如果要查询的域名,包含在本地配置区域的资源中,就将解析结果返回给客户端,完成域名解析,该解析具有权威性
  4. 如果要查询的域名,本地 DNS 服务器配置区域资源没有,但是该服务器却缓存了此网址的映射关系,则也可以调用完成解析,但是该解析不具有权威性
  5. 如果本地 DNS 服务器本地区域资源文件以及缓存都没有该映射,则根据本地 DNS 服务器的设置(是否设置转发器)进行查询,如果未用转发模式, 本地DNS 就把请求发送至 “根 DNS 服务器” “根 DNS 服务器”收到请求后会判断这个域名是谁来授权管理(本例子为.com),并会返回一个负责该顶级域名服务器的一个 IP。本地 DNS 服务器 收到 IP 信息后,将会联系 负责管理 .com 域的这台服务器。这台服务器收到请求后,如果自己无法解析,它就会找管理 .com 域的下一级 DNS 服务器地址(这里是 google.com)并把它的 IP 给本地 DNS 服务器。当本地 DNS 服务器收到这个地址后,就会找 google.com 域服务器,重复上面的操作,进行查询,直到找到(www.goole,com)为止
  6. 如果是转发模式,则此 DNS 服务器就会把请求转发至上一级 DNS 服务器,由上一级服务器进行解析,上一级如果不能解析,就找根服务器,或者转发请求给上上级服务器,如此循环,直到找到(www.goole,com)为止

无论是转发模式还是非转发模式,是转发给上一级还是直接找根 DNS ,最后都是把 结果返回给 本地 DNS 服务器,由此 DNS服务器再返回给 我们的浏览器(客户端)

流程图如下👇

image

基于上面的步骤,浏览器最终通过 DNS 服务器获得的是 IP 地址,所以浏览器(客户端)发起请求的时候是通过 IP 地址 来和 服务器 进行信息通信的

  •  HTTP 协议详解

HTTP 协议当然是 Web 服务器工作的核心,所以我们接下来具体详细地了解清楚一下 HTTP 协议是怎么发挥作用的

  • HTTP 协议 是一种能让 Web 服务器与浏览器(客户端)通过 Internet 进行发送和接受数据 动作 的一个协议,它建立在 TCP 协议之上,一般会采用 TCP 的 80 端口。它是一个标准的 “请求-响应协议” 即 客户端发出请求,服务端收到请求返回响应。

  • 在 HTTP 协议中,客户端总是要通过建立一个连接与发送一个 HTTP 请求来发起一个事务。而服务器不能主动去与客户端联系,也不能给客户端发出一个回调连接,只能被动监听。

  • 客户端与服务端都可以自行提前中断一个连接,例如,当浏览器下载一个文件时,你可以随时通过点击“暂停”按钮来中断文件的下载,关闭与服务器的 HTTP 连接。

  • HTTP 协议是无状态的,同一个客户端的这一次请求与上次请求之间没有对应关系,对 HTTP 服务器来说,它并不知道这两个请求是否来自同一个客户端。当然对于需要解决这个问题的情况我们可以使用 "Cookie"机制来维护连接的可持续状态

  • 正因为 HTTP 协议是建立在 TCP 协议之上的,所以 TCP 攻击一样会影响 HTTP 的通信,例如常见的针对 TCP 的攻击:SYN Flood (比较流行的一种 Dos 拒绝服务攻击 和 Ddos 分布式拒绝服务攻击)就是通过利用 TCP 协议的缺陷,发送了大量的伪造 TCP 连接请求从而使得被攻击的服务器资源耗尽(CPU 满负荷或者内存不足)

接下来我们分别看看 HTTP 协议的 请求包和响应包

 HTTP 请求包 (浏览器/客户端 信息)

我们可以使用 F12 查看一些内容,例如 Request 包的结构:
Request 包分为三部分,第一部分叫 Request line (请求行),第二部分是 Request header (请求头),第三部分是 body(主体),header 和 body 之间会有个空行隔开
请求包的实例图👇

image

HTTP 协议定义了很多与服务器交互的请求方法,最基础的四种是:GET\POST\PUT\DELETE,一个 URL 地址用于描述一个网络上的请求资源,而 HTTP 中的这四个操作就分别对应对这个资源的查改增删4个操作

这四个操作中最熟悉和常用的是 GET 和 POST 。
GET 一般用于获取/查询资源信息
POST 一般用于更新资源信息
GET 与 POST 的区别:

  1. GET 方法提交的数据会放在 URL 后面,使用 ? 分割 URL 和 传输的数据,参数之间以 & 相连
  2. POST 方法则是把提交的数据放在 HTTP 包的 body 中
  3. GET能提交的数据大小会因为浏览器对于 URL 的长度限制而有所限制
  4. POST 方法提交的数据不会有限制
  5. GET 方法提交数据会带来某些安全问题,例如:在用户的登录界面,如果使用 GET 方法提交数据,用户的账号和密码就会出现在 URL 上面,如果页面被缓存或者其他人可以访问机器,就可以额从历史记录中获得该用户的账号和密码!

关于 GET 与 POST 之间更详细的比较可参考我的另一篇 blog👇
GET 和 POST 到底有什么区别?

 HTTP 响应包(服务器信息)

HTTP 的 response 包的结构如下图👇
 

image

image

和上面看到的请求包类似,response 响应包的第一行叫做 ”状态行“,由 HTTP 协议版本号、状态码、状态消息 三部分组成
状态码的作用是告诉 HTTP 客户端(浏览器),HTTP 服务器是否产生了预期的 Response。
在 HTTP 1.1 协议中定义了 5 类 状态码,每个状态码由三位数字组成,首位表示类别:

  • 1xx 提示信息:表示请求被成功接受,继续处理
  • 2xx 成功:表示请求已被成功接受
  • 3xx 重定向:表示要完成这个请求必须进行更进一步的处理
  • 4xx 客户端错误:客户端的语法错误或者请求无法实现
  • 5xx 服务端错误:服务器未能实现合法的请求

常见的状态有:200 :正常信息、302:跳转、404 not found 等等

 Tips: 持续连接 与 非持续连接(协议无状态/keep-alive)

无状态是指协议对于事物处理没有记忆能力,服务器不知道客户端是什么状态,体现在打开一个服务器的网页和你之前打开这个服务器的网页之间没有任何联系

HTTP 协议就是典型的无状态的面向连接的协议,虽然是无状态但是它是面向连接的协议,所以千万不要说 HTTP 使用的是 UDP (面向无连接)的协议了!!!
无状态不代表不能保持TCP连接(只要不断开连接我就不管你什么状态不状态的)
从 HTTP 1.1 开始,默认都开启了 叫做 Keep-Alive 的保持连接的特性,也就是当一个网页打开完成之后,客户端和服务器之间用于传输 HTTP 数据的 TCP 连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的 TCP 连接

当然 Keep-ALive 不会永久保持连接,它会有一个保持时间上限,你可以自行设置

如果你尝试去检查(F12)访问任意一个网址
通过分析整个 URL 请求的通信过程,你会发现:
 

image


在所有的请求中不止一个 URL 请求,还会有很多其他的如静态文件的资源请求
这其实是浏览器自带的功能之一,第一次请求 url ,服务器端返回的是 HTML 页面,然后浏览器会开始渲染这个页面,但是当解析到 HTML DOM里面的图片连接、css脚本和js脚本的连接的时候,浏览器就会自动地发起一个请求静态资源的 HTTP 请求,去获取相应的资源并渲染,最终将所有资源整合完整地展现出来

在网页优化中就会有一项措施,就是利用减少 HTTP 请求次数(把尽量多的css 和 js 资源合并)减少网页请求静态资源的次数,来提高网页的加载速度,减轻服务器的压力

 总结

  • 在这一部分,我们初步认识了 Web 的工作方式,并对一些基础的计算机网络相关知识有了进一步了解,特别是对于 基于 TCP 协议的 HTTP 协议,以及该协议如何在整个 客户端-服务端 中运作。
  • 当我们知道了 Web 就是一个基于 HTTP 协议的的一个服务的时候,我们就可以做好准备,去尝试在 Go 语言中体会如何搭建一个可以运行的 Web 服务了。 

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

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

相关文章

uniapp软键盘谈起遮住输入框和头部被顶起的问题解决

推荐: pages.json中配置如下可解决头部被顶起和表单被遮住的问题。 { "path": "pages/debug/protocol/tagWord", "style": { "app-plus": { "soft…

外呼系统是什么?有什么功能?AI智能系统人工系统

很多企业往往会选择通过使用外呼系统来解决封卡问题。与传统人工拨打相比,外呼系统一方面可以协助销售进行高效外呼,同时还能保障线路稳定不封号,与系统的接入也可以保证客户信息的跟进,助力销售持续性跟进。但是看到这里也不要误…

php通过各种函数判断0和空php实例

php通过各种函数判断0和空php实例 本文给大家介绍php同各种函数判断0和空的方法,在文章给大家补充介绍了php 语法里0不等于null为空的解决办法 补充:下面给大家介绍下php 语法里0不等于null为空的解决办法 今天遇到这样一个问题是这样的: php 语句里,我…

Allure2测试报告详解

目录: allure2安装allure2运行方式allure2报告生成allure2报告中添加用例标题allure2报告中添加用例步骤allure2报告中添加用例链接allure2报告中添加用例分类allure2报告中添加用例描述allure2报告中添加用例优先级allure2报告中添加用例支持tags标签allure2报告中…

冠达管理:A股继续缩量整理 创业板指数走势相对偏强

周三,A股低开后震动调整,三大指数均小幅跌落,创业板指相对偏强。到收盘,上证综指跌0.49%,报3244.49点;深证成指跌0.53%,报11039.45点;创业板指跌0.01%,报2228.73点。 资金…

用于3D MRI和CT扫描的深度学习模型总结

医学成像数据与其他我们日常图像的最大区别之一是它们很多都是3D的,比如在处理DICOM系列数据时尤其如此。DICOM图像由很多的2D切片组成了一个扫描或身体的特定部分。 那么如何为这类数据构建深度学习解决方案呢?本文中将介绍6种神经网络架构,可以使用它…

Window版 Redis6.0.6安装

一、准备工作 下载Redis6.0.6版本(redis官网地址:http://www.redis.cn/download.html) 下载MSYS2(清华的源:https://mirrors.tuna.tsinghua.edu.cn/msys2/distrib/x86_64/) 安装板exe结尾的文件&#xf…

chapter14:springboot与安全

Spring Boot与安全视频 Spring Security, shiro等安全框架。主要功能是”认证“和”授权“,或者说是访问控制。 认证(Authentication)是建立在一个声明主体的过程(一个主体一般指用户,设备或一些可以在你的应用程序中…

【ARM64 ATF 系列 3 -- ARM64 warm reset 与 cold reset】

文章目录 ARM64 Reset1.1.1 reset 运行级别1.1.2 warm reset 寄存器1.1.3 PSCI Suspend/Resume ARM64 Reset ARMv8-A支持两种复位,冷复位和热复位。两者主要区别是冷复位会将debug 功能模块也一同复位,热复位在默认情况则不会复位 debug 功 能模块。 处理…

手机便签中可以打勾的圆圈或小方块怎么弄?

在日常的生活和工作中,很多网友除了使用手机便签来记录灵感想法、读书笔记、各种琐事、工作事项外,还会用它来记录一些清单,例如待办事项清单、读书清单、购物清单、旅行必备物品清单等。 在按照记录的清单内容来执行的时候,为了…

创建好的VMware虚拟机如何连接上外网?MobaX和XShell如何连接虚拟机

配置虚拟机网卡 首先点击VMware菜单栏,编辑-虚拟网络编辑器-更改设置 选择VMnet8-NAT设置,并记住子网IP之后有用 记住网关IP 修改实际创建的虚拟机网卡 修改设置,vi /etc/sysconfig/network-scripts/ifcfg-ens32 修改前: 修…

预测地震引发的洪水

当断层陡坡像水坝一样发挥作用时,地表破裂地震可能会突然改变河流的路线。研究人员现已成功模拟发生在新西兰的此类事件。 当断层位移突然改变地貌时,地表破裂地震可能会改变河流的路线,例如新西兰的怀奥托阿/克拉伦斯河,如图所示…

SpringBoot 的自动装配特性

1. Spring Boot 的自动装配特性 Spring Boot 的自动装配(Auto-Configuration)是一种特性,它允许您在应用程序中使用默认配置来自动配置 Spring Framework 的各种功能和组件,从而减少了繁琐的配置工作。通过自动装配,您…

算法40:移动零

一、需求 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0]示例 2: 输入: nums …

opencv 基础54-利用形状场景算法比较轮廓-cv2.createShapeContextDistanceExtractor()

注意:新版本的opencv 4 已经没有这个函数 cv2.createShapeContextDistanceExtractor() 形状场景算法是一种用于比较轮廓或形状的方法。这种算法通常用于计算两个形状之间的相似性或差异性,以及找到最佳的匹配方式。 下面是一种基本的比较轮廓的流程&…

B2B2C多商户电子商务网站开发--海外商城系统搭建

一、明确目标与需求 在开始搭建海外商城系统之前,企业需要明确自己的目标和需求。例如,要面向哪些国家和地区、主要销售哪些产品、需要提供哪些语言和货币支持等。这些目标和需求将有助于企业制定合理的开发计划和方案。 二、选择合适的开发平台和工具…

【安装部署】Mysql下载及其安装的详细步骤

1.下载压缩包 官网地址:www.mysql.com 2.环境配置 1.先解压压缩包 2.配置环境变量 添加环境变量:我的电脑--->属性-->高级-->环境变量-->系统变量-->path 3.在mysql安装目录下新建my.ini文件并,编辑my.ini文件 编辑内容如…

Linux常规操作命令

日升时奋斗,日落时自省 目录 1、vim 1.1、工作模式 1.2、末行模式操作相关命令 1.2.1、保存退出操作 1.2.2、查找替换 1.3、输入模式操作相关命令 1.3.1、移动相关命令 1.3.2、删除和剪切命令 1.3.3、复制操作 1.3.4、撤销 2、head 3、tail 4、ps 5、…

HTTP代理与HTTPS代理请求的方式揭秘

今天,我们要一起来揭秘HTTP代理与HTTPS代理请求的方式,帮助大家更好地理解和使用这两种代理。我们将分析它们的不同之处,并提供一些实际的例子和操作经验,让你轻松玩转网络请求! HTTP代理请求方式: HTTP代…

IBM Spectrum LSF 分布式系统(作业调度系统),提高高性能计算(HPC)的价值

IBM Spectrum LSF Suites 凭借更快的处理和更轻松的处理,提高高性能计算的价值 要点 通过隐藏工作负载密集型计算环境的复杂性,提高用户生产效率简化计算集群管理并划分工作负载优先级,以快速满足竞争激烈的行业瞬息万变的需求通过优化系统…