从浏览器输入网址到显示网站页面之间到底发生了什么?系列(一)

个人博客网站文章地址:http://blog.mclink.xyz/index/article/index/id/26.html

前言: 前阵子在家里的时候,和我哥谈起了http协议,虽然在学校学过谢希仁计算机网络第七版的书,但是书的内容对协议这部分并没有过多的讲解,我只能粗略的说出http协议一些相关的东西,回校后,我买了一本《网络是怎样连接的》,想对网络这块好好研究一下,毕竟是学web的,不能对计算机网络这部分太过于模糊,在这里我准备在读这本书的过程中在博客同步更新我的读书笔记和自己的一些理解,这是一个系列博客,我会尽量在短期内完成。如果没有学过计算机网络,可能对很多专业的名词并不理解,可以进一步查百度或者看书。我会尽量以通俗易懂的语言配合图片进行编写,因为能力不足,本博客只能是对自己加深理解一个方法,不能提供教学任务(错误的地方欢迎指正)。

   首先我们应该理解一下域名的概念,域名地址又称URL(全称是统一资源定位符),一般我们在浏览器的地址栏上打的就是网站的域名加上特定文件的目录,如百度的网址就是:

                         

    当然,这是个最为简单的例子了,一般来说我们在浏览器使用的网址协议主要是http(https),又称超文本传送协议,当然我们浏览器使用的协议当然不止这个,还有FTP协议(文件传输协议),但是这里重点先说http协议,这时候有人会说我的浏览器怎么是https,在这里我可以简单说https就是安全的http协议,就是在http协议的基础上加上了SSL层,实际上chrome浏览器已经把非HTTPS开头的网址默认提示为不安全了这个如果要了解的话建议去百度自行了解,这里并不是现在的重点,有些书可能会说网址都是以协议开头的,这样说其实并不严谨,因为当你访问本机的资静态源时,实际上开头的是 file://,很明显它是不需要连网的,而且并不是一种协议,所以准确来说,网址的开头应该理解成访问方法开头的。

    然后是万维网,它并不是一种协议,只是web服务器上的一种命名,实际上是web的提出者最早开发的浏览器兼HTML编辑器的名字,然后是域名,学过网站开发的都知道,域名是可以个人购买的,一般都是xxxxx.com,xxxxxx.cn.xxxxx.xyz等等,价格也不同,最广泛的是.com结尾的,我们可以在阿里云或者腾讯云等进行域名的购买,网络上没有对服务器搭建的相关视频,反正我当时是搜不到,然后鼓弄了挺久的,才购买了域名和云服务器,成功让自己的网站让别人通过我买的域名进行访问,这个如果有人需要知道我也可以简单写一个博客来说明如何让自己本机写的小网站在浏览器中让别人进行访问,当然这是题外话了,一般的域名可没有上面那个百度那么简单,不过了解后也不会觉得难,实际上跟我们访问文件的目录一样的,一般我们会在域名后面加上特定的目录名称,一般的服务器像Apache什么的,我们网站的根目录就是WWW目录,一般来说我们在上面的域名上面加上特定的目录名就可以进行相应资源文件的访问,假设我在百度根目录中新建了一个index文件夹,然后又在里面新建了一个index.html文件。那么如果访问这个文件呢?

   很简单,你只要输入https://www.baidu.com/index/index.html  就可以对这个文件进行访问了,对一般没有框架的都是这么用相对于根目录的绝对地址进行访问的,但是如果你设置了静态路由,那就有不同的访问的方式,但是在这里我们先不考虑,而且一般来说,我们如果想访问某个域名的首页,一般都是在根目录下的index.html或者default.htm,我们可以只输入https://www.baidu.com/这样访问。这样也是对的,甚至只写https://www.baidu.com都可以,讲到这里,域名你应该大致熟悉了,接下来我就说说浏览器是怎么与web服务器进行通信的。

     一般来说,我们通过浏览器来访问特定的资源,就肯定需要进行请求啦,也就是生成HTTP请求消息,这是通信的第一步,http协议定义了客户端和服务器之间交互的消息内容和步骤。协议顾名思义,就是大家一起讲好的规则啦,网络世界那么大,如果不定规则,各说各话,谁知道你在讲什么,请求消息中包含的内容有两个,“对什么”和‘进行怎样的操作’,其中‘对什么’的部分称为URI,也就是一个存放网页数据的文件或者CGI程序的文件名,也可以是使用"http:"开头的URL来作为URI,换句话来说就是,这里可以写各种访问目标,而这些访问目标统称为URI.

  然后是“进行怎样的操作”,这部分也称为方法,一般的方法总共有八种,分别是:

(1)GET  (2)POST (3)HEAD (4)OPTIONS (5)PUT (6)DELETE (7)TRACE (8)CONNECT 

