细说HTTP笔记1:HTTP的出道故事
1、出道前的那段时期
1989年,那个时候,我们普通人还没怎么接触过电脑,还不能淘宝(因为那会马云还在杭州教书。。),也不能QQ聊天(马化腾98年才创立腾讯),遇到问题了也不可以百度(李彦宏还在北大读书)。那会,互联网属于很少的一部分人。
1990年11月,世界上第一台Web服务器和Web浏览器诞生在CERN(欧洲核子研究组织。。额这个名称确实比较难理解。。核子%>_<%)手上。然而,那会上网也不是通过HTTP的。但是那一年开始,HTTP家族诞生在这个世界上,开始努力,发誓要占领整个世界的网络。
2、HTTP家族
1990年这个时候,HTTP的哥哥HTTP0.9出道,然而没能红起来,并没有被作为标准投入使用。
直到1996年5月,HTTP(1.0)正式出道,并且一炮而红,至今还被广泛使用当中。
1997年1月公布的HTTP(1.1),由于继承了HTTP绝大部分优点,修补了其中不足而成为目前主流的HTTP协议版本。由于没有太大的问题,所以它的版本多年来几乎没有更新。
但是目前HTTP妈妈还是怀孕了,HTTP 2.0正在怀胎十月(制订中)。
3、必备的网络基础TCP/IP
要理解HTTP通信,甚至是网络。所必须知道的一点基础就是TCP/IP。
3.0 IP地址
就如同每个人都有一个独一无二的身份证一样,接入互联网的计算机都有一个唯一标示自己的东东,这就是IP地址,InternetProtocol Address 符合网络协议的地址。
IP地址目前分为两种 IPV4 和 IPV6。
IPV4是 InternetProtocol Version4 互联网协议的第四版本,采用32位二进制来表示一个地址。由于2的32次方是4294967296,最多可以表示42亿台计算机,然而,地球人口已经超过60亿。因此,42亿是即将不够用的,所以出现了IPV6。为什么不是IPV5呢,因为IPV5已经用于一个网络流的测试协议了,所以就轮到了IPV6。 IPV6是16个字节,长度多达128位。
3.1 协议
所谓协议就是规矩、规则。无规矩不成方圆。你和我通过一台计算机进行聊天,我们的计算机软件得先商量好由哪一方发起通信,使用哪种语言(不能你说日语我说国语吧),怎么结束通信等等。这些都得事先制定好,成为文档,然后我们就按照文档来。
这种规则文档,我们就叫协议。
3.2 TCP/IP协议族
你可以想象,现在我们通过网络可以做什么事情?仅仅是用浏览器上网么?不是的。我们可以通过QQ、旺旺聊天,可以通过飞鸽传书在同一个局域网内传文件,我们输入一个网址域名而不是IP地址就可以访问到那个网页了。
而这些事情,都是用不同的协议的。所以网络协议有很多很多。举例如下图:
这些跟互联网相关的协议集合,总该有个名字,于是他们就被先人命名为 TCP/IP协议族。
为什么是TCP/IP协议族,而不是 其他名字协议族,TCP/IP,前者TCP指的是TCP协议,后者IP指的是IP协议,之所以用他们命名,我认为是当时 TCP 和 IP协议出现较早,当时的IT工程师用他们两个实现了网络通信,久而久之,即使后来出现了与TCP并列在网络层的UDP协议,还有其他协议也好,人们已经习惯了TCP/IP的称呼,干脆就把TCP/IP统称为所有网络协议的总称好了。
3.3 TCP/IP 分层
有人可能会想,哎那么麻烦做什么,干嘛不把所有协议都统一起来,整合成一个协议呢?
试想想,如果真的整合成只有一个协议,这个协议好强大, 可以完成很多事情,但是,当我某个地方不太合理需要修改的时候,那么这个协议其他部分也得跟着改动了。牵一发而动全身!!
很麻烦。
所以,我们这么细分,是因为真的需要分层。
当我们把网络通信之间的工作细分为一层层的时候,你会发现,即使我要修改,我只需要修改一层就好了,只要层与层之间的接口方法不变。那么其他层协议是不受影响的。现在我们所需要做的工作就是把层分好,并且把各层之间的接口部分规划好。
分层的好处—— 设计变得相对简单,协议相互之间的牵连少了,开发更自由。
层名 |
作用 |
列举协议 |
应用层 |
决定了向用户提供应用服务时通信的活动 |
FTP,DNS,HTTP |
传输层 |
上层是应用层,顾名思义,用来传输两台计算机之间的数据 |
TCP,UDP |
网络层 |
从一台计算机到另一台计算机,传输路线可能有很多种,网络层就是用来选路的。 |
IP |
链路层 |
以上层都不涉及到硬件,硬件部分交由链路层来处理。包括计算机操作系统和硬件的驱动,网卡,光纤,以及网线等等。 |
|
4、什么是HTTP ?
HTTP 是 网络上进行通信时所使用的协议方案。可以用于很多应用上面,但是最著名和最广泛地应该是用在 web浏览器 和 Web服务器之间的双工通信。
以上解释还是比较专业的,下面按照我的理解来说下:
现在,小白想把一个包裹寄给小敏,怎么办呢?嗯,小白会先打电话让EMS的人来取件,写好要发给谁谁,并且要求有签收短信,然后EMD快递员取完后经过打包包装好,开始上路运输,途中经过很多省市,层层邮局或者中转站,最后终于达到小敏家门口,然后敲门,确认是小敏,签收,然后快递公司EMS就会给小白发一条回复短信:您的快件已经被小敏签收。
同样的,在计算机的世界中,两台计算机要交换东西,也要经历类似的过程。有两个概念要明白下。我们普通用户的电脑,可以称作“客户端”,一些公司的特殊电脑(比一般电脑昂贵,性能好很多)称作“服务器”。服务器好比小敏,我们的电脑(客户端)好比小白。现在我们要上网,访问某个网页。如“http://tech.uc.cn/index.jsp”,操作上我们只需要把这个网址往浏览器上一输入就可以了。实际上,客户端的浏览器进程会先把访问报文包装成一个请求,然后通过一个套接字接口(Socket)传输到硬件网络(如网线,光纤电缆),然后到达服务器的套接字接口(好比小敏家的门口),然后服务器的进程就会收到该请求,进行处理,把处理结果同样的原路返回到客户端,我们的电脑上。于是,我们此时此刻就看到访问的网页被加载成功,所加载的网页内容就是服务器所返回的东西。
说了这么多,其实就是两台机子之间通过网络传递信息嘛,哪有HTTP身影?
是的,且听我娓娓道来。
这传递信息的过程很简单,但是如何构造这些报文呢?这报文的各个字段表示什么意思呢?如果服务器出故障了,应该给客户端返回什么信息好?等等很多细节问题都得一一想清楚。发个快递都必须经历一定的顺序章程,如必须写地址,贵重物品要不要保价等等。
嗯,我们逐渐明白,国有国法家有家规,网络通信必须有个协议来规定好这些通信的细节,这就是应用层协议。应用层协议它会规定好:
- 交换传输的报文的格式,如请求报文和响应报文;
- 各种报文的语法格式,如各个字段表示啥意思;
- 进程何时、如何发送或者响应报文;
嗯,主角粉墨登场啦O(∩_∩)O~。其中应用最为广泛的就是HTTP协议(应用层协议包括HTTP,但是还有其他协议,如FTP,SMTP。)
HTTP协议标准是公布于世界的,只要客户端浏览器程序符合HTTP,它就能访问所有符合HTTP协议的服务器。
一句话概括HTTP:它定义了两台计算机程序网络通信的过程,一个客户端程序和一个服务器程序,分别运行在不同的计算机上,通过交换HTTP报文进行会话。
5、HTTP的合伙兄弟
通过第三点的TCP/IP基础,你可能已经知道了,网络通信这件大事,单靠HTTP一个人是干不成的。明朝朱元璋起义时好歹都请来刘伯温当军师呢,还少不了其他一帮如常遇春等兄弟帮他打天下呢。
要完成网络通信,必备TCP/IP四层协议不可。HTTP只不过是应用层的而已,还差三个下面层的兄弟呢。于是乎,他找来了几个兄弟帮他忙。下面逐一介绍。
5.1 IP地址最好的代言人 —— DNS 协议
当你公司推出新产品,如果找个明星拍广告,一定会让你的产品深入人心。比如提起霸王洗发水,我就想起了——“哦,成龙那个百年润发”。这里,你想想,为什么你输入一个网址就可以访问到一个网站呢?要知道,之前说过,每台计算机只有一个IP地址作为它在互联网中的标识名字。如http://121.14.161.102:80 ,你输入这个网址跟输入 http://www.uc.cn/ 是一样结果的,都是UC的官网,那么哪个好记一些呢?毫无疑问,后者。谁愿意去记住四个数字啊!
更好的比喻就是,我的名字是林小明,身份证是12345678900xxxx..,那么你愿意记住我的身份证号码还是记住我的名字呢?都是代表着我。
当客户端想要访问一个Web端服务器时,需要知道服务器的域名。域名就是服务器的地址。为了让大家更容易记住服务器的地址,人们想出了一个系统用来转换域名与IP地址之间的转换。
这样,人们就只需要记住网站名字就可以了。DNS,Domain Name System 域名系统的简称。
5.2 名儿最猛的兄弟——IP协议
首先说清楚的是,IP地址是IP地址,是由四个数字和三个点组成,是一台计算机接入互联网时的地址,当你的电脑没联网时,它是没有IP地址的。
而IP协议是一种协议,Internet Protocol ,网际协议,只不过用 Internet 来命名而已。你可能觉得这协议也太猛了吧,居然用Internet 这词,岂不是整个Internet都必须用它咯。
噢,还别说,它敢这么取名就是因为几乎所有使用网络的系统都必须用到它,IP协议!!
TCP/IP协议族里后者的IP就是指 IP协议。以他的名字构成总称的一半,它真的很重要!
IP协议的作用就是把来自网络的数据包传递给对方(当然,中间需要经过链路层,他们需要帮忙)。
5.3 最可靠的兄弟 ——TCP协议
在传输层,因为数据可能比较大, 因此必须分割成一个个小的数据包进行管理,这个管理服务,这就是字节流服务。
TCP协议就是一种提供可靠字节流服务的协议,注意一点。可靠!!
TCP这个兄弟很靠谱,对于HTTP兄弟委托下来的东东他每次都会拍胸口保证,“放心东西我一定帮你送到!”
然后,他真的会通过各种手段,如差错控制、拥塞管理等手段想法设法来让数据安全抵达目的地。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。