一个程序猿每天打开浏览器,输入网址-查询信息;从未研究过这短短的几秒甚至几百毫秒浏览器到底发生了什么,就好像每天都要拉屎,没想过屎是怎么来的一样。作为一个开发,在这舌尖上的中国,还是要知道屎是怎么来滴。
浏览器
从输入一个地址开始,它可以是这样的 www.baidu.com, 也可以是这样的 https://admin:[email protected]:80/dir/file1.html, 咋一看好像都能看懂,而且还知道这么输入会得到什么,更言之还能断点调试一下;
其实我们只是在入口和出口处玩耍.殊不知中间发生了什么…默念…
URL
转载请注明出处:https://blog.csdn.net/qq_17238449/article/details/102976359
我们先来看下URL,URL有很多种,不止我们常用到的http://(google已经快不支持http协议了,转向https安全协议),还有很多比如"file:" (读取本地文件) , “ftp:”(文件传输协议) , “mailto:”(邮件服务,需要配置正确的电子邮箱)等.
它们拥有同样的格式,即都需要定义一个访问方法(协议http,ftp等).
那么知道这些后浏览器做了什么呢?
浏览器解析URL
(宛如废话的一句解释…)
浏览器首先对URL进行解析,从而生成发送给服务器的请求信息.依据不同的协议访问不同的服务器,这里阐述访问Web服务器的情况.
转载请注明出处:https://blog.csdn.net/qq_17238449/article/details/102976359
解析方式如下:
有时候进入主页的时候文件名经常不写比如http://www.lab.com/dir/,那么解析的时候就会去寻找目录下面的default.html或者index.html具体访问什么要看服务器如何配置.当不写最后一个**/**时,是会先寻找文件夹,再寻找文件名的规则来进行的.
明白了URL,我们来对URL中HTTP进行简单的说明。
HTTP协议
HTTP协议定义了客户端和服务器之间交互的消息内容和步骤,请求中包含了对什么和做什么两个部分;
对什么: 这部分就是URI(统一资源标识符),一般来说,URI的内容是一个存放网页数据的文件名或者是一个CGI程序的文件名.例如/dir/file1.html;不过,URI不仅限于此,也可以直接用"http:"开头的URL来作为URI.换句话就是,这里可以写各种访问目标,而这些访问目标统称为URI.
做什么: 也称为方法.表示需要Web服务器做什么,典型的例子包括读取URI表示的数据/将客户端输入的数据发送给URI表示的程序等.
看到这张图是不是就对之前所解释的做什么有所了解了呢!
收到消息之后,Web服务器会对其中的内容进行解析,通过URI和方法来判断"对什么",“做什么”,并根据这些要求完成工作将结果放入响应消息中.
至此我们了解了HTTP的全貌,之后会一步步往下深入网络到底是怎么连接的…
远方的友人的音信,寄来了温暖的关心和嘱咐,却平添了我深深的别恨离愁。
我愁啊这它M的又结婚了,又得给份子钱?有兴趣可以到我博客逛逛MysticalYcc
咱暂且不管份子钱,咱管管这信。当我们想寄一封信件的时候,我们需要能够帮助我们送信的机构,如果要自己送去那还送信做什么,直接过去把寄信人打一顿就完事了;所以就有了邮局(快递的你先放下…),每个人都可以将信委托给邮局,让邮局帮我们将信件寄出去。我们发送一个网络请求也是,每个应用都可以发送网络请求,同样需要一个能够将消息发送到网络的机构,这个机构由操作系统来完成组建。所以,浏览器解析URL生成HTTP请求后需要委托操作系统将这些消息发送到网络。
当然,邮局也会要求我们填写一个寄信单,这个单子包括了寄信人的地址,寄信人的联系方式,收信人的地址,收信人的联系方式4个重要的信息(还有其他附加信息),填写正确才能将信件成功寄出。操作系统发送消息也是如此,它需要的是收信人的地址【对方的IP地址】,收信人的联系方式【对方的端口号】。发送方的自然也需要,只是两者绑定在一起,开机的那一刻就已经存在内存中了。
在这之前,来了解一下IP地址是啥子。
IP地址
住在有门牌号的房子的大伙都知道(如果没有,请默哀两分钟!),寄发信件的时候需要填写自己和对方的具体地址,而这个地址就是小区的某个房间的门牌号,完整的地址包括了国家,省份市直辖区,县/区,乡镇小区等等。国家与国家之间形成了不同的区域,说中国在哪,一定会有答案,再往下,省市区小区直到门牌号,它就像一个唯一的号牌将这个地址标记出来,让收发邮件甚至找上门要账成为了可能。
IP地址同样是这样的道理。
互联网和公司内部的局域网都是基于TCP/IP的思路来设计的,如上图,就是由一些小的子网(小区甚至楼层之间),通过路由器连接起来。这里的子网可以理解成为用集线器连接起来的几台计算机,将它看作一个单位,称为子网。将子网连接起来,就形成了一个网络。
在网络中所有的设备都会被分配一个地址。就好像是XX号XX室。其中号对应的号码是分配给整个子网的,而室对应的号码是分配给子网中的计算机的,这就是网络中的地址。号对应的号码称为网络号,室对应的号码称为主机号,这个地址的整体称为IP地址。发送者发送的消息首先经过子网中的集线器,转发到距离最近的路由器上。接下来,路由器会根据消息的目的地判断下一个路由去的位置,然后将消息发送到下一个路由器,即消息再次经过子网内的集线器被转发到下一个路由器。前面的过程不断重复,最终消息就被传到了目的地。这个过程就好像你准备好信件由邮局寄出,邮局寄出后会送往下一站,再由下一站判断你的目的地,再往下送一样;宝剑锋从磨砺出,梅花香自苦寒来! 不择手段,总会把你结婚的消息顺利的送到你朋友手中。
那么这个地址到底是怎么组成的呢?
如上图,实际的IP地址是一串32比特的数字,按照1个字节为一组分成4组,分别用十进制表示然后再用圆点隔开。在IP地址的规则中,网络号和主机号连接起来总共是32比特,但这两部分的具体结构是不固定的。在组建网络时,用户可以自行决定他们之间的分配关系,因此,这里还需要另外的附加信息来表示IP地址的内部结构。
这个附加信息就是子网掩码。子网掩码的格式如下图,是一串与IP地址长度相同的32比特数字,左边一半全是1,代表网络号,右边一半全是0,代表主机号。
想要把域名转成IP地址,只要询问最近的DNS服务器就可以了,怎么询问呢?操作系统的Socket库中,就包含了对DNS服务器发送查询消息并解析成IP的解析器;至于它是怎么运作的现在不用关心。只要知道根据域名查询IP地址时,浏览器会使用Socket库中的解析器。
待续
转载请注明出处:https://blog.csdn.net/qq_17238449/article/details/102976359