从输入URL到浏览器显示页面到底经历了什么?

2023-10-27

从输入URL到浏览器显示页面到底经历了什么?

很多公司面试都喜欢问这个问题:从输入URL到看见页面发生了什么?今天就来做个总结。
简单来说,共有以下几个过程:

  • DNS解析
  • 建立TCP连接,进行三次握手
  • 发送HTTP请求
  • 服务器处理请求并返回HTTP报文
  • 浏览器解析并渲染页面
  • 释放TCP连接,进行四次挥手

DNS解析

我们知道用户想与因特网上某个主机通信时,必须要知道对方的IP地址。而DNS解析就是将域名解析为IP地址的过程。

1、DNS解析过程

DNS解析过程
(1)主机www.google.com先向其本地域名服务器10.1.1.1进行递归查询。
(2)本地域名服务器采用迭代查询。直到查到所查询主机的IP地址。
(3)本地域名服务器最后把结果告诉主机www.google.com。

2、DNS优化

很多时候我们不断的访问一个域名,并不需要每次都经过如此繁琐的查询,而是通过高速缓存提高查询效率。
高速缓存用来存放最近查询过的域名以及从何处获得域名映射信息的记录。
(1)主机向本地域名服务器查询IP地址,若本地域名服务器缓存中有该主机对映的IP地址,便直接返回。
(2)若本地域名服务器没有缓存该主机对映的IP地址,而缓存了顶级域名服务器的IP地址,则可以直接向顶级域名服务器查询。
(3)为保证高速缓存中的内容正确,域名服务器应为每项内容设置计时器并处理超过合理时间的项。

建立TCP连接

1、什么是TCP?

TCP是一种面向连接的协议,并提供一种可靠的传输。TCP连接有三个阶段,即:连接建立数据传输连接释放
在TCP连接建立过程中要解决以下三个问题:
(1)要使每一方能够确知对方的存在。
(2)要允许双方协商一些参数(如最大窗口值等)
(3)能够对运输实体资源(如缓存大小等)进行分配。
TCP连接的建立采用客户服务器方式。主动发起连接建立的应用进程叫做客户,而被动等待连接建立的应用进程叫做服务器

2、TCP的连接建立——三次握手

SYN:同步位,ACK:确认位

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

