输入一个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 ...
随机推荐
- 基于libcurl的GET与POST(HTTP1.1)
#include <stdio.h> #include <curl/curl.h> bool getUrl(char *filename) { CURL *curl; CURL ...
- 一线大厂的分布式唯一ID生成方案是什么样的?
本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...
- Java使用Sftp实现对跨服务器上传、下载、打包、写入相关操作
1.Maven引入jar <dependency> <groupId>com.jcraft</groupId> <artifactId>jsch< ...
- python模块——datetime
datetime模块是python自带对时间的操作,其常用的四大类分别是date.time.datetime.timedelta.下面分别讲解下这四大类中常用的方法及其属性. date类 date类的 ...
- redhat下libreoffice 的安装
1.第一次安装libreoffic时是用网络yum源安装的,但是装好之后不能用,找了好久没有找出问题,后来从官网下载安装包后安装就可以了. 下载地址:https://zh-cn.libreoffice ...
- 限制客户端同账号同IP多终端登录
打开SoftEther VPN Server Manager工具,连接上节点 1.管理虚拟HUB--管理用户--双击用户--安全策略--最大多重登录数设置为1 2.管理虚拟HUB--虚拟HUB属性-- ...
- postgreSQL命令大全(更新中)
1.PostgreSQL索引的建立https://blog.csdn.net/jubaoquan/article/details/78850899: 2.PostgreSQL9中索引的原理和效率查询h ...
- Jmeter连接Mysql出现Cannot create PoolableConnectionFactory (Could not create connection to database server.)错误
0 环境 系统环境:win10 1 正文 一般是数据库的驱动包版本不匹配(我是直接放在jmeter/lib下的) 当然有时候需要添加?useUnicode=true&characterEnco ...
- Python - 使用 xlwt 写入表格
# -*- coding: utf-8 -*- import xlwt def write_excel(): f = xlwt.Workbook() fenlei = ['一类','二类','三类', ...
- day42-进程池
#进程池Pool:apply apply_async-close-join-get map callback #1.进程池Pool:执行下面代码发现任务012先执行,345后执行,因为进程池只有3个进 ...