当你打开网页的时候,世界都发生了什么(1)

你有没有好奇过,当你试图打开一个网页的时候,这个世界上都发生了一些什么事情?会不会因为你手气键落,产生了蝴蝶效应,指尖的风拂起千年后你梦中的那个女孩的刘海?咳,也不是没有可能。今天我就来告诉你会发生什么事情,你可以沏一壶茶,坐在躺椅上,慢慢品味……

时光倒流到你刚才打开这个页面的那一瞬间…

Hi!大家好,我的名字叫做浏览器,我还有个很酷的英文名字叫做Browser!很高兴认识你!


什么,你想上百度?没问题!请你告诉我一下,百度的地址是什么?或者说,百度的URL是什么?

对了,给你介绍一下URL,全称Unified Resource Locator,中文名为统一资源定位符,也就是我们俗称的网址。它就像互联网上的门牌一样,而浏览器就好像的士司机。你只要告诉浏览器你想要看的网页的URL,他就会把你载到那里啦!


嗯,百度的地址是http://baidu.com是吧,好嘞!我现在就开始帮你去把这个网页给请过来。

首先,我先要找到这个网页的家在哪里。网页的家有一个名字叫做服务器,它的英文名叫做Server。服务器本身其实也是一台电脑,跟你家中的电脑其实是非常相似的。只不过相比起来,服务器性能会比普通的电脑的性能来得强劲,因为它需要服务成千上万个人!


那么这么多的服务器,我怎么找到百度所在的那个服务器呢?就靠你刚才告诉我的URL了!URL只是服务器地址的一个比较好听的名字而已,我没有办法直接通过这个地址找到服务器。其实啊,在服务器的世界里面,他们还有一种更精确的地址表达方式,叫做IP地址。

插一嘴:IP地址是什么,它是怎么工作的,恐怕可以写好几本书了。简单地说,IP地址就是形同192.168.0.1这种形式的数字和英文句号的组合。你可以把它当做相对URL来讲更加准确的地址。

我找到IP地址的方式其实很简单,我只要请操作系统(OS, Operating System)帮忙就好了。所谓的操作系统,就是类似Windows、Mac OS一样的软件,你能够在它们上面安装各种各样的软件。其中Mac OS是苹果电脑专用的操作系统。


这个从URL到IP地址的过程叫做DNS查找,即DNS Lookup。天啊,又一个新名词!没关系,你不需要记住这个名词。你所需要知道的是,这里看似操作系统独自很快地完成了这个过程,但是其实它为此所做的事情相当复杂。我们今后将有专门的文章用来介绍这一过程。

建立连接和发送请求

已经顺利拿到了服务器的IP地址,接下来我就要向他要东西啦!首先我希望它把baidu.com对应的网页传送给我。我们之间传输信息的方式比较特殊,不需要我坐地铁去找它然后搬回来,而是我会跟服务器建立一个连接

连接,英文名叫做Connection。实际上,它就像开辟了一个专用的通道,供我们互相之间传递信息。


接下来,我就会通过这个专用通道,向服务器发起一个请求(Request)。在这个请求里面,我会像服务器阐明我想要的资源是什么,例如在这里,我想要的资源就是百度的首页。

那么具体这个资源的位置我是怎么告诉服务器的呢?还得回到刚才的URL来说!


一个URL一般由六个部分组成,这里我们只介绍主机名(服务器名)和资源位置(或者说是资源路径)。一个服务器上可以有很多的资源,对应着不同的页面或者文件,例如http://xxx.com/login可以是某网站的登录页面,http://xxx.com/register则可以是某网站的注册页面。这里的/login/register就代表了两个不同的资源(这里是页面)。/是比较特殊的资源路径,叫做“根路径”,通常就是网站的首页了。其实,这里的原理就和我们电脑上的文件夹是一模一样的。

在知道了需要的资源的位置之后,我就会给服务器发送一个请求。这个请求实际上就是一系列的英文字符,就像一篇文章一样。