从输入URL到浏览器显示页面到底经历了什么? 的相关文章

  • 如何使用独立的 Jetty 进行服务器推送

    我正在尝试使用独立的 Jetty 在静态网站上测试服务器推送功能 我的网站由一个index html 1个CSS 一堆图像组成 目录结构为 Album index html style css images image 1 png a se
  • .NET 中有什么方法可以以编程方式侦听 HTTP 流量吗?

    我正在使用浏览器自动化来测试网站 但我需要验证来自浏览器的 HTTP 请求 即图像 外部脚本 XmlHttpRequest 对象 有没有一种方法可以以编程方式实例化代理以供浏览器使用以查看其发送的内容 我已经在使用 Fiddler 来监视流
  • Angular2 中 Http 的 Promise 与 Observable? [复制]

    这个问题在这里已经有答案了 本质上 正如标题所说 是否有任何理由使用可观察的承诺 https stackoverflow com questions 37364973 angular 2 promise vs observable为了进行
  • 多个客户端如何同时连接到服务器上的一个端口(例如 80)? [复制]

    这个问题在这里已经有答案了 我了解端口工作原理的基础知识 但是 我不明白的是多个客户端如何同时连接到端口 80 我知道每个客户端都有一个唯一的 对于他们的机器 端口 服务器是否从可用端口回复客户端 并简单地声明回复来自 80 这是如何运作的
  • 有没有办法使用 ASP.NET 在用户离开页面时始终运行某些服务器端代码?

    我想知道当用户离开 ASP NET 中的页面时是否有任何方法可以始终运行一些服务器端代码 页面卸载事件不好 因为如果有人单击链接 则不会调用该事件 理想情况下 即使用户关闭浏览器 我也希望代码能够运行 我怀疑我所问的问题是不可能的 但问一下
  • 为什么 websocket 需要使用 HTTP 进行打开握手?为什么不能成为一个独立的协议呢?

    Websocket 的设计方式是 通过使其握手成为有效的 HTTP 升级请求 其服务器可以与 HTTP 服务器共享端口 我对这个设计理念存有疑问 无论如何 WebSocket 协议都是一个独立的基于 TCP 的协议 为什么我们需要这个 HT
  • 网站(Google 和/或您)应如何处理 Accept-Language 标头?

    很长一段时间以来 我对谷歌在以下情况下的行为并不满意 并且在无意中注意到之后80 其他人 https stackoverflow com questions 1011167 what are common ui misconceptions
  • 过滤条件的查询字符串与资源路径

    背景 我有2个资源 courses and professors A course具有以下属性 ID topic 学期号 年 部分 教授 id A professor具有以下属性 ID 学院 超级用户 名 姓 所以 你可以说一门课程有一位教
  • 如何在android中创建nanohttpd服务器?

    其实我也查过一些问题 然后去github上找了一下 但我是新来的 我无法理解这个例子 我想在android中创建http服务器 这样我就可以在PC浏览器中访问它 我有一个类扩展 nanohttpd 的实例 但服务器无法工作 不知道为什么 我
  • Python Requests 库重定向新 url

    我一直在浏览 Python 请求文档 但看不到我想要实现的任何功能 在我的脚本中我设置allow redirects True 我想知道该页面是否已重定向到其他内容 新的 URL 是什么 例如 如果起始 URL 为 www google c
  • 从 R 中的 HTTPS 连接逐行读取

    当创建连接时open r 它允许逐行读取 这对于批量处理大数据流非常有用 例如这个脚本 https gist github com jeroenooms d33a24958d99bb969ac0通过一次读取 100 行来解析相当大的 gzi
  • 是否可以使用 PHP 重定向发送 POST 数据?

    更新 这不是重复的如何使用 PHP 发送 POST 请求 https stackoverflow com questions 5647461 how do i send a post request with php 那里的解决方案对我不起
  • 如何使用 Netty 连接到运行 HTTP 服务器的 UNIX 域套接字?

    我正在尝试使用 Netty 连接到 Docker UNIX 域套接字 到目前为止 这是我的尝试 PostConstruct public void init throws Exception io netty bootstrap Boots
  • 明文 HTTP 流量...不允许

    我的程序从用户那里获取一个 URL 因此它可以向互联网上的任何网站发出请求 我试图让这成为可能 我查找了有关 Android HTTP Cleartext 错误的所有答案 并做了这个 但它仍然不允许我连接我的测试本地 PHP 服务器 我在这
  • RestSharp 不反序列化 JSON 对象列表,始终为 Null

    我在使用 RestSharp 将返回内容反序列化到我的类中时遇到问题 从我所有的搜索来看 我的做法似乎是正确的 我宁愿使用 RestSharp 的反序列化器 也不愿使用 Newstonsoft 的 Json NET 等另一个包 我正在做的是
  • 使用 HTTP 访问数据库对象

    是否可以使用 HTTP 访问数据库对象SQL Server 2012它的完成方式是使用SQL Server 2000 我提到了下面的文章 但它是关于SQL Server 2000 使用 HTTP 访问数据库对象 http technet m
  • 缺少升级:在 netty 4.x 上同时提供 http 和 ws

    我正在 netty 上编写一个聊天应用程序 我尝试为两者服务HTTP and WS 但是http响应只是这些消息 不是 WebSocket 握手请求 缺少升级 这是我的代码片段 在InitChannel方法中 p addLast new H
  • Blackberry 上的套接字连接比 http 更快吗?

    我正在为 Blackberry 编写一个应用程序 该应用程序最初是在标准 J2ME 中实现的 网络连接是使用完成的Connector open socket 80 代替http 现在 我已经使用这两种方法实现了连接 似乎有时 套接字方法响应
  • 将参数传递给 http.HandlerFunc

    我正在使用 Go 的内置 http 服务器pat http github com bmizerany pat响应某些 URL mux Get products http HandlerFunc index func index w http
  • MongoDB 的简单 HTTP/TCP 健康检查

    我需要为 Docker 容器内的 MongoDB 实例创建运行状况检查 尽管我可以采取解决方法并通过 CLI 使用 Mongo Ping 但最好的选择是创建一个简单的 HTTP 或 TCP 测试 标准 ping 测试中默认 27017 端口

