通过这个问题,梳理其中涉及的知识点,再查缺补漏。
整体上分为三部分,浏览器端(客户端),网络传输,服务端,
大体流程为: 浏览器发送url请求——>通过网络传输请求数据——>服务端处理请求并返回请求结果——>通过网络再传送回浏览器——>浏览器拿到数据后处理展示
-
浏览器通过DNS查询IP,然后通过socket API发送请求;
-
数据在网络中传输,网络分层从上到下依次为:应用层(HTTP协议)——传输层(TCP协议)——网络层(IP协议)——网络接口层/链路层(MAC协议,ARP协议等);
-
请求到达服务端,首先经过负载均衡(LVS,VIP,HTTP反向代理),将请求发送到合适的webserver;
-
webserver将请求传给fastcgi,fastcgi处理完请求后将结果返回给webserver,然后webserver再通过socket把请求结果发送出去。
浏览器发送url请求
1. url组成
例子:http://tieba.baidu.com/f?ie=utf-8&kw=test&fr=search
url由3部分组成:协议+主机名+路径及文件名
协议
包括http/https、ftp、file等协议,最常用的就是http协议
主机名
由 域名/IP地址 + 端口号组成,一般如果省略端口号,则使用相应协议的默认端口,比如http协议默认端口为80。域名需要通过DNS解析成对应的IP地址。
路径及文件名
- 路径path是由零个或多个’/’隔开的字符串,一般表示主机上的某个目录路径或文件地址,如上面例子中的 ‘/f’ ;
- 对于动态网页,在path后面会有’?’,问号后面的部分是参数,由’&’符号连接起来,如上面例子中的 ‘?ie=utf-8&kw=test&fr=search’
根据url的组成,相应的拓展到以下知识点:http/https协议,DNS,CDN
另外,有个将长url映射为短url的算法,可以了解下
2. http/https协议
http协议是一种网络传输协议
https协议可以理解为安全版的http协议
关于这两种协议,后面会有单独文章来总结
3. DNS
DNS(Domain Name System,域名系统),其实就是域名到实际IP地址的映射。
后续再补充
4. CDN
CDN(Content Delivery Network,内容分发网络), 主要是通过让用户就近取得数据,提高页面响应速度。
关于CDN涉及挺多内容,之前简单看过一些,找时间总结下
5. socket
浏览器通过DNS查到IP后,再通过socket API发送数据
socket相关内容
网络传输
关于这部分,准备看下《TCP/IP详解卷1》再来总结
服务端处理请求&返回结果
浏览器发送的数据通过网络传输到服务端,当然首先是到达服务器网卡,网卡接收到数据包后,会立即发送中断信号,通知内核数据来了,内核会调用网卡之前注册好的中断处理程序来响应中断信号,该中断处理程序负责将网卡上的数据包拷贝到内存。这样我们的webserver就能拿到网络传过来的数据了。
1. webserver
webserve能够解析http协议,接收http请求,然后返回http响应。如果是动态页面,会把请求交给cgi/fastcgi进行处理,然后拿到返回结果。
webserver有挺多,我们主要学习nginx。关于nginx会涉及很多内容,后续会逐步总结。
涉及知识点:cgi/fastcgi,进程间通信,tcp连接通信
2. 逻辑处理
webserver通过cgi讲请求发送给响应的执行程序,首先会根据url中的路径及文件名信息进行路由,找到响应的执行文件,然后根据参数进行逻辑处理,得到返回结果,再返回给cgi程序。
这里就涉及编程语言了,包括php/python/go等。
平时项目大部分用php,之前简单看了下php内核相关的内容,准备找时间再仔细看一遍,然后再总结。
3. 存储
存储类型:mysql,redis等 存储方式:单机,分布式
后续单独总结
浏览器接收到数据后处理展示
浏览器拿到数据后,通过html进行展示,
这个不太了解,需要好好学习下
小结
本文主要是想通过梳理”从浏览器输入网址到页面打开,都发生了什么”这个问题,把沿途涉及的知识点简单列一下,然后针对自己的不足,补充学习。 so,it’s just a start…