当你在浏览器地址栏输入一个URL后,将会发生的事情?个人笔记

客户端

在浏览器输入 URL 回车之后发生了什么(超详细版) - 知乎 (zhihu.com)

大致流程是:

  1. URL 解析
  2. DNS 查询
  3. TCP 连接
  4. 处理请求
  5. 接受响应
  6. 渲染页面

1.URL解析

地址解析:

首先判断你输入是否是一个合法的URL还是一个待搜索的关键词,并且根据你输入的内容进行自动完成、字符编码等操作

HSTS

由于安全隐患,会使用 HSTS 强制客户端使用 HTTPS 访问页面。

其他操作

浏览器还会进行一些额外的操作,比如安全检查、访问限制(之前国产浏览器限制 996.icu)。

缓存检查:

200(成功)服务器已成功处理了请求。通常,这表示服务器提供了请求的网页。

304(未修改)自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。

DNS查询

进行将域名现在本地的 hosts 文件里,没有则启动DNS解析器向注册的 DNS 服务器发送查询请求,当然在路由的路上部分路由器也有缓存域名与ip的映射关系,如果在路由中存在就直接在路由器返回ip,如果没有则到子域名服务器查询需要的ip,当然不仅可以访问同域的服务器,也可以访问其他域的服务器。如果在这里也没有找到ip则去根域名服务器查询拥有对应ip地址的域名服务器,根域名服务器会整颗域树进行遍历,直到找到对应的域名服务器,然后根据其域名服务器提供给,其主机的同域的域名服务器,然后由其同域域名服务器返回ip。

当然如果你乱输url地址,当然找不到其ip,返回404给你玩。

在得到映射的ip后,在每一层都会备份缓存一份映射关系,这样不用每一次发包前都DNS查询一次。

HTTPS协议

在对其url解析后,创建HTTP/HTTPS报文,在数据前添加对应的报头。

HTTP/HTTPS的请求报文和协议报文的报头格式是不同的

https是在http上做到安全处理,加入了密钥措施,保护了数据的安全性。

弃用http改用https的缘故,与密钥的使用,证书意义-CSDN博客

TCP链接

在外面访问某个网页前,会先发起TCP三次握手的链接。

链接建立成功后才会开始tcp报文交流,详细链接文章参考博客链接中的3次握手细节UDP与TCP报头介绍,三次握手与四次挥手详谈_云的小站的博客-CSDN博客

TCP协议采用了:超时重传,滑动窗口,流量控制,快重传,延迟应答,捎带应答,拥塞控制等等操作方法,保证了传输的可靠性与效率。

滑动窗口的理念-CSDN博客

拥塞控制概念_云的小站的博客-CSDN博客

网络层ip的发送处理

拿到了传输层给的报文外面需要对齐做封装处理,添加ip的报文数据。

ip报头和ip报文切片组装问题-CSDN博客

尽量不对一个tcp报文去做切片处理,一旦切片不仅仅是增加了分片的时间,并且一旦众分片中的

其中一个丢失就需要整体重新传达,这是得不偿失的。

当然切不切片并不是网络层决定而是传输层和以太网中允许最大决定的。

如果tcp传入到网络层中的数据包加上ip报头超过一定大小就必须切片才能在网络中发送。

数据链路层 

TCP/IP 分为四层,在发送数据时,每层都要对数据进行封装:

数据链路层中存在的报文ip,arp,rarp-CSDN博客

数据在这一层完成最后的包装,然后发送到网络中。

对了这ARP中的目的ip并不是最终目的ip而是下一跳路由结点的ip地址,依靠此ip找对应路由的mac

数据包在路由传输过程

在网络通信的过程中,必须知道对方ip地址才可以进行通信(不同局域网的主机通信必须采用静态路由技术)。

在一个私网局域网中,向外通信是需要采用NAP/NATP技术相辅相成完成的

ip划分与私公网ip、ip的传递-CSDN博客

依托子网掩码在路由表选择发送网口,根据arp得到mac做下一跳路由,依托NAT替换原ip地址,并且记录NAT表中,这个表的映射记录也是动态的,在tcp报文链接时在三次握手阶段,第一次的FIN经过此路由器时候就会构建完毕,在四次挥手的过程中,TIME_WAIT状态发送ACK报文发送给路由器的时,将映射关系设置为失效。诚然如果希望路由器允许这样工作,那么路由器是拥有应用层功能的。(UDP不连接,导致何时销毁映射关系比较困难)

在传输的路上可能会出现回环情况,这个不用怕,在ip层拥有8位生存时间,这是一个计数器,每次跳转一个结点就会自减,到0意味着报文失效被接收的路由器销毁报文。

