输入一个url之后到底发生了什么 - Hurry
背景
最近学习到 nginx 方向代理发现,nginx 可以将你的请求以 http 块的 server 形式代理到请求的域名或者 ip 地址。
一个简单的 nigx 配置如下:
1 |
server { |
这不由使我想到,如果在自己的服务器前加上了 nginx 反向代理,那以前学习的“输入一个 url 之后到底发生了什么“这里面就需要再加上一个 nginx 的反向代理步骤嘛,同时,如果在代理的服务器之前再加一层 nginx 反向代理以考虑前一个 nginx 负载均衡不够时,那就还需要增加一些解析的步骤。
下面还是来凭我自己的理解,记一下“输入一个 url 之后到底发生了什么”的步骤吧。
输入一个 url 之后到底发生了什么
域名解析
在输入一个 url 之后,第一步就是域名解析
- 先在浏览器中的历史记录中查 大专栏 输入一个url之后到底发生了什么 - Hurry找域名对应的 ip
- 如果没找到 ip,查找本地的 hosts 文件,是否有对应的 ip
- 再没找到的话,浏览器就会向 DNS 域名解析服务器查询对应的 ip,这其中涉及到 DNS 的递归解析,当前 DNS 服务器找不到则向更远的服务器查找。
- 浏览器拿到对应的 ip 之后,则向服务器发送请求。
服务器请求
- 浏览器向服务器请求,如果这之中有了一层 nginx 的反向代理,则回请求代理中的内容,如果代理的值为一个域名,则重复进行域名解析,直到获得 ip,如果值为 ip,则直接访问当前 ip。
- 浏览器开始向 ip 地址发送请求建立一个 http 连接了,然后会经过 tcp 的三次握手。
- 握手成功之后,成功建立连接。
- 服务器根据特定的请求返回响应内容。
浏览器解析HTML
- 浏览器获得服务器返回的 html 内容之后,开始解析 html。
- 浏览器构建 dom 树,异步解析css,同步解析 javascript。
- 最后构建的 dom 树和 cssom 树,经过重绘和重排,通过 GPU 渲染出相应的页面。
总结
深挖这个知识点,我们还可以学习到很多计算机操作系统,网络请求,服务器配置,运维网关,以及前后端相关的知识,这只是大概梳理了一下脉络,里面还有很多深入的东西没写,比如计算机底层的文件查询,cpu指令集的运行,内存的分配等等,以后会随着自己知识的完善不断修改补充,可能也有许多不对的地方,但“纸上得来终觉浅,绝知此事要躬行”这种精神还是要继续保持。
输入一个url之后到底发生了什么 - Hurry的更多相关文章
- 解释一下,在你往浏览器中输入一个URL后都发生了什么,要尽可能详细
这道题目没有所谓的完全的正确答案,这个题目可以让你在任意的一个点深入下去, 只要你对这个点是熟悉的.以下是一个大概流程: 浏览器向DNS服务器查找输入URL对应的IP地址. DNS服务器返回网站的IP ...
- 在浏览器中输入一个URL后都发生了什么
这道题目没有所谓的完全的正确答案,这个题目可以让你在任意的一个点深入下去, 只要你对这个点是熟悉的.以下是一个大概流程: 浏览器向DNS服务器查找输入URL对应的IP地址. DNS服务器返回网站的IP ...
- 当在浏览器输入一个url访问后发生了什么
首先根据DNS获取该url的ip地址,ip地址的获取可能通过本地缓存,路由缓存等得到. 然后在网络层通过路由选择查找一条可达路径,最后利用tcp/ip协议来进行数据的传输. 其中在传输层将信息添加源端 ...
- 从URL输入到页面展现到底发生什么?
目录 前言 一.URL 到底是啥 二.域名解析(DNS) 1.IP 地址 2.什么是域名解析 3. 浏览器如何通过域名去查询 URL 对应的 IP 呢 4. 小结 三.TCP 三次握手 1.TCP 三 ...
- 经典面试题:在浏览器地址栏输入一个 URL 后回车,背后发生了什么
尽人事,听天命.博主东南大学硕士在读,热爱健身和篮球,乐于分享技术相关的所见所得,关注公众号 @ 飞天小牛肉,第一时间获取文章更新,成长的路上我们一起进步 本文已收录于 CS-Wiki(Gitee 官 ...
- 网易笔试题:浏览器中输入一个url后回车到返回页面信息的过程
You enter a URL into the browser输入一个url地址 The browser looks up the IP address for the domain name浏览器 ...
- 浏览器输入一个url到整个页面显示出来经历了哪些过程?
https://cloud.tencent.com/developer/article/1396399 https://www.cnblogs.com/haonanZhang/p/6362233.ht ...
- 从输入一个URL到页面渲染的流程简介
首先说明以下是我参考网上答案和自己的思考,给出自己的想法,如果有问题,欢迎大家吐槽从用户在浏览器中输入一个URL,到整个页面渲染,这个过程中究竟发生了什么呢?今天先简单写下整个过程,后面再一点点完善. ...
- 编写一个C语言函数,要求输入一个url,输出该url是首页、目录页或者其他url
编写一个C语言函数,要求输入一个url,输出该url是首页.目录页或者其他url 首页.目录页或者其他url 如下形式叫做首页: militia.info/ www.apcnc.com.cn/ htt ...
随机推荐
- Python笔记_第四篇_高阶编程_再议装饰器和再议内置函数
1. 概述: 我们在前面用了很多的装饰器这个工具的方法.这个位置要系统的讲一下装饰器. 1.2 为什么需要装饰器. 装饰器本质是一个Python函数,它可以让其他函数在不需要任何代码变动的前提下增加额 ...
- 85.常用的返回QuerySet对象的方法使用详解:defer,only
defer(),only(): 这两个方法都会返回一个"QuerySet"对象,并且这个"QuerySet"中装的是模型,不像values()和values_l ...
- 实体机安装Ubuntu系统
今天windows突然蓝屏了,索性安装个 Ubuntu 吧,这次就总结一下实体机安装 Ubuntu 的具体步骤 note: 本人实体机为笔记本 型号为:小米pro U盘为金士顿:8G 安装系统:Ubu ...
- UML-SSD总结
1.不是所有场景都需要画SSD.需要画SSD的场景: 1).主成功场景 2).频繁发生的场景 3).复杂的场景 2.角色 1).参与者 2).系统(没有类,即黑盒) 3.画SSD时间不要过长,一般几分 ...
- flask框架-上
flask简介 Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 .Flask使用 BSD 授权. Fla ...
- 关于maven的使用总结
maven介绍 项目构建过程 eclipse只是开发工具,虽然提供了创建.编码.编译.测试.运行等功能,但并不是项目构建工具. 项目构建主要过程如下: 实际的项目构建过程要复杂繁琐的多.如果是一个独立 ...
- C语言 指针在函数传参中的使用
int add(int a, int b) //函数传参的时候使用了int整型数据,本身是数值类型.实际调用该函数时,实参将自己拷贝一份,并将拷贝传递给形参进行运算.实参自己实际是不参与运算的.所 ...
- sol - 0x63
[例题]巡逻 注意到K只能是1或2,也就是说只能建0/1/2条新道路 我们分类讨论 当修建0条新道路的时候, 执行遍历会恰好遍历到每条边2次,答案为2*(n-1) 当修建1条新道路的时候, 我们设新道 ...
- JavaScript学习笔记 - 入门篇(1)- 准备
为什么学习JavaScript 一.你知道,为什么JavaScript非常值得我们学习吗? 所有主流浏览器都支持JavaScript. 目前,全世界大部分网页都使用JavaScript. 它可以让网页 ...
- oracle中带参存储过程的使用
Oracle中存储过程带参分为:输入参数(in)和输出参数(out) 例如: create or replace procedure out_test(v_user in emp.user_name% ...