不过最常用只有GET和POST方法啦,get方法通俗来说就是我们地址栏中在URL后面加上?id=3&&num=4这种能在地址栏看到参数的就是属于GET方法,这种方法很明显不是很安全,总不能让别人看到你的信息,所以一般我们使用表单提交信息时用的都是POST方法,不过一些无所谓的信息,使用get方法也是可以的,不过get能携带的数据包括URL只有255字节,一般来说我们写网站的时候如果不是表单但是想在超链接上加上一些简单的参数传输过去的话使用get方法也是可以的,当然这还要视情况而定,一般能用POST就是用POST方法把,不吃亏,使用POST传输的数据一般都是一个以一个关联数组的形式来传输,索引就是输入框的name属性的值,例如在PHP中,就是使用$_POST['name']来进行获取name属性为name的值的输入框数组,讲了那么多基础的东西,现在开始敲黑板了,该说说请求消息的结构了。

  一般的请求消息的结构是:

                                       


   请求行包含的内容十分明显,通过请求行我们就可以简单知道请求的大致内容,消息头是用于表示请求的附加信息。行数根据具体情况变化。消息体包含客户端想服务器发送的数据,例如使用post方法向web服务器发送的网页表单数据。

 尽管通过第一行我们就可以大致知道请求内容,但是实际上我们还需要把日期,客户端支持的数据类型,语言,压缩格式,客户端和服务器的软件名称和版本,数据有效期和最后更新时间等。这个都是非常细节的信息。所以,http协议的具体内容是非常多的,如果想要进一步读懂这个协议,可以买本书仔细研究一下。

响应消息的和请求消息很像,在这里我就不特地作图了,他们唯一的差别在于请求行变成了状态行。状态行的大致结构为:

<HTTP版本><空格><状态码><空格><响应短语>

不过响应消息的消息体是包含服务器向客户端发送的数据,例如从文件中读取的数据或者CGI应用程序输出的数据等。消息体的内容作为二进制数据来处理。

所谓的响应短语就是用来解释状态码的短语。状态码大致有以下几种类型:

1xx  信息          接收到请求,继续处理
2xx  成功          操作成功地收到,理解和接受
3xx  重定向         为了完成请求,必须采取进一步措施
4xx  客户端错误     请求的语法有错误或不能被满足
5xx  服务器错误     服务器无法完成明显有效的请求

200  服务器成功返回网页
301/302 永久/临时重定向

304 -未修改

这是我以前学http协议时简单留下的笔记。而且http协议我们并不局限于使用浏览器进行发送,也可以使用远程终端协议(Telnet)来发送,具体的步骤是:

首先打开服务器,然后在打开命令窗口,输入telenet localhost 80
此时如果显示没有该命令,则在控制面板的程序卸载那里点击打开window功能,勾选Telnet客户端并确定


然后再输入Telnet localhost(这里可以写本机的IP地址) 80
然后再打开回显功能,即直接按 Ctrl+】 然后enter ,就能开始输入


例如:GET /test.php HTTP/1.1
Host:localhost

再按两次enter。

没有尝试过的同学可以进行尝试,像我之前写java聊天室课设的时候,在没有写客户端的情况下就使用了telnet客户端进行服务器端的调试连接。这个应该学java的同学比较了解。

我们也可以使用chrome浏览器的开发者工具进行消息的查看,例如我输入了百度的首页地址,然后按F12进入调式模式,按确定进去,再点击network,继续选择特定的资源就可以查看消息了,


这个对学网页开发的同学一点都不陌生,因为一般我们在写网站的时候基本都是靠它来查看错误,

    大多数情况下,因为一条请求消息只有一个URI,而且一个请求消息便会对应一条响应消息,正常情况下,我们网页请求的资源并不止只有文字,还有图片等资源,假设有一个网页有两张图片,那么实际上浏览器需要发送几条请求呢?

  答案很简单,当然是三个请求啦,有两个是图片的请求消息,还有一个是网页的请求消息,如果一个网页是纯文字的,那么浏览器收到响应消息后,就会将数据提取出来并显示到屏幕上,这时候基本就完成了之间的交互,但是如果网页中还有图片等资源,那么就没那么简单了,

  当网页中包含图片时,会在网页中的相应位置嵌入表示图片文件的标签的控制信息。浏览器会在显示文字时搜索相应的标签,当遇到图片相应的标签时,会在屏幕上留下用来显示图片的空间,然后再次访问Web服务器,按照标签中指定的文件名向web服务器请求相应的图片并显示在预留的空间中。当然这些东西主要是非缓存的情况下实现,如果浏览器有缓存,就可以直接提取图片使用了。没必要再去重新申请图片资源。

 关于使用http协议的请求消息的发送和响应我就大致说到这了,下一篇讲DNS服务器解析域名转换成ip地址。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MClink

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值