1234
GET / HTTP/1.1User-Agent: curl/7.37.1Host: baidu.comAccept: */*

怎么样,我也是很有文采的吧!在这里,你需要知道的是,GET /即代表,我现在要从服务器上拿下来一个资源,这个资源的位置是/。另外,Host: baidu.com代表我要请求的主机名叫做baidu.com。Host这个英文单词就是有主机的意思!

好了,请求已经准备完毕了,我现在就通过之前建立的连接将这个请求直接送给服务器!

获得响应

当服务器获得请求之后,经过一系列的工作(可能是类似翻箱倒柜找材料之类的吧),最后将要送还给我的材料,包括网页的代码,全部打包起来形成一个响应(Response),通过连接返回给我。

响应是和请求对应的,一个请求对应一个响应。这就好像问问题一样,一问一答。所以,响应本身其实也就是一系列的英文字符,就像这样:(下面的响应是被简化的版本)

123456789101112131415
HTTP/1.1 200 OKDate: Mon, 31 Aug 2015 03:06:34 GMTServer: ApacheCache-Control: max-age=86400Expires: Tue, 01 Sep 2015 03:06:34 GMTLast-Modified: Tue, 12 Jan 2010 13:48:00 GMTETag: "51-4b4c7d90"Accept-Ranges: bytesContent-Length: 81Connection: Keep-AliveContent-Type: text/html

<html>    .... 此处省略N多行</html>

你可以注意到,响应分为两个部分。在13行之上的部分称作响应头(Response Head),下面的部分称作响应主体(Response Body)。在这里,响应主体就是网页的代码了。


好了,到目前为止,我已经拿到了网页的代码。

等等…啥是代码?

好问题!

网页本身其实是由一系列的英文字符编写成的,这些英文字符称作“代码”(Code)。这些英文字符和普通的英文文章看起来差不多,但是它们都是用一种我(浏览器)可以看得懂的格式写成的。我通过阅读这些英文字符,理解它,然后按照它的意思将你想要看的页面渲染出来。

别急,关于这些,我们在接下来的文章中慢慢道来。

原文:http://blog.leapoahead.com/2015/08/30/what-happens-when-you-open-a-webpage/

时间: 2025-01-20 18:32:06

当你打开网页的时候,世界都发生了什么(1)的相关文章

如何让IE每次打开网页不需要刷新都是最新的内容

  打开IE的'Internet选项",单击中间位置的"浏览历史记录"的设置按钮,在弹出的临时文件窗口,将"检查所存网页的较新版本"选项设置为"每次访问网页时",在单击"确定". 我们在重新打开IE浏览器,这样每次打开网页就是显示最新内容了.         注 :更多精彩教程请关注三联电脑教程栏目

android-Android 客户端中的webview怎么实现把网页中所有链接都在客户端中打开显示

问题描述 Android 客户端中的webview怎么实现把网页中所有链接都在客户端中打开显示 如题 点击按钮打开一个webview 在这个网页中有其他的页面的超链接 怎么实现点击其他页面的超链接 都在本webview中显示. 解决方案 只要实现以下接口就可以让webView内的超链接在本应用内处理. webview.setWebViewClient( new WebViewClient() { public boolean shouldOverrideUrlLoading( WebView v

如何做一个 1人 发一个通知,打开网页的人都可以收到通知

问题描述 要求做一个传递紧急事情的功能,一个人在网页上发通知,所有打开网页的人都能收到通知,通知最好是那种弹窗警告之类的,有没有相关的教程推荐一下,非常感谢!!! 解决方案 解决方案二:现在可以使用websocket,老方式是靠页面js轮询解决方案三:这个难道不是SignalR做的事吗?解决方案四:参考这个SignalR:解决方案五:signalR网上搜一下就知道了.解决方案六:3楼的好牛呀,就学你的样式解决方案七:牛b,顶一个解决方案八:引用3楼insus的回复: 参考这个SignalR: 不

Win8使用IE浏览器打开网页总是未响应怎么办

  使用Win8系统久了,总会出现一些问题.最近有用户反馈称使用IE浏览器打开网页时,加载了很久都没有显示,打开资源管理器显示浏览器未响应,这该怎么办呢? 方法如下: 1.打开IE浏览器,点击右上角的工具(齿轮状)--Internet选项; 2.在打开的Internet选项设置窗口中,切换至"高级"项,在设置下面找到"加速的图形",然后取消勾选"使用软件呈现而不是用GPU呈现",点击应用并确定; 3.之后重启浏览器即可.

Win7系统IE浏览器无法打开网页怎么办

  IE是windows操作系统自带的浏览器,虽然大部分用户比较习惯使用第三方浏览器,但有时候也需要在IE浏览器中访问某些网站,但有用户在ghost win7系统中使用IE浏览器时出现无法打开网页的问题,这给我们访问网站带来一定麻烦.出现这种现象有很多原因,除了网络是否正常和病毒感染之外,我们可以试试以下的快速修复方法. 解决方法/步骤: 1.打开win7纯净版64位IE浏览器,然后点击里面的"工具--Internet选项". 2.在打开的Internet选项里面,直接将其切换到&qu

win7电脑IE浏览器打开网页慢怎么办?

  在使用win7 64位旗舰版的过程中,除开应用程序之外,似乎浏览器就是咱们使用最多的一个功能了,而IE浏览器则是咱们win7旗舰版电脑中自带的浏览器,可以说是Windows系统自带的浏览器,经过这么多年的使用,也成为大家最为青睐的浏览器之一,使用的用户自然是不在少数的.但是最近,却有一位使用win7旗舰版电脑的用户咨询说,自己的win7旗舰版电脑IE浏览器打开网页的速度很慢,那么这是什么原因造成的呢? 第一种情况:网速问题. 大家可以检测一下,是单独的浏览器打开网页速度慢,还是整个电脑的运行

win7系统浏览器打开网页出现乱码的解决方法

浏览器的是操作电脑必备工具,平常会在浏览器中上网.查询资料和浏览网站等等,但是在使用过程中难免会遇到一些故障问题,比如在win7系统浏览网页时出现乱该怎么办呢?(如下图所示)网页出现乱码给我们浏览带来障碍,而打开网页显示乱码主要是网页编码设置问题,我们可以按照以下的方式来设置解决. 1.打开网页后,在网页空白处鼠标右键菜单; 2.然后选择"编码"选项,在编码窗口中点击选择"自动检测"选项; 3.切换到"简体中文"选项(如下图所示),最后重启浏览器

html js css-html 浏览器打开不了 ie firfox都试过

问题描述 html 浏览器打开不了 ie firfox都试过 初学,浏览器打不开文本写的html,求教,????????????????? 解决方案 看看语法有没有什么问题!! 解决方案二: Firefox Ctrl+Shift+K 在地址栏输入你的网页地址 看下控制台有什么错误 解决方案三: 你写html代码有问题浏览器无法解析,和你用记事本或者其他编辑器没关系 解决方案四: 按F12看看代码--

url-根据经纬度拼接URL 发给对方 打开网页地图 定位到我的经纬度所在的地方

问题描述 根据经纬度拼接URL 发给对方 打开网页地图 定位到我的经纬度所在的地方 根据经纬度拼接URL 发给对方 打开网页地图 定位到我的经纬度所在的地方 解决方案 你的看对方网页是否支持参数传递了,支持看经纬度参数名称是什么,数据格式是怎么样的 如果不支持无解.. 解决方案二: 这个问题,要看对方提供什么样的接口.不同的地图.相同的地图不同的方案网站,格式都是不一样的. 通过 URL 发给对方,是通过 HTTP 协议了.HTTP 地址就是一字符串,其格式基本上可以任意设定,所以只能按接口协议