在1990年,伯纳斯.李开发了超文本传输协议(HTTP)、超文本标记语言(HTML)、统一资源标识符(URL)、第一款Web浏览器和服务器,以及第一批网页,这些是万维网(World Wide Web,或Web、WWW、W3)的起源。简单的将,互联网的出现实现了计算机之间的链接,而万维网真正开始为人类构建一个网络世界,从此全球信息的交流和传播有了革命性的变化。
说到万维网的发展,人们比较习惯将其划分为:web1.0、web2.0、web3.0等概念术语,对于真正的用户来讲,可能没有实际的意义,只是,感觉到网络变化实在太快了,也慢慢的影响人们生活中的方方面面。
Web1.0时代的本质是单向的信息分享,两大标志性的产品是门户网站和搜索引擎。通过这些信息门户和搜索引擎,人们获取信息的速度得到了很大的提升。不过,web1.0时代,人们获取的信息都是静态存储、单向输出的,用户只能读,不能写。
Web2.0时代的核心是交互,用户不仅是网站的浏览者,更是内容的制造者。博客、社交网络的开始兴起,网络的内容开始多媒体化,音频、视频、图像等开始在网络中传播,提升人们获取信息的体验。另一方面,全民开始参与的互联网,信息开始爆炸式增长。
Web3.0时代的互联网具有更高的个性化,更好的互动性,更强大的智能化,实现更快捷,更准确的信息服务。移动互联网的发展,让互联网更加深入人们的生活,在这个用户为王的时代,谁能留下用户,谁才可以获取更大的商业价值。而基于互联网技术、大数据技术、人工智能技术、云计算技术的新的商业模式、新的网络媒体,创造了一个又一个的成功案例。
Web应用
通常,Web应用有B/S结构(浏览器端/服务器端)、C/S结构(客户端/服务器端),客户端和浏览器端都是web的客户端应用程序。而web内容都在web服务器端,所有信息都是通过客户端和服务端的请求和响应完成传递的,客户端通过“统一资源标识符”,将请求报文以HTTP协议格式,通过TCP协议(信息的可靠性传递交给TCP协议,HTTP协议无需关心),发送给服务器。因为是TCP协议需要通过三次握手建立连接,建立连接后,服务器端处理客户端的请求,处理完成后将响应结果,以HTTP协议格式返回给客户端,客户端解析报文,将信息展示给最终的用户。
统一资源定位符(URL)是表示从互联网上得到资源的位置,互联网上所有的资源都有一个确定的URL。URL相当于文件名在网络范围的扩展,一般的格式为:
<协议>://<主机>:<端口>/<路径>?<参数>
使用HTTP协议的URL就是:http://<主机>:<端口>/<路径>?<参数>,如:http://www.banzclub.com/technical/lambad-and-funcional-programming.html
1、http是使用的协议;
2、www.banzclub.com是主机,端口是默认的80,可以省略;
3、/technical/lambad-and-funcional-programming.html 就是访问路径。
HTTP的报文包括两类:请求报文和响应报文
请求协议 请求首行:请求方式 url 协议/版本号 请求头:key:value() /r/n/r/n:不可省略的空行 请求体:数据(只有Post请求,才有请求体)
HTTP方法:
GET:从指定的资源请求数据。通过GET请求,URL可以传递参数;GET请求时,URL的长度是受限制,一般为2048个字符。
POST:向指定的资源提交要处理的数据。也可以传递参数,不过参数是在主体中发送的,没有长度限制。
HEAD:与GET请求相同,但只返回HTTP头,不返回文档主体。
还包括PUT、DELETE、OPTIONS等。(不太常用,说明略)
首部(请求头):
通用首部:请求报文和响应报文都会使用的首部
请求首部:客户端向服务端发送请求报文时使用的首部
响应首部:服务端向客户度返回响应报文时使用的首部
实体首部:针对请求报文和响应报文实体部分使用的首部
扩展首部:规范中没有定义的首部
响应协议 响应首行:协议/版本 状态码 响应头:key:value /r/n/r/n:不可省略的空行 响应体:为HTML格式的内容
状态码
1** 消息;2** 成功; 3** 重定向;4** 请求错误;5** 服务器错误;
200 请求已成功,请求所希望的响应头或数据体将随此响应返回
401 当前请求需要用户验证
403 服务器已经理解请求,但是拒绝执行它
404 请求所希望得到的资源未被在服务器上发现
405 请求行中指定的请求方法不能被用于请求相应的资源
500 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器的程序码出错时出现。
响应头(同请求头)
响应体
在响应头中,服务器端会标识响应的媒体类型,MediaType, 互联网媒体类型;也叫做MIME类型。
可以说,HTTP协议是构建Web应用的基础,通过HTTP协议完成从客户端到服务器端一系列信息的交互过程。伴随着Web应用爆发式的发展,支撑Web应用的技术栈也在快速的升级中。
HTTP协议早期并没有正式的标准,客户端向服务器发送请求时,建立TCP连接,服务器向客户端返回响应,响应只能是HTML格式,不能为别的格式,服务器发送完毕,就关闭TCP连接。在HTTP正式标准发布之前的HTTP协议被叫做HTTP/0.9版本。
1996年5月,HTTP/1.0版本正式发布,内容大大增加,首先,任何格式和内容都可以发送,这使得互联网不仅可以传输文字,还能传输图像、视频、二进制文件。其次,增加了请求方法GET、POST、HEAD等;然后,HTTP请求和响应的格式也做了调整,除了数据部分,还包括头信息;其他的新增功能包括状态码、多字符集支持、权限、缓存、内容编码等;不过,HTTP/1.0版本的主要缺点是,每个TCP连接只能发送一个请求,数据发送完毕,连接就关闭,如果还要请求其他资源,就必须再建立新的连接。TCP连接的创建成本比较高,这就使得HTTP/1.0版本的性能比较差,随着Web应用的资源越来越多,性能问题就凸显出来了。
1997年1月,HTTP/1.1版本就发布了,它进一步完善了HTTP协议,而且一直用到了今天,直到现在还是最流行的版本。HTTP/1.1版本最大的变化,就是引入了持久连接,即TCP连接不关闭,可以被多个请求复用,如果客户端和服务器长时间没有活动,再主动关闭连接。这样提升了HTTP协议的效率。这个版本的协议,允许复用TCP连接,但同一个TCP连接里面,所有的数据通信都是按次序进行的,服务器只有处理完一个回应,才会进行下一个回应,这就容易造成请求排队等待处理的情况,为了避免这种情况,服务器端可以增加持久连接数;另外,服务端也可以通过一些手段控制请求流量,减少排队的请求数;还有就是资源的优化,包括文件压缩,大文件分割,静态资源与动态资源分离开,减少请求数据的大小,如图片服务器等。
现在多数浏览器已经支持了HTTP/2.0协议,为了解决HTTP/1.1效率不高的问题,HTTP/2.0主要升级了以下几个方面:
二进制协议,HTTP/1.1版的头信息是文本(ASCII编码),数据体可以是文本,也可以是二进制。HTTP/2.0则是一个彻底的二进制协议,头信息和数据体都是二进制,并且统称为“帧”,这样对于数据的解析将更加高效。
多路复用,HTTP/1.1版本,一个连接一次只能处理一个请求,HTTP/2.0版本允许多个请求和响应消息同时发出,而且之前会打开多个连接,多个连接也会对服务器的缓冲区造成溢出的危险,导致大量的网络阻塞和重发,对资源是一种浪费,HTTP/2.0的多路复用就是为了解决这一弊端。
头信息压缩,HTTP协议每次请求时,请求头都会带有全部信息,而且很多字段都是重复的,这样会浪费带宽,影响速度。HTTP/2.0对这一点进行了优化,引入了头信息压缩,使头信息大小大大减少了。
服务器推送,我们之前都是客户端主动请求,服务端才会返回响应的。现在可以根据客户端请求的资源后,不等待客户端解析工作之后,服务器就直接返回客户端将会请求的某些资源,减少一部分请求的延迟。
随着HTTP协议的发展,Web应用呈现的内容也越来越丰富多彩,这主要是由于Web前端技术的发展。早期Web站点只是简单的HTML,通过浏览器的解析、渲染呈现出来静态的Web页面。由于CSS(Cascading Style Sheets 层叠样式表)、JavaScript、DOM(Document Object Model 用于操作HTML和)的出现,不仅解决不同浏览器的兼容性问题,还让Web页面动起来了,大大提升了用户的体验。
目前Web应用向着前后端分离的模式发展着,前端已经不再是传统Web的前端开发,随着这几年移动应用、VR甚至各种小程序的发展,前端工程师已经独立成一个非常火爆的一个职业方向,而且前端语言也不仅仅是JavaScript、CSS、HTML的传统三剑客了,各种前端语言、框架、技术的发展,一点也不比后端技术简单,前端生态空前的兴盛。
Web前端技术栈
Web服务器端技术分析,见下篇:《Web服务器端技术》
1、《HTTP权威指南》
2、《计算机网络 第七版》
3、《计算机网络 自顶向下方法》
4、《图解HTTP》
5、万维网——百度百科
6、web3.0——百度百科
7、https://www.yicai.com/news/5076027.html
8、https://www.douban.com/note/682483448/
9、http://tool.oschina.net/commons
10、https://www.cnblogs.com/hhks/p/5891392.html