我们想要进入一个指定的网站,通常需要输入网址,一般来讲我们所说的网址指的就是URL——统一资源定位符。一个完整的URL包括有协议、域名、端口号、路径和文件名,有时候会包括有参数。
常用的协议有http、https、file、ftp等。其中file协议用于定位本地资源,比如file:///F:/study/index.html定位的就是本机F盘study文件夹下的index.html文件。http和https协议都是用来定位网络资源的,不同的是http中数据是明文传输而https加密了,换言之,https协议下我们的数据传输是安全的。ftp协议用于Internet控制文件的双向传输。
域名是一个网站的标识,我们输入URL之后浏览器通过对域名的解析得到你要访问的主机IP地址从而进行定位。域名解析按照以下顺序进行:
- 浏览器缓存 - 一段时间内访问过该网站的话浏览器上会保存DNS(Domain Name System,域名系统)缓存;
- 系统缓存 - hosts文件中同样存了域名与IP地址的对应,因此会在hosts文件中进行查找;
- 路由器缓存 - 一般路由器也会缓存域名信息;
- ISP DNS缓存 - 在互联网服务提供商处查找缓存,比如到电信的DNS上查找缓存;
如果上述方法都没有找到,则向根域名服务器查找域名对应IP,根域名服务器会将请求转发到下一级直到找到IP。
一个网站打不开的话是因为上边的环节出错导致浏览器没能找到对应的IP地址,由此如果说电脑连上了无线但还是上不了网可以直接修改dns为8.8.8.8(google服务器默认IP)或者是114.114.114.114(国内的一个dns提供商),这样省去了查找环节直接进入网站。
域名解析为IP之后提交给服务器处理。服务器是一台安装了系统的机器,同样也是一台电脑,常见的系统如Linux、Windows server 2012等,系统中会安装处理请求的应用如web server 来接收并响应请求。常见的web服务器有Apache、nginx、IIS、Lighttpd等。
web服务器接收用户的请求之后将其提交给网站代码,或者反向代理到其它服务器。网站代码对用户请求进行处理。
用户请求传送到网站代码之后,对于常见的MVC框架,通常是后台语言如Python之类的进行路由匹配,然后将用户请求提交到控制器(controller),controller控制model,model在database中取出数据,然后再传给controller,controller通过view将其展现给用户。
model是对数据库操作的抽象,通过model对数据库进行操作。view是html模板,用户请求结果的最终展示。
HTML字符串被浏览器解析之后会被一句句读取解析,然后有需要请求资源src的时候会继续向服务器发送请求。比如img标签会发送请求获取图片资源,script标签会发送请求获取js并执行代码…所以js文件引用最好是放在body标签的后边,css在head标签里边引用。先把样式添加进去让浏览器完成渲染,在页面加载完成后再添加交互效果。