这篇文章给大家聊聊关于深入解析:网址访问过程中的浏览器工作原理,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。
http://www.zhihu.com/question/22689579访问过程类似下图。浏览器与服务器通信,服务器与数据库通信(有时数据库在服务器机器上)
一个普通网站访问的过程简单概括一下,涉及到的技术就是:
1、用户操作浏览器进行访问,浏览器向服务器发送HTTP请求;
2、服务器收到HTTP请求,Web Server进行相应的初步处理,并使用服务器脚本生成页面;
3、服务器脚本(使用Web Framework)调用本地和客户端的数据生成页面;
4、Web Server将生成的页面作为HTTP响应的正文,根据不同的处理结果生成HTTP头,并发回给客户端;
5. 客户端(浏览器)接收HTTP响应。通常第一个请求得到的HTTP响应体中包含HTML代码,因此开始解析HTML代码;
6.在解析过程中,如果遇到引用服务器上的资源(额外的CSS、JS代码、图片、音视频、附件等),则向Web Server发送请求。 Web Server会找到对应的文件并发回;
7. 浏览器解析HTML中包含的内容,并使用获得的CSS代码进一步渲染外观。 JS代码还可能对外观进行一定的处理;
8、当用户与页面进行交互(点击、悬停等)时,JS代码会对其做出一定程度的反应,添加特效和动画;交互过程中,可能需要向服务器请求或提交额外的数据(部分刷新,类似微博的新消息通知),一般要么跳转,要么通过JS代码向Web Server发送请求(响应某个action)或计时),然后Web Server使用服务器脚本来处理它(生成资源或写入数据等)。将资源返回给客户端,客户端利用获得的资源实现动态效果或者其他变化。
Web Server 和 Web Services
浏览器向服务器发送请求,但服务器一看不知道如何响应。首先,这些请求和响应必须有一个共同的写法,即必须有一个协议,常用的就是HTTP协议。
就像上图一样,服务器的响应写入状态码200 OK,这是HTTP协议中的约定。服务器在响应中写入200 OK,这意味着“我有您请求的东西”。如果是404 Not Found ,则表示“我没有您请求的东西”。
HTTP响应还包括很多东西。例如Content-type表示服务器发送的文件类型(文本?动画?图片?音频?)。该信息被发送到其他浏览器,以便它们知道如何将其显示给用户。服务器如何知道根据协议要写什么?这是Web 服务器开始工作的时间。
可视化HTTP 响应,它可能看起来像这样:
图像
图像
再锤一下,浏览器和服务器之间的请求和响应过程大致是这样的。右下角的东西是Web Server生成的(服务器脚本可以做一些改变,但这些一般都是Web Server的职责。):
图像
图像
又如,很多时候当您访问网站时,浏览器中输入的地址并不表示您请求的文件。比如这个问题的地址是:
http://www.zhihu.com/question/22689579但是知乎的服务器实际上返回的是一个HTML给你。服务器怎么知道这个地址对应应该返回什么样的HTML代码给你呢?这也是Web Server 的工作。
除了在浏览器中输入地址回车等裸访问之外,客户端与服务器之间的交互还有很多种,例如:
前面提到的用JS做的AJAX有点像浏览器和服务器之间的耳语~还有其他应用软件和服务器之间的交互,比如:
微信、QQ与腾讯服务器交互
网络游戏客户端与网络游戏公司服务器交互
搜索引擎收集网页信息的程序(爬虫)与各种网站服务器之间的交互
只要你知道用什么地址访问,如何访问别人的服务器,并且有相应的权限,你也可以自己写一些程序与他们的服务器交互(比如使用微博API-新浪微博API获取微博) ,并开发第三方应用程序或数据分析)。
从这几个栗子可以看出,客户端与服务端交互的主体、客体、载体是多种多样的:
服务器可以是大型机,也可以是个人计算机,只要能运行相应的程序即可。客户端就像上面提到的栗子一样,可以是各种软件,而这些软件不一定运行在个人电脑上,也可以在手机、平板、智能穿戴设备等上,有时不传输生成HTML或者已经在其他服务器上的文件,但是像前面提到的HTML一样传输经过一定逻辑处理后生成的字符串或者其他各种封装数据。就像需要有一定的标准一样,为了防止混乱和鸡鸭说话,我们需要首先就这些机器需要如何交互达成一定的共识,然后让它们进行通信。人与人之间的交流需要有一种大家都知道的书写方式(比如简体字/繁体字)和一种大家都能听懂的语言(比如普通话/粤语)。为了让这些不同的机器通过网络进行交互,我们需要指定一个协议(如HTTP/HTTPS)和数据封装格式(如HTML/XML)。 Web Server提供的Web Service就是指这种协议+格式的通信系统。然而,Web Service的生态系统与HTML的标准不同。用户可以选择更多的协议和数据封装格式。普通网站访问的HTTP+HTML只是其中之一。对于一些封闭系统中的通信,也可以自己定义一个。使用的协议和格式(例如QQ)。
【深入解析:网址访问过程中的浏览器工作原理】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
我以前也想过这个问题,一直觉得加载网页太快了!
有11位网友表示赞同!
原来访问网页这么复杂啊,还挺费力的。
有14位网友表示赞同!
感觉我的电脑处理速度应该能更快的吧,不然有时候加载网页慢得要命。
有9位网友表示赞同!
希望以后浏览器还能更快更高效,体验更好。
有7位网友表示赞同!
所以说DNS记录很重要吗?我一直觉得它就是个名字翻译工具呢。
有15位网友表示赞同!
这个解释让我感觉我的网络连接其实真的挺复杂的。
有5位网友表示赞同!
我倒是想知道,访问HTTPS网站跟HTTP网站的区别是哪些?
有18位网友表示赞同!
浏览器这些步骤都做了哪些优化吗,我觉得现在加载速度还可以吧。
有19位网友表示赞同!
这篇文章讲解的很详细啊,以前根本没有想过这些细节问题。
有11位网友表示赞同!
我印象中是直接点击网址就能打开网页的呀?!
有13位网友表示赞同!
看来学习计算机网络知识真的很有必要了!
有18位网友表示赞同!
以后有机会自己试试用代理服务器访问网页吧,看看效果怎么样。
有14位网友表示赞同!
我的浏览器有时候莫名其妙就卡顿,是不是因为这些步骤出现问题了?
有19位网友表示赞同!
原来这个过程还是需要那么多的软件配合才能完成呢!
有12位网友表示赞同!
这种讲解方式很容易理解,很适合 layman 阅读。
有8位网友表示赞同!
现在大部分网站都使用HTTPS协议了吧?
有5位网友表示赞同!
浏览器的发展历程我也挺感兴趣的,这篇文章是不是还缺了点内容啊?
有19位网友表示赞同!
感觉访问网页越来越简单了,人们对这些技术了解得越深入。
有19位网友表示赞同!
希望人工智能以后能做更多把计算机网络知识讲明白的事情!
有9位网友表示赞同!
学习完了这篇文章,我好像突然对浏览器有了更深的理解。
有19位网友表示赞同!