作为一名准前端开发工程师,必须要对http基础知识有一定的了解,可是想学习HTTP相关的知识,发现国内只有两本相关的图书,《HTTP权威指南》和《图解http》,所有的书但凡带上权威指南,必将是圣经级别的图书,我在学校图书馆借了一本,600多页的砖头书,由于基础太过薄弱,根本读不下去,于是转向了《图解HTTP》,是本书很薄,只有二百多页,很适合我这样的小白。推荐基础比较薄弱的朋友先从《图解HTTP》看起!废话不多说,准备起飞!
几乎每一位前端工程师在面试的时候都会被问道这样一个问题,在浏览器地址栏输入URL到显示出整个页面,经历了什么?这个问题并没有一个统一的答案,最简单的形容:
1.利用dns进行域名解析,解析成计算机能够识别的ip地址 。
2.进行tcp的三次握手 。
3.建立起tcp连接后,进行http请求 。
4.服务器端相应http请求,浏览器得到html页面 。
5.浏览器解析html页面,发起html页面内的资源请求 。
6.渲染得到的html页面,呈献给用户。
如果觉得理解不了,可以先跳过,等看完全篇文章再回看这个问题,就容易理解很多。
首先要了解两个概念,客户端和服务器,客户端通俗理解就是用户(比如你手机上的浏览器),请求资源的一方,而服务器端就是存储网站信息的主机(比如百度公司的服务器),提供资源相应的一方。而http就是客户端和服务器之间进行交流的一个协议。计算机和网络设备之间进行通信,就必须使用双方都能够理解的信息进行交流,这种为了使双方顺利进行信息的通讯而制定的规范就是协议! 要想学习http,则还要简单了解一下tcp/ip协议,tcp/ip协议是许多协议组成的集合的总称,包括TCP, IP, HTTP, DNS,FTP,UDP,PPPoE,ICMP,SNMP,FDDI等协议,http是tcp/ip协议的一个子集,是tcp/ip协议族的一部分!由于tcp/ip协议族中有很多不同的协议,而这些协议所应用的领域又有很大的不同,所以,对不同领域的协议进行划分就显得很重要了,tcp/ip协议族将这些协议划分为4层,分别是:应用层,传输层,网络层,数据链路层。不同的层次分工也各有不同。
应用层:应用层决定了向用户提供应用服务时通信的活动,包含的协议包括HTTP, DNS(Domain Name System,域名系统),FTP(File Transfer Protocol,文件传输协议)。
传输层:传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。包括TCP(Transmission Control Protocol, 传输控制协议)和UDP( User Data Protocol, 用户数据报协议)。
网络层(又称:网络互联层):网络层用来处理 在网络上流动的数据包。数据包是网络传输的最小数据单位,该层规定了通过怎样的传输路线到达对方计算机,并把数据包传给对方,当与对方计算机之间通过多台计算机或者网络设备进行传输时,网络层的作用就是在多条路中间选择一条传输路线。网络层最主要的就是IP协议(Internet Protocol)。
数据链路层: 用来处理连接网络的硬件部分,包括控制操作系统,硬件的设备驱动,网卡,光纤等肉眼可见的部分,硬件范畴都属于数据链路层。
配图(tcp/ip分层结构图)
在利用tcp/ip协议族通讯的时候,会按分层的顺序走,客户端从上往下,接收端从下往上,以此完成一次通讯!通俗点理解就是,在京东购物下单,发送用户的请求(应用层,http发送请求),仓库打包物品(传输层,tcp将大数据分割成报文段,准确可靠的把信息传递),快递装车,途径各个中转中心,发往全国各地(网络层,ip协议,通过目标地址,选择线路),快递小哥派送物品(数据链路层)。
知道这些显然还不够,与http有关的协议主要有TCP,IP,DNS。
DNS属于应用层,有时候输入域名(给人看的)或者一串数字(给计算机看的)组成的ip地址都能够访问同一个网站,这是因为域名是方便记忆,但是计算机看不懂,计算机只能看懂ip地址,所以DNS就是为了将域名和ip地址进行转换而生的。输入网址后,第一件事就是利用DNS将域名转换为ip地址。
TCP协议属于传输层,将http的大块请求数据进行分解,拆成报文段( segment)为单位的数据包进行管理,这样可以方便传输。tcp有强迫症,将信息告诉他人后,他还不放心,需要再次确认才能够放心,所以tcp传递是靠谱,准确的传递,整个过程就像:
小A:我给你说点事,XXXXXXXXXXXXXXXX,你可别给他人说!收到请回复!(第一次握手)(发送SYN数据包)
小B:好的,收到了。(第二次握手)(回复SYN/ACK数据包)
小A:嗯,我就是确认一下!(第三次握手)(发送ACK数据包)
这就是大名鼎鼎的三次握手,如果中间莫名中断,tcp协议会再次以相同的顺序发送相同的数据包。保证了通信的可靠性。
IP协议属于网络层,主要负责数据传输,把数据包传递给对方,要想传递给对方,则需要知道对方的IP地址或MAC地址,IP地址指明了节点被分配到的地址,而MAC地址是指网卡所属的固定地址,IP地址能够和MAC地址进行配对,IP地址能够更换,而MAC地址是固定不变的!IP间的通讯依赖MAC地址,但是,通信双方在一个局域网内的情况是很少的,所以说大部分的通信都是需要中间的设备进行中转的,根据下一个中转设备的MAC地址才能够搜索下一个中转目标。采用ARP协议(Address Resolution Protocol),解析通信方的ip地址,反查出MAC地址。
未完,待续!