在这个过程中存在代理服务器,代理服务器可以将其看成高级路由器,替我们转发报文到公网中。

运营商其实就是依托其,为我们提高我们服务。

代理服务器

正向代理

校园网就是最好的正向代理服务器代表,链接校园网的设备,向外界访问资源的时候,所有的请求都会经过该服务器,我们可以将其看成一个巨大的路由器,但是服务器允许缓存资源预设在代理服务器中,打个比方,2个主机同时访问抖音服务器,A主机先B主机后,A、B主机访问的资源相同,服务器在访问数据后会预留一段时间,当B再来访问时候,直接从代理服务器中获取资源,不用再去抖音服务器访问,大大的提高了我们的网络读写效率,并且正向代理服务器会检查访问的合法性,访问的内存合法性。

反向代理

依旧和路由器很像

反向代理正好与正向代理相反,对于客户端而言代理服务器就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理服务器中的内容发送普通请求,接着反向代理将判断向何处转交请求,并将获得的内容返回给客户端。反向代理对外的表现都是透明的,客户不知道自己访问的是代理服务器,客户端也不需要任何配置就可以访问。当我们配置好代理服务器后,反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

正向代理和反向代理区别

正向代理中 ,代理服务器和client同属一个网络,对server透明。正向代理需要配置在客户端;
反向代理中,代理服务器和server同属一个网络,对client透明。 反向代理需要配置在服务端;
实际上代理服务器在两种代理中做的事都是代为请求和响应,不过从结构上看正好左右相反,故称为正反向代理。

服务器响应

服务器必须拥有和其客户端一样的各层协议,才能相互通信。

必须拥有相同的各层协议,否则接收方无法解开接到的数据报文,无法向上交付。

在服务器得到申请后在自己的库中查找是否存在该资源,申请对象权限是否满足,资源的位置是否改变,然后构建HTTP报文向下交付然后响应给对方。

HTTP存在响应码,这是约定的一个响应码,标识着这次响应的状态信息。

【精选】HTTP 响应码大全_http响应码_JFS_Study的博客-CSDN博客

这篇博客详细介绍了响应码的介绍。

后续的返回过程,与发送过程几乎一样。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++】set和multiset

文章目录 关联式容器键值对一、set介绍二、set的使用multiset 关联式容器 STL中的部分容器,比如:vector、list、deque、forward_list(C11)等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元…

从内存管理的角度来看,Python语言的变量和参数传递情况解析

从内存管理的角度来看,Python语言的变量和参数传递情况解析 概述 从内存管理的角度来看,Python中的变量和参数传递有一些特点: ☆ 变量是对象的引用:在Python中,变量实际上是对象的引用,而不是对象本身。…

vi vim 末尾编辑按GA 在最后一行下方新增一行编辑按Go

