ASCIIWeb页由一些对象组成,并通过URL对每个对象进行引用。URL通常包括访问协议、用户名、口令字、端口、目录文件等。格式如下:
Prot://user:psw@www.someSchool.edu:port/someDept/pic.gif
其中,
Prot代表协议名user代表用户psw代表口令www.comSchool.edu代表主机名port代表端口someDept/pic.gif代表路径名
HTTP,又称为超文本传输协议,是Web的应用层协议。HTTP为客户/服务器模式协议,其中客户为请求、接收和显示Web对象的浏览器,而服务器为对请求进行响应、发送对象的Web服务器。
{% hint style="danger" %} HTTP是无状态的,服务器并不维护关于客户的任何信息。 {% endhint %}
HTTP可以分为非持久HTTP与持久HTTP两种。其中,非持久HTTP(HTTP/1.0)最多只有一个对象在TCP连接上发送,下载多个对象需要多个TCP连接。持久HTTP(HTTP/1.1)则允许多个对象可以在一个(在客户端和服务器之间的)TCP连接上传输。
非持久HTTP具有以下特点
- 每个对象要2个RTT
- 操作系统必须为每个TCP连接分配资源
- 浏览器通常打开并行TCP连接,以获取引用对象
持久HTTP具有以下特点
- 服务器在发送响应后,仍保持TCP连接
- 在相同客户端和服务器之间的后续请求和响应报文通过相同的连接进行传送
- 客户端在遇到一个引用对象的时候,就可以尽快发送该对象的请求
具体而言,持久HTTP又分为流水方式和非流水方式。其中,流水方式的持久HTTP为HTTP/1.1的默认模式,客户端遇到一个引用对象就立即产生一个请求,因此所有引用对象只花费一个RTT是可能的。而非流水方式的持久HTTP要求客户端只能在收到前一个响应后才能发出新的请求,因此每个引用对象花费一个RTT。
一个典型的HTTP请求报文的例子如下
ASCII格式
也可以以data buffer的形式观察
HTTP请求报文
如果需要提交表单输入,HTTP支持Post方式/URL方式两种方法
- Post方式
- 网页通常包括表单输入
- 包含在实体主体(entity body)中的数据被提交到服务器
- URL方式
- 方法:GET
- 输入通过请求行的URL字段上载
{% hint style="info" %} HTTP方法类型根据协议版本不同有所区别
- HTTP/1.0
- GET
- POST
- HEAD:要求服务器在响应报文中不包含请求对象,通常用于故障跟踪
- HTTP/1.1
- GET/POST/HEAD
- PUT:将实体主体中的文件上载到URL字段规定的路径
- DELETE:删除URL字段规定的文件 {% endhint %}
一个典型的HTTP响应报文的例子如下
ASCII格式
其中,第一行记录了HTTP响应码。典型的响应码例子包括
- 200:OK
- 301:Moved Permanently
- 400:Bad Request,表示该请求不能被服务器解读
- 404:Not Found
- 505:HTTP Version Not Supported
因为HTTP实际上是无状态协议,因此大多数门户网站会使用cookies来保存状态。cookies机制包含四个组成部分
- HTTP响应报文中有一个cookie的header行
- HTTP请求报文中有一个cookie的header行
- 用户端系统中保存一个cookie文件,由用户浏览器管理
- Web站点有一个后端数据库,存储相关信息
一个简单的流程图如下:
维护Cookies状态
为了不访问原始服务器,就满足用户的需求,人们设计了Web缓存(也称为代理服务器)。用户可以设置浏览器,让其通过缓存访问Web。浏览器将所有的HTTP请求发给缓存。对于位于缓存中的对象,缓存将直接返回对象;如果对象不在缓存中,缓存会请求原始服务器,然后再将对象返回给客户端。
{% hint style="info" %} 缓存既是客户端、又是服务器,通常由ISP安装。 {% endhint %}
使用Web缓存有以下优点
- 降低客户端的请求响应时间
- 可以大大减少一个机构内部网络与Internet接入链路上的流量(都走LAN了)
- 互联网大量采用了缓存,可以使较弱的ICP也能够有效提供内容
条件GET方法的提出主要为了实现:如果缓存中的对象拷贝是最新的,就不要发送对象。为此,缓存会在HTTP请求中在If-modified-since字段中指定缓存拷贝的日期。服务器如果发现缓存拷贝陈旧,则会在响应报文中包含响应对象;否则,返回代码304(Not Modified)。流程如下:
条件GET方法
.png)
.png)
.png)
.png)
.png)