从URL的输入到页面的展示大致分为以下几个流程
输入一个URL地址——浏览器对域名进行解析,得到IP地址——服务器处理——网站处理——浏览器处理——绘制页面
那么URL是什么?
是统一资源定位符,用于定位互联网的资源,URL对应一些协议,域名,端口,还有一些其他相关信息
其中协议有:
http:明文输出,传输过程中被路由器拦截,用户名密码都会被看见
https:经过加密的协议,无法被破解,用户名密码不会被看见
ftp:从浏览器中打开本地文件
file:当前文件的URL和当前页面的协议保持一致
一 域名解析
对于httphttp://jirengu.com的URL,浏览器实际上不知道jirengu.com到底是什么,需要查找jirengu.com网站所在服务器的IP,才能找到目标,总而言之就是用一种方式把http://jirengu,com网址解析成http://jirengu.com所对应的IP地址。
为什么不直接使用IP?因为IP不方便人们记忆。域名好记,有一个语义化的作用。
域名是什么?比如www.baidu.com网址 baidu.com就是域名,后面的端口号可以忽略不计。
IP地址是什么?每一个处于互联网的设备都有一个IP地址,形如192.168.0.1
局域网IP 和公网IP是有差别的,比如处于一个办公室,办公室内的所有的电脑都连接一个同一个路由器的WiFi,所有的电脑都是处于同样的一个局域网,多以每台电脑的IP就是局域网的IP,所以可以通过局域网的IP地址访问到其他电脑机器,但是别人是不能通过这个IP 找到具体是哪台电脑的。公网IP是需要申请的。
实践点,做一个手机页面的开发,在电脑上搭建一个服务器测试没有问题,这时候让手机和电脑连接在同一个路由器的WiFi下,电脑有一个IP地址,手机浏览器就能用这个IP地址放电脑上的服务器。这就是手机调试。
127.0.0.1代表的是本机的IP
域名解析的流程
浏览器缓存:通过输入http://wangxiaoqin.com,之前找到过这个域名相对应的IP地址,将会缓存DNS记录一段时间,即过往记录,下次访问直接访问IP地址
系统缓存:若是第一次访问网站,将会查找系统缓存。即从Hosts文件查找是否有该域名和对应的IP地址(通过soptlight搜索houstbuddy——/etc/hosts或develop找到hosts文件,即IP+缓存名
路由器缓存,一般的路由器登录之后也会缓存域名信息
ISP DNS缓存,比如到电信(你的服务商)的DNS 上查找缓存
如果以上都没有,开启查找IP的过程:如访问某个小国的新的域名,则向根域名服务器查找域名对应的IP,比如我请求的是http://abc.com,那它就会向根域名服务器.com这个域名服务器去查找,把请求转发到下一级,找到之后便会告诉你IP是多少。
DNS连接上网问题
DNS是什么
DNS(Domain Name System,域名系统),万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。
通过域名,最终得到该域名对应的IP地址的过程叫做域名解析(或主机名解析)。
电脑突然不能上网
修改dns为8.8.8.8或者114.114.114.114即能上网
DNS劫持是什么?
比如,黑客攻击某个节点或某根域名服务器(即攻击这里所管理的众多IP地址),如http://baidu.com相对应的百度IP被侵入任意网站的IP,再打开http://baidu.com通过域名解析之后,可能通过ISP dns上查找到任意IP,会得到“真域名 假IP”的假网站,危害巨大
二 服务器处理
浏览器像IP地址发出请求
服务器是什么:是安装了系统的机器,就是一台电脑
常见的几桶:linux(没有图形界面),Windows sever2012(可以安装一些fuwu服务端的软件,有图形界面)
机器处理请求:入处理jirengu.com时,系统里安装的可以处理请求的软件叫做 web server
web服务器:常见的web服务器有Apache,nginx iis lighttpd
作用:web服务器,用于接受用户的Request交给网站的相关代码,或者接受请求,然后反向代理到其他服务器。说白了就是一个管理的入口
通过域名解析后上图三个网站都得到了同一个IP地址202.112.230.14。然后被系统NGINX接管,通过配置文件将请求的网站匹配相应的文件夹代码,运行返回效果。
凡是通过http方式获取的网站,都是通过web服务器做一个管控。即使在本地搭建网站也是需要搭建web服务器。
三 网站的处理流程
后台语言:ruby、nodejs、python等
MVC模式(模型(model)视图(view)控制器(controller))
比如,浏览器访问http://wangxiaoqin.com/users,交至/users这个网站后代码运行,匹配路由,发现有/users之后,交给控制器(一个代码文件);它会向模型(可看成文件)发送调用查找所有用户请求,模型从数据库中进行查找,数据库返回之后,控制器获取模型所提供user.all的接口数据,控制器获取所有用户数据;将数据添置到视图(可看成模板)中生成一个html,发回浏览器,即能看到有所有用户的html页面。前端对应则是视图(htmlcss框架等)
五、浏览器处理
网站处理之后,该网站生成html页面发回浏览器,html字符串被浏览器接收后被一句句读取解析;当解析到link标签后,如某个标签对应的css地址,重新发送请求获取css代码;当解析到script标签后,向如src的地址向服务器发送请求,获取js并执行代码;当解析到img标签后发送请求获取图片资源。
即第一次获取html时,浏览器会重新把html里的链接和相关资源再请求一次,审查元素里有众多requests。
link——ccs script——js img——图片资源
六、绘制网页
浏览器根据html和css计算得到渲染树,绘制到屏幕,即浏览器根据html、css,它知道每个元素该怎样去放置。假设页面作为一幅画:html控制画的内容(结构层),浏览器画(渲染),css控制画的样子(展示层),之后js将会被执行(行为层)。