浅析http

字数 1215阅读 88

这一篇文章并不是纯API 文档.

按照惯例,我们应当先了解什么是http以及它在web 开发中的常见应用场景.
HTTP,按照百度百科的说法其名约:"超文本传输协议",嘿嘿,但是,其实他的原名其实应该是超文本转移协议,具体原因可以点这里

那这个协议有什么用呢?最初,蒂姆.伯纳斯 - 李提出了一种能让远隔两地的研究者们共享知识的设想,这种设想的理念是借助,超文本(Hyper Text),连成可相互参阅的WWW(World Wide Web)万维网.

现今,随着技术的发展在web构建技术方面也衍生出了SGML(Standard Generalized Markup Language,标准通用标记语言)作为页面的文本标记语言HTML(HyperText Markup Language,超文本标记语言),以及作为文档传递协议的HTTP.

这里,再引用一个老生常谈的问题来带入今天的重点,当你在浏览器窗口输入URL并按下回车,浏览器是如何显示出你想要的画面的,理解清楚这个问题,更有利于我们掌握HTTP协议的应用.

既然,HTTP作为一种转移/传输协议,自然在我们信息交换的过程当中充当着信息转换的媒介,当我们在浏览器输入框中输入某个网址 http://ww.xxx.com,从这里开始就代表着我们所使用的就是http协议,当然对应的还有https,以及file协议,这时,域名会被首先发送到DNS服务上,DNS将人们常用的一串数字加字母解析成对应的IP地址,在这个过程中,http协议的职责便是生成针对目标xxx.com的服务器生成HTTP请求报文.

接下来,应用的便是我们熟知的TCP/IP协议族,这个协议族应用的是分层的原理来将数据的传递通过传递方层层封装进行处理,并重新在接收端重新拆分,http协议这时就是处在传递方以及接收端的最顶层,也叫应用层,这一层决定了向用户提供应用服务时通信的活动.

当数据经过TCP层,又称传输层的时候,它会将HTTP请求的报文分割成报文段,并在各个报文上打上标记序号及端口号后,发给网络层. 并在发送给下一阶段的同时采取三次握手策略来确保数据确实被接收端所接收.

到达网络层,这里使用的是Internet Protocol 网际协议,这个协议的作用是把各种数据包传送给对方,并且确实确保IP地址和MAX地址相配对,在这一过程中可以将数据形象的比喻成京东快递在各中转站(MAC地址)间中转,并最终到达Ip地址为我们所想发送的接收端.

当最终达到接收端后,数据便会以相同的方式反向发送回我们的客户端.

这里,还要带入一个细节,http一开始是无状态的协议,即你上一次请求和这一次请求间没有任何联系,举个🌰来说,便是当我登录去买东西,当我跳转到其他页面时网站没有保存我上一个页面的状态,他便以为我已经logout了,所以后来便引入了cookie.

讲了这么多,相信大家对http请求的细节多少有一点了解了吧,那我们再回头说说报文,作为前端开发人员,一定用过console里的Network吧,通常在我们页面显示成功时就相当于完成了一次客户端向服务器端发送请求的过程,点击请求文件时,右测会显示HEADERS、Previews、Response等信息,实际上就是标明了对应这份文件的报文头信息,里面有以客户端为代表的Request以及服务器端返回的Response.

在ECMAScript中,内设了一个XMLHttpRequest对象,它作为Web API的接口,它提供了客户端和服务器之间传输数据的功能,通过new这个构造函数我们可以得一个实例化的对象,readyState 和 Status便是针对这个对象在处理网络请求中所处的阶段以及结果做相应的处理:

    xhr.onreadystatechange = function(){if(xhr.readyState === 0||1||2||3||4 && xhr.status === 200||404||500){//...do somthing.....}}

具体的状态码和阶段信息可以通过阅读文档,来进一步加深了解.

推荐阅读更多精彩内容