网站是怎么显示出来的(转)
首先用户要在浏览器上输入一个网址,然后浏览器会解析这个网址, 首先就要解析这个网址是以什么协议访问的,比如 http://www.baidu.com
这样的域名,这个域名就代表我们以HTTP协议来解析URL,在大学时我们常用FTP,比如 ftp://172.31.214.196
,就代表以ftp发的方式发送请求。不同的协议有不同的解析网址的方式。比如http之后的一串英文就代表Web服务器域名,而mailto后面的一串英文就代表邮件地址。HTTP协议使我们日常上网的时候用的最多的协议,之后只以这个协议为例,不再说明。
这里先简单介绍一下HTTP协议,HTTP协议是一套定义了客户端和服务器之间如何交互的协议,比如客户端发送请求的信息是什么格式,服务器如何解析对应的数据,服务器返回的数据应该是什么格式之类的。
以客户端向服务器发送请求来说,HTTP协议定义了请求信息中要有两个东西,一个是对服务器哪个资源发送请求,一个是对这个资源发送什么样的请求。
比如说,我们向http://www.baidu.com/loginl发送一个GET请求,一般表明我们要获取http://www.baidu.com/login这个资源,如果我们向这个路径发送一个POST请求,一般是我们要向服务器更新一些资源。
HTTP协议中有哪些类型的请求以及发送的请求信息是什么样的,请读者自己查询网络资料。
注:一般来说GET请求是获取某些资源,POST请求是向服务器更新某些资源,不过这都由服务器的管理者来决定,管理者可以决定你向这个资源发GET请求表明着向服务器更新信息,也可以让你发POST请求代表获取信息,各种请求只是HTTP协议中定义了这些,GET代表获取,POST代表更新是约定俗成而已,并不一定是这样的操作。
浏览器获解析完URL就可以获取到资源路径,也就是上面说的“对哪个资源发送请求”,然后就要知道我们发送的是一个什么请求,如果什么都没定义,那默认就是GET请求,想要发送其他的请求,比如POST请求,PUT请求,一般是要填写网站给出的表单,表单具体发送请求由网站代码编写者来定义,比如登录表单,程序员可以定义为POST请求,那你填写完就会发送一个POST请求,如果定义为PUT请求,那你填写完就是发送了一个PUT请求。
有了资源路径和请求类型,我们就要生成请求信息了,就是让服务器知道你要对哪个资源发送请求和请求类型。这个请求信息包含很多东西,比如请求类型,资源路径,HTTP版本等等等等,很多的东西,同时HTTP协议对这个请求信息的格式有很严格的要求,这个信息放哪里,那个信息放哪里,他们在哪一行等等,都有很严格的要求,请求信息格式本来是很重要的,但是本文重点不在于此,读者若有兴趣请自行了解。
接下来我们就要将这个请求信息发送给服务器了,可是怎么发呢,如果读者有了解,可能会知道一个域名后面可能有很多服务器,那我们要发送给哪一个服务器呢?我们现在只有一个域名,我们要通过域名获取到服务器的IP地址,才能成功的将请求信息发出去。接下来我们就要向DNS服务器来查询Web服务器的IP地址了。
最简化的流程:你的机器向离你机器最近的DNS服务器发出询问:“域名为xxxxxx的服务器的IP地址是多少”,DNS服务器就告诉你它的IP地址了。
注:一般地理位置最近的服务器速度是最快的
这个询问的过程依靠的是操作系统的Socket库,你可能在很多编程语言中都见过这个库的名字,因为篇幅原因这里不多介绍,感兴趣的读者可以自行了解。
我们有了IP地址就可以发送请求信息了,信息发送出去之后,服务器接收到信息,服务器根据HTTP协议对请求信息的定义规则来解析这个请求信息,然后服务器会返回给客户端一个响应信息,里面也有很多信息,里面有我们很常见的状态码,比如我们常见的404错误,或者500错误,这都是状态码的一部分。响应信息还有服务器决定返回给客户端的数据,除此之外响应信息还有很多很多东西,同时响应信息的格式也是由HTTP协议定义的,具体内容和格式我们不讲,请读者自行了解。
服务器给你返回了响应信息,你的浏览器就开始按照HTTP协议对响应信息的定义规则解析响应信息了,之后判断是什么文件,如果是HTML文件要显示在哪儿,如果是JS文件一般要执行,是图片文件一般要放在页面上,最终就显示在了你的页面上。
原文地址:https://www.yuque.com/realsky/anything/aa3yaf