随机推荐

  • 链表—C语言链表中数据域是结构体该如何操作

    链表是数据结构中的首先接触到的 常规的链表数据域为int型 如果链表中数据域是一个结构体该如何操作呢 首先看一个例子 定义一个学生结构体 然后用单向链表保存学生信息 由scanf输入学生信息后形成链表 再打印出所有学生信息 include
  • shell编程之if判断

    目录 一 格式 1 格式1 2 格式2 3 格式3 二 注意 三 例子 1 判断两个数是否相等 2 判断两个数中的最大值 一 格式 1 格式1 if 判断条件 then 判断为true执行的代码 fi 2 格式2 if 判断条件 then
  • Java 的七种垃圾收集器

    了解 Java 中的内存管理 用 C 或 C 这样的编程语言写一个应用时 需要编写代码来销毁内存中不再需要的对象 当应用程序扩展得越来越复杂时 未使用对象被忽略释放的可能性就越大 这会导致内存泄露 最终内存耗尽 在某个时刻将没有更多的内存可
  • Qt串口通信接收数据不完整的解决方法

    在使用串口接收数据时 当数据量大的时候会出现数据接收不完整的情况 因为串口数据获取函数readAll 由readyRead 信号触发 但readyRead 信号在串口读到起始标志时立即发送 并不保证一定是当前所发数据的起始部分 因此串口通信
  • SpringBoot2.x 集成Activiti6.0

    任务要求 集成Activiti6 0 流程引擎开发环境 核心依赖pom文件如下
  • VIM列编辑

    有时候需要多行编辑 例如注释多行代码 或者取消注释 虽然有插件支持 但插件不能插入特殊的字符 此时可以借助vim的列编辑模式 可以允许同时编辑多行 具体的操作如下 在normal模式下按ctrl v进入列编辑模式 通过hjkl选中编辑的区域
  • Numpy数据类型对象(dtype)

    常用方法 记住引入numpy时要是用别名np 则所有的numpy字样都要替换 查询数值类型 gt gt gt type float dtype float64 查询字符代码 gt gt gt dtype f dtype float32 gt
  • 安装博途时一直提示重启电脑,如何操作?

    1 在安装博途时 一直要求重启电脑的提示 如下图所示 2 如果出现上图所以提示 需要进行如下操作 3 在电脑开始菜单里右击 选择运行 点击运行命令 会弹出如下图操作 4 删掉注册表的键值 如下图的位置 5 删掉上图所以键值后 再运行博途安装
  • 电子设计竞赛电源题(2)-检波与采样

    电赛中的电源题说好做也好做 说不好做也不好做 电源是一个危险的东西 硬件和软件稍有不慎可能就会炸板子炸芯片 在19年前的电赛电源题一般都是做开关电源逆变器之类的 但是这类题做的太多了 已经饱和了或者说现在的单纯的电源已经做的效率达到非常之高
  • UGUI中UI朝向某一个物体

    做一个上一剪头朝向下一箭头的效果 代码 Vector3 dir arrows i 1 transform position arrows i transform position dir z 0 dir Normalize arrows i
  • 如何解决技术难点

    1 可以从宏观方面处理 分解为小的demo 大处着眼 小处着手 2 分解为基本的技术 实现 3 切换一个电脑画图理解 画图有助于自己对整个流程分析 代码只是流程的实现 画图理解逻辑 保证自己有清晰的逻辑 清楚的思路和顺序 这点很重要 4 写
  • oracle hint之hint_index_ffs,index_join

    oracle hint index ffs index join index ffs hint 1 对表用快速索引全扫描进行访问 2 经测 仅count可以使用index ffs 而非count聚合函数好像不能使用index ffs SQL
  • 【IDEA】The IDE is running low on memory and this might affect performance. Please consider increasing

    今天在看Java源码 IDEA突然提示这个信息 The IDE is running low on memory and this might affect performance Please consider increasing av
  • Android 移动安全知识技术全解(加固技术、常规漏洞、Android 逆向......),移动安全问题不容忽视

    前言 您的设备是否处于遭受攻击 劫持或损害的风险中 毫无疑问 剑桥大学的研究人员发现 87 的 Android 智能手机有至少一个严重漏洞 Zimperium Labs 在早些时候发现 黑客只需通过一条简单的短信便能对 95 的 Andro
  • Let’s Make C++ Great Again——multiset与unordered_set

    文章目录 multiset 头文件 定义和插入元素 访问元素 遍历元素 删除元素 以下是一些常用的函数和用法 size empty 自定义排序方式 删除所有相同的元素 multiset和set有什么区别 元素唯一性 插入和删除 查找 uno
  • JVM垃圾回收与性能调优总结

    JVM垃圾回收与性能调优总结 JVM调优的几种策略 一 JVM内存模型及垃圾收集算法 1 根据Java虚拟机规范 JVM将内存划分为 New 年轻代 Tenured 年老代 永久代 Perm 其中New和Tenured属于堆内存 堆内存会从
  • 免费虚拟服务器注册,如何注册免费虚拟主机空间

    如何注册免费 目前能提供免费虚拟主机空间的服务商 非常少 即使有 也是各种限制 这里仅推荐几款比较熟知的品牌 OpenShift OpenShift空间是Red Hat的平台即服务的 但也存在着 PHP程序不兼容 国内访问速度慢 访问出现莫
  • 如何使用overleaf&LaTeX

    Introduction What is LaTeX LaTeX是一种基于 的排版系统 由美国计算机学家莱斯利 兰伯特 Leslie Lamport 在20世纪80年代初期开发 利用这种格式 即使使用者没有排版和程序设计的知识也可以充分发挥
  • Python: list列表的11个内置方法

    前言 在实际开发中 经常需要将一组 不只一个 数据存储起来 以便后边的代码使用 在VBA中有使用数组 可以把多个数据存储 到一起 通过数组下标可以访问数组中的每个元素 Python 中没有数组 但是加入了更加强大的列表 list 下面就对列
  • 从输入URL到浏览器显示页面到底经历了什么?

    文章目录 从输入URL到浏览器显示页面到底经历了什么 DNS解析 1 DNS解析过程 2 DNS优化 建立TCP连接 1 什么是TCP 2 TCP的连接建立 三次握手 3 为什么是三次握手 发送HTTP请求 1 请求行 2 HTTP缓存优化