背景

最近学习到 nginx 方向代理发现,nginx 可以将你的请求以 http 块的 server 形式代理到请求的域名或者 ip 地址。

一个简单的 nigx 配置如下:

1
2
3
4
5
6
7
8
server {
listen 80;
root /usr/share/nginx/html; location / {
proxy_pass http://www.example.com/link/;
}
}

这不由使我想到,如果在自己的服务器前加上了 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的更多相关文章

  1. 解释一下,在你往浏览器中输入一个URL后都发生了什么,要尽可能详细

    这道题目没有所谓的完全的正确答案,这个题目可以让你在任意的一个点深入下去, 只要你对这个点是熟悉的.以下是一个大概流程: 浏览器向DNS服务器查找输入URL对应的IP地址. DNS服务器返回网站的IP ...

  2. 在浏览器中输入一个URL后都发生了什么

    这道题目没有所谓的完全的正确答案,这个题目可以让你在任意的一个点深入下去, 只要你对这个点是熟悉的.以下是一个大概流程: 浏览器向DNS服务器查找输入URL对应的IP地址. DNS服务器返回网站的IP ...

  3. 当在浏览器输入一个url访问后发生了什么

    首先根据DNS获取该url的ip地址,ip地址的获取可能通过本地缓存,路由缓存等得到. 然后在网络层通过路由选择查找一条可达路径,最后利用tcp/ip协议来进行数据的传输. 其中在传输层将信息添加源端 ...

  4. 从URL输入到页面展现到底发生什么?

    目录 前言 一.URL 到底是啥 二.域名解析(DNS) 1.IP 地址 2.什么是域名解析 3. 浏览器如何通过域名去查询 URL 对应的 IP 呢 4. 小结 三.TCP 三次握手 1.TCP 三 ...

  5. 经典面试题:在浏览器地址栏输入一个 URL 后回车,背后发生了什么

    尽人事,听天命.博主东南大学硕士在读,热爱健身和篮球,乐于分享技术相关的所见所得,关注公众号 @ 飞天小牛肉,第一时间获取文章更新,成长的路上我们一起进步 本文已收录于 CS-Wiki(Gitee 官 ...

  6. 网易笔试题:浏览器中输入一个url后回车到返回页面信息的过程

    You enter a URL into the browser输入一个url地址 The browser looks up the IP address for the domain name浏览器 ...

  7. 浏览器输入一个url到整个页面显示出来经历了哪些过程?

    https://cloud.tencent.com/developer/article/1396399 https://www.cnblogs.com/haonanZhang/p/6362233.ht ...

  8. 从输入一个URL到页面渲染的流程简介

    首先说明以下是我参考网上答案和自己的思考,给出自己的想法,如果有问题,欢迎大家吐槽从用户在浏览器中输入一个URL,到整个页面渲染,这个过程中究竟发生了什么呢?今天先简单写下整个过程,后面再一点点完善. ...

  9. 编写一个C语言函数,要求输入一个url,输出该url是首页、目录页或者其他url

    编写一个C语言函数,要求输入一个url,输出该url是首页.目录页或者其他url 首页.目录页或者其他url 如下形式叫做首页: militia.info/ www.apcnc.com.cn/ htt ...

随机推荐

  1. GCC常见命令汇总

    int main() { test(); } man.c如上: #include <stdio.h> void test() { printf("test\n"); } ...

  2. redis基本指令

    1.键值相关命令       keys * 取出当前所有的key       exists name 查看n是否有name这个key       del name 删除key name       e ...

  3. PAT Advanced 1059 Prime Factors (25) [素数表的建⽴]

    题目 Given any positive integer N, you are supposed to find all of its prime factors, and write them i ...

  4. Go-简介-发展

    01-Go语言介绍 目录 Go语言介绍 Go语言特性 Go语言发展(版本/特性) Go语言应用 谁在用 应用领域 Go语言项目 Go语架构 Go语言发展前景 Go语言介绍 Go 即Golang,是Go ...

  5. Redis--初识Redis

    Redis 是一个远程内存数据库,它不仅性能强劲,而且还具有复制特性以及为解决问题而生的独一无二的数据模型.Redis 提供了 5 种不同类型的数据结构,各式各样的问题都可以很自然的映射到这些数据结构 ...

  6. 关于nginx配置的一个报错connect() to unix:/tmp/php-cgi.sock failed (2: No such file or directory)

    针对配置php的情况: linux服务器一般提示这个 connect() to unix:/tmp/php-cgi.sock failed (2: No such file or directory) ...

  7. requset请求处理与BeanUtils封装

    HTTP: 概念:Hyper Text Transfer Protocol 超文本传输协议 传输协议:定义了,客户端和服务器端通信时,发送数据的格式 特点: 基于TCP/IP的高级协议 默认端口号:8 ...

  8. 17.3.13---sys.argv[]用法

    1------sys.argv[]是用来获取命令行参数, sys.argv[0]表示代码本身文件路径,因此要从第二个即sys.argv[1]开始去参数 例如创建一个文件: import sys pri ...

  9. ansible批量部署模块(二)

    回顾:Ansible: 无需客户端程序 只要有SSH 模块化 ansible帮助工具ansible-doc 模块名ansible-doc 模块名 -s 列出该模块的所有选项ansible-doc -l ...

  10. Eclipse 中 Syntax error on token "Invalid Character", delete this token 的解决

    eclipse中遇到了Syntax error on token "Invalid Character", delete this token(令牌“无效字符”上的语法错误,删除此 ...