前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >应用层协议之Web应用与HTTP协议

应用层协议之Web应用与HTTP协议

作者头像
搬砖俱乐部
发布2019-06-15 18:07:23
1.2K0
发布2019-06-15 18:07:23
举报
文章被收录于专栏:BanzClub

在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等。(不太常用,说明略)

首部(请求头)

通用首部:请求报文和响应报文都会使用的首部

  • Connection 客户端(浏览器)想要优先使用的连接类型。普通模式时,每次请求需要重新建立连接,当使用Connection: keep-alive时,使客户端和服务端的连接持续有效,keep-alive机制避免重新建立连接,也叫HTTP长连接。
  • Cache-Control 用来指定当前的请求/回复中的,是否使用缓存机制
  • Date 报文的时间
  • Upgrade 要求服务器升级到一个高版本协议

请求首部:客户端向服务端发送请求报文时使用的首部

  • Host 请求资源所在服务器
  • Accept 可接受的响应内容类型
  • Accept-Charset 可接受的字符集
  • Accept-Encoding 可接受的响应内容的编码方式
  • Accept-Language 可接受的响应的语言列表
  • User-Agent 浏览器的身份标识字符串
  • Referer 表示浏览器所访问的前一个页面,可以认为是之前访问页面的链接将浏览器带到了当前页面
  • Cookie 由之前服务器通过Set-Cookie设置的一个HTTP协议Cookie
  • Authorization 用于表示HTTP协议中需要认证资源的认证信息。如,JWT鉴权通过Authorization传递token
  • Origin 发起一个针对跨域资源共享的请求(该请求要求服务器在响应中加入一个Access-Control-Allow-Origin的消息头,表示访问控制所允许的来源)

响应首部:服务端向客户度返回响应报文时使用的首部

  • Location 用于重定向
  • Retry-After 如果某个实体临时不可用,那么此协议头用于告知客户端稍后重试
  • Server 服务器的名称
  • ETag 对于某个资源的某个特定版本的一个标识符,通常是一个消息散列,用于优化网站性能使用
  • Set-Cookie 设置和页面关联的Cookie
  • Age 响应对象在代理缓存中存在的时间,以秒为单位
  • Access-Control-Allow-Origin 指定哪些网站可以跨域源资源共享

实体首部:针对请求报文和响应报文实体部分使用的首部

  • Allow 对某网络资源的有效的请求行为,不允许则返回405
  • Content-Encoding 响应资源所使用的编码类型
  • Content-Language 响应内容所使用的语言
  • Content-Length 响应消息体的长度,用8进制字节表示
  • Content-Type 当前内容的MIME类型
  • Expires 响应的过期时间
  • Last-Modified 文档的最后改动时间

扩展首部:规范中没有定义的首部

响应协议 响应首行:协议/版本 状态码 响应头:key:value /r/n/r/n:不可省略的空行 响应体:为HTML格式的内容

状态码

1** 消息;2** 成功; 3** 重定向;4** 请求错误;5** 服务器错误;

200 请求已成功,请求所希望的响应头或数据体将随此响应返回

401 当前请求需要用户验证

403 服务器已经理解请求,但是拒绝执行它

404 请求所希望得到的资源未被在服务器上发现

405 请求行中指定的请求方法不能被用于请求相应的资源

500 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器的程序码出错时出现。

响应头(同请求头)

响应体

在响应头中,服务器端会标识响应的媒体类型,MediaType, 互联网媒体类型;也叫做MIME类型。

  • text/html HTML格式
  • text/plain 纯文本格式
  • text/xml XML格式
  • image/gif gif图片格式
  • image/jpeg jpg图片格式
  • image/png png图片格式
  • application/json json格式
  • application/pdf pdf格式
  • application/octet-stream 二进制流数据(如常见的文件下载)
  • application/x-www-form-urlencoded 表单格式
  • multipart/form-data 包含附件的表单格式

可以说,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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-02-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 BanzClub 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档