网络之http
HTTP诞生于1989年,位于OSI体系的应用层。中文名为超文本传输协议,但是更严谨的译名应当是超文本转移协议。和HTML,URI
并称为web三大基石。
今天你所用的软件,如ERP,OA,司库,RPA,新闻网页,公司后台,手机应用,大多都是基于HTTP协议
的web应用。当然其中也有一些软件,实现了私有协议。
关于协议,百度百科是这样解释的:意思是共同计议,协商;经过谈判、协商而制定的共同承认、共同遵守
的文件。 也就是说双方共同遵守的规则。只有双方同时遵守,才能进行沟通和通信。
web再往上就是www,这一提议是致力于全世界的研究者们进行知识共享。 中文名是万维网 英文名是
world Wide Web 意思就是全世界范围内的web应用
web技术是Tim Berners-Lee教授在1980年提出的一个设想,主要包括三个技术,分别是HTML、URI、
HTTP。即使到今天,Web模型也没有太大的变化。
也就是说,只要你用了HTTP,HTML和URI你就是一个web应用,不管这个范围是局域网,城域网,还是广
域网。
在互联网中,除了web应用,还有其它的,比如邮件应用和FTP文件传输应用。每一个应用都用到了一个或多个协议。
URI: 叫做统一资源标识符,用来唯一的标识一个资源。其格式如下:
可能很多人都对URI理解不是很深,上图是一个绝对URI的格式,包括协议,登录信息,地址,端口,路
径,查询字符串,片段标识符。这些东西在工作中,都是可以用到的。
在git产品中,可以使用登录信息认证来完成shell自动化拉取代码。
片段标识符,则可以用来跳转同一个网页中的不同位置,也就是类似于HTML中的锚点的作用
查询字符串,我想平时我们都叫他为路径参数。
协议方案名也是多变了,它可以是http: 也可以是data: 也可以是javascript:等等
其它的组成部分我们平时就比较多见了。
HTML: 中文名为超文本标记语言,用来标记数据 (从一开始只能有文字到有颜色的文字,到段落,图片,视频等等)
在互联网中,有一个不得不提的就是TCP/IP协议族,他们并不是单独的TCP和IP协议,而是指一整套体
系。 不管是个人计算机还是手机设备,只要支持TCP/IP,数据就能够从世界上任意一端传输到另外一端,距
离不再是问题。但是在网络上传输的数据,只能被机器理解,普通人无法理解字节流的意思,为了让用户理
解,就需要翻译这些字节流。双方要通信就必须有相同的翻译方式,遵循同一种规则,才可以进行交流。这个
规则可以使用现有的,也可以自己定制。自己定制耗时耗力,又无法得到通用,功能也不一定有http
全,http也是因其简单易用功能全获得了快速的发展。
在http协议中,规定了通信了双方 C/S 即客户端,服务端。
客户端根据http协议发出请求,服务端经过处理后必须返回一个响应,哪怕是拒绝的响应,也要告诉客户
端,响应的内容就是我拒绝响应。http协议使用URI来定位资源,如果你知道一个资源的URI,在浏览器中
的地址栏中,输入地址即可请求资源,服务器收到后,必然会回应你,如果一切正常的话,你将收到一个
http响应,一般的资源都会放到响应体中,比如超文本。HTML是超文本标记语言,是用来描述页面的语言,
起初只能描述文字,后来经过发展,可以描述颜色,图片,视频。但是,普通用户是看不明白HTML文件的,
需要被浏览器解析,才能看到最终的页面。
一个大致的流程,我想要浏览一个网页,在浏览器地址栏输入一个URI,浏览器使用相应的协议(不只有
http,也有可能是别的,这里使用http),根据你的URI和本地的信息(如浏览器的类型,版本,操作系统
类型,可解析的数据类型等等)生成请求首部。发生请求后,会由服务器接收到,响应给你一个HTML页面。
浏览器会负责把这些解析成响应的信息,纯html文件,我们是看的很难受的,需要浏览器来将它解析成文
字,颜色,图片等等。如果你对其中的某个链接(URI)比较感兴趣,当你用鼠标点击该链接后,浏览器又会
重复上述步骤,组装请求,发出请求并且解析页面,展示给用户查看。
学习http的本质 就是学习其协议格式,头部构成,请求方式
对于请求来说: 就是 请求方法,请求主机地址,请求路由,请求参数,请求首部字段,请求体, 协议版本
对于响应来说: 响应状态码,响应字段, 响应首部字段,响应体。。协议版本
最终想要达成的目的就是:
可以通过对请求的方法地址,路由,参数,片段,首部字段的调整,较为熟练的使用http发送请求,使
用其特性,比如8种请求方式,请求不同的服务器和不同的文件路由, 发送不同的参数进行查询等操作,调整
首部字段来告诉服务器,我要干什么,能理解什么数据类型,是否使用压缩,能理解什么语言,可接受什么数
据,我是谁(使用cookie或其他验证方式),是否使用缓存,取何时的数据,是否允许跨域运行js脚本,是
否保持链接等等http的功能特性。出了问题可以通过专业知识迅速定位问题,且快速修复。如果你是一个善
于思考和总结的人,甚至可以在http上创新,解决其缺陷,发现其新的用户,相信很多人都会这样的。
如果想要了解这些特性,可以看一些专业的书籍:如《图解http》或者直接看请求评论文档rfc:https://www.ietf.org/rfc/rfc1945.txt
知道这些以后,再去学一些web框架的时候,就可以大致的知道其中的请求和响应对象大致有哪些功能,且
出了问题,可以很快速的定位。
本文乃是牛刀小试,作者还是很菜的,哎。不知道啥时候可以成为独当一面的人,以后的一段时间里会以计算机网络为主题,进行写作,如果有错误希望指出。相信可以提升自己成为一个严谨的人。毕竟做学问是容不得一点马虎的。
|