介绍
在因特网出现的开始,主要用途是科研,到了20世纪90年代,万维网登上了舞台。
万维网WWW(World Wide Web)是一个大规模的、联机式的信息储藏所/资料空间,是无数个网络站点和网页的集合
人们可以在Web上发布信息,可以进行交互,越来越多的Web站点存储着海量的信息,吸引着更多的人前来。
Web的应用层协议是超文本传输协议HTTP(HyperText Transfer Protocol)
HTTP协议由两部分程序实现:一个客户机程序和一个服务器程序,运行在不同的端系统中,通过交换HTTP报文进行对话,HTTP协议规定了这些报文的格式以及如何进行报文交换。
web页面
web页面是由对象构成的,对象就是文件,如Html文件、图片文件等。
web页面通常含有一个HTML文本对象,在基本HTML文件中,是通过对象的URL地址对其他对象进行引用:
- URL地址组成:存放对象的服务器主机名和对象的路径名
- 如
https://www.xczll.cn/image/example.jpg
中的www.xczll.cn
就是主机名,/image/example.jpg
就是路径名。
HTTP请求
当用户请求一个web页面时,浏览器向服务器发出对该页面中所包含对象的HTTP请求。
HTTP使用TCP(而不是UDP)作为它的运输层协议。
- 客户机发起TCP连接,连接建立后,浏览器和服务器进程就可以通过套接字接口访问TCP
服务器向客户机发送文件时,不会存储任何关于该客户机的状态信息,即时客户机再次请求相同文件,服务器仍然会发送文件。 因此说HTTP是一个无状态协议
非持久连接与持久连接
当存在多个请求时,如果多个请求分别使用多个TCP连接,就称为使用非持久连接。 如果多个请求使用同一个TCP连接,就称为使用持久连接。
TCP三次握手:
- 客户机向服务器发送一个小TCP报文段
- 服务器用一个小TCP报文段做出确认和响应
- 客户机向服务器返回确认
客户机发出请求:
- 客户机向服务器发送一个小TCP报文段
- 服务器用一个小TCP报文段做出确认和响应
- 客户机向服务器返回确认并且附加了一个HTTP请求报文
- 服务器返回文件
以客户机发送请求到接收到回应,为一个RTT时延,因此一个全新的HTTP请求报文会消耗2个RTT时延
每一个TCP连接,客户机与服务器都需要分配空间资源,对于非持久连接的方式会给服务器带来严重的负担。
在持久连接情况下,HTTP默认采用流水线方式,将多个请求一个接一个的发出,而不需要等待未决请求的回答,一般来说,一个连接经过一定时间间隔未被使用,HTTP服务器就关闭该连接。
HTTP报文格式
HTTP请求报文
这是一个典型的HTTP请求报文,可以看到:
- 报文是用普通的ASCII文本书写
- 共5行,每一行以换行符结束
- 第一行叫做请求行
- 请求行有3个字段:方法字段、URL字段、HTTP协议版本字段
- 请求方法:Get、Post、Put、Head、Delete等
- /somedir/page.html就是请求对象的URL地址
- 后继的行叫做首部行
Host:www.xczll.cn
指明了目标所在的主机- Connection: close 告诉服务器在发送完被请求的对象后,就关闭连接
- User-agent 用来定义用户代理,即发出请求的浏览器类型
- Accept-language:表示用户想得到该对象的语法版本
- 第一行叫做请求行
请求报文通用格式:
主要组成:请求行、消息头部、空行、请求正文
常见请求方法:
- Get
- 最为常见的请求方式
- 请求参数和对应的值附加在URL后面,利用一个问号(“?”)代表URL的结尾与请求参数的开始
- 传递参数长度受限制
- 并且参数直接在地址栏中,不适合传送私密数据
- 要求服务器将URL定位的资源放在响应报文的数据部分,回送给客户端。
- Post
- 允许客户端给服务器提供信息较多
- 请求参数封装在Http请求数据中,以名称/值的方式出现,不会显现在URL中、
- Head
- 类似Get
- 只不过服务端接受到HEAD请求后只返回响应头,而不会发送响应内容。
- 对于查看页面状态十分高效
- Put
- 从客户端向服务器传送的数据取代指定的文档的内容。
- Delete
- 请求服务器删除指定的页面。
HTTP响应报文
响应报文也由四个部分组成:响应行、响应头、空行、响应体
- 响应行组成:服务器HTTP协议版本、响应状态代码、状态代码的文本描述
- 状态码负责表示客户端请求的返回结果、标记服务器端是否正常、通知出现的错误。状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值
响应状态代码:
状态码 | 含义 |
---|---|
1xx | 指示信息–表示请求已接收,继续处理 |
2xx | 响应成功 |
3xx | 重定向–要完成请求必须进行更进一步的操作 |
4xx | 客户端错误–请求有语法错误或请求无法实现 |
5xx | 服务器端错误–服务器未能实现合法的请求 |
常见状态码:
- 200 OK:请求成功,信息包含在返回的响应报文中
- 301: Moved Permanently:请求的对象已经永久转移了,新的URL定义在响应报文的Localtion:首部行中指定。客户机软件自动用新的URL获取该对象
- 400 Bad Request:差错代码,指示该请求不能被服务器理解
- 404 Not Found:被请求的文档不在服务器上
- 505 Http Version Not Supported:服务器不支持请求报文使用的HTTP协议版本
用户与服务器的交互:Cookie
HTTP连接是无状态的,但web站点通常希望能够识别用户,因此出现了Cookie
Cookie组成部分:
- 在HTTP响应报文有一个cookie首部行
- 在HTTP请求报文中有一个cookie首部行
- 在用户端系统中保留有一个cookie文件
- 在web站点有一个后端数据库
通过cookie,站点可以识别用户,从而进行相应针对,并且cookie容易侵犯隐私,web站点能够知道很多用户信息,并依此获取利益。
Web缓存
Web缓存器(Web Cache)也叫代理服务器,是能代表初始Web服务器满足HTTP请求的网络实体。
Web缓存器有自己的磁盘存储空间,并在该存储空间中保存最近请求过的对象的拷贝,可以让用户的HTTP请求首先指向Web缓存器。
浏览器请求对象:
- 浏览器建立一个到Web缓存器的TCP连接,向缓存器中的对象发送一个HTTP请求
- Web缓存器检查本地是否缓存了此对象,如果有,就向客户机返回此对象
- 没有缓存,就与该对象的初始服务器打开一个TCP连接,发送获取该对象的HTTP请求
- 在Web缓存器收到该对象后,在本地存储空间存储一份拷贝,并用HTTP响应报文向客户机的浏览器发送该拷贝。
Web缓存器可以降低服务器的压力,减少客户机请求的响应时间。
条件Get方法
目的是让缓存器证实它的对象是最新的,没有过时
参考
- 本文作者: xczll
- 本文链接: https://xczllgit.github.io/2020/03/23/computerscience/2020-03-23-applicationProtocol/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!