vim 快速跳到文件末尾 在最后一行下方新增一行 移到末尾,并且进入文本录入模式 GA (大写G大写A) 在一般模式(刚进入的模式,esc模式) GA 或 Shift ga 先 G 或 shiftg 到最后一行 然后 A 或 shifta 到本行末尾 并且进入文本录入模式 在最后一行下方新增一行 (光标换行,文字不…

【Linux】Nginx安装使用负载均衡及动静分离(前后端项目部署),前端项目打包

一、Nginx导言 1、引言 Nginx 是一款高性能的 Web 服务器和反向代理服务器,也可以充当负载均衡器、HTTP 缓存和安全防护设备。它的特点是内存占用小、稳定性高、并发性强、易于扩展,因此在互联网领域得到了广泛的使用。 总结出以下三点: 负载均衡&#x…

lvsDR模式

LVS-DR模式 是最常用的LVS负载方式 直接路由模式 Lvs调度器 只负责请求和转发 转发到真实服务器 但是响应结果 由后端服务器直接转发给客户端 不需要经过调度器处理 可以减轻Lvs调度器的负担 提高系统性能和稳定性 工作原理: 客户端发送请求到vipLVS调度器接受请求…

miniconda快速安装

目录 一、Linux下miniconda安装 1.1、安装 1.2、miniconda初始化 二、Windows下miniconda安装 三、maOS下miniconda安装 3.1、安装 3.2、miniconda初始化 四、参考: 本文给出windows、macos、linux下快速安装miniconda方法。 对比conda,minicond…

光学仿真|优化汽车内部照明体验

当我们谈论优化人类感知的内部照明时,我们实际上指的是两个重点领域:安全性和驾驶员体验。如果内部照明可以提供尽可能最佳的体验,驾驶员则能够更好地应对颇具挑战性或意外的驾驶状况,并且减轻疲劳感。除了功能优势外,…

【Servlet】 一

本文主要介绍了如何在tomcat部署一个webapp 以及 如何借助maven用servlet编写一个hello world . 一.Tomcat Tomcat是一个Java里广泛使用的http服务器 HTTP服务器有很多实现,其中最知名的是Nginx;而在Java里,最知名的是Tomcat 一个Tomcat服务…

【K8S】二进制安装

常见的K8S安装部署方式 ●Minikube Minikube是一个工具,可以在本地快速运行一个单节点微型K8S,仅用于学习、预览K8S的一些特性使用。 部署地址:https://kubernetes.io/docs/setup/minikube ●Kubeadm☆ Kubeadm也是一个工具,提…

LInux之在同一Tomcat下使用不同的端口号访问不同的项目

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的博客专栏《LInux实战开发》。🎯🎯 …

Vue入门——核心知识点

简介 Vue是一套用于构建用户界面的渐进式JS框架。 构建用户界面:就是将后端返回来的数据以不同的形式(例如:列表、按钮等)显示在界面上。渐进式:就是可以按需加载各种库。简单的应用只需要一个核心库即可,复杂的应用可以按照需求…

transformers-AutoClass

https://huggingface.co/docs/transformers/main/en/autoclass_tutorialhttps://huggingface.co/docs/transformers/main/en/autoclass_tutorialAutoClass可以自动推断和加载给定checkpoint的正确架构。 对于文本,使用Tokenizer将文本转换为token序列,创…

IDEA中application.properties文件中文乱码

现象: 原因: 项目编码格式与IDEA编码格式不一致导致的 解决办法: 在File->Settings->Editor->File Encodings选项中,将Global Encoding,Project Encoding,Default encoding for properties files这三个选项置为一致&a…

通过netstat命令查看Linux的端口占用

一、netstat 完整写作network statistics,简写为netstat ,常用的几个参数为l、n、t、u、p。 -l : 仅展示监听状态下的程序(state 为LISTEN)。 -n :会使用ip端口的方式,来进行地址的描述。不使用-n就会变成服务器的名称…

毕业设计基于SpringBoot+Vue智慧云办公系统源码+数据库+项目文档

智慧云办公管理系统 一、系统简介 智慧云办公系统是一个采用SpringBootVue技术开发的前后端分离的项目,云办公系统通过软件的方式,方便快捷处理中小型企业的公司日常事务,能够提高整体的管理运营水平,使得办公更加高效方便&…

随想录一刷·数组part1

你好&#xff0c;我是安然无虞。 文章目录 1. 二分查找题型2. 移除元素题型 1. 二分查找题型 二分查找传送门 class Solution { public:int search(vector<int>& nums, int target) {// 在有序数组中查找第一时间想到二分查找int left 0, right nums.size() - 1…

虚拟机部署与发布J2EE项目(Linux版本)

&#x1f3ac; 艳艳耶✌️&#xff1a;个人主页 &#x1f525; 个人专栏 &#xff1a;《Spring与Mybatis集成整合》《Vue.js使用》 ⛺️ 越努力 &#xff0c;越幸运。 1.jdk安装配置 打开虚拟机 Centos 登入账号&#xff0c;并且使用MobaXterm进行连接 1.1. 传入资源 连接…

单元化架构的思考

银行业“多活”的发展历程 受监管政策的要求&#xff0c;银行一般会在同城、异地或者多地进行数据中心建设&#xff0c;以保证系统的稳定运行&#xff0c;但从目前实际情况来看&#xff0c;“同城双活”目前仍是很多银行采用的主要形式。银行业的“多活”架构在发展过程中存在三…

Stable Diffusion WebUI扩展openpose-editor如何使用

先上地址: GitHub - fkunn1326/openpose-editor: Openpose Editor for AUTOMATIC1111s stable-diffusion-webuiOpenpose Editor for AUTOMATIC1111s stable-diffusion-webui - GitHub - fkunn1326/openpose-editor: Openpose Editor for AUTOMATIC1111s stable-diffusion-webu…

高校教务系统登录页面JS分析——天津大学

高校教务系统密码加密逻辑及JS逆向 本文将介绍天津大学教务系统的密码加密逻辑以及使用JavaScript进行逆向分析的过程。通过本文&#xff0c;你将了解到密码加密的基本概念、常用加密算法以及如何通过逆向分析来破解密码。 本文仅供交流学习&#xff0c;勿用于非法用途。 一、密…