2.2 Web 和 HTTP
20世纪90年代以前,互联网主要是研究人员、学者和大学生在使用,他们登录远程主机,在本地主机和远程主机之间传输文件,尽管这些应用非常有用和高效,但是并不被学术界和研究界以外的人知道。
20世纪90年代初,万维网(World Wide Web,1994)出现,将很多数据网上升为一个数据网,并被大众所熟知。
互联网最具有吸引力的是按需操作,当用户有需求时,可以得到想要的信息。
2.2.1 HTTP 概况
超文本传输协议(HypeText Transfer Protocol,HTTP)是Web的应用层协议。网络应用的客户端、服务器端运行在不同的端系统上,通过交换HTTP报文进行会话,HTTP定了报文的结构和交换方式。
Web页面(Web Page)是由对象组成的,一个对象只是一个文件(HTML文件、JPEG图形、JAVA程序),且可通过URL寻址。多数Web页面包含一个HTML基本文件(Base HTML file)。
Web浏览器(Web Browser)实现了HTTP的客户端
Web服务器(Web Server)实现了HTTP的服务器端,用与储存Web对象以及对象URL寻址
HTTP使用了TCP作为运输协议,TCP保证了数据的传输。
HTTP是一种无状态协议(Stateless Protocol),即服务器不保存客户状态。
2.2.2 非持续连接和持续连接
非持续连接(Non-persistent Connection):每个请求/响应对是经过单独的TCP连接发送
持续连接(Persistent Connection):所有请求/响应对是经过相同的TCP连接发送
非持续连接需要对每个请求的对象建立一个新的TCP连接,增大了服务器的压力。
2.2.3 HTTP报文格式
请求报文
报文为普通ASCII文本,方便人为识别。
GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
Connection: close
User-agent: Mozilla/5.0
Accept-language: fr
Line 1 为请求行(Request Line):方法字段、URL字段、HTTP版本字段
方法字段:GET、POST、HEAD、PUT、DELETE
Line 2-5 为首部行(Header Line)
主机地址:Host
连接方式:Connection(非持续连接、持续连接),close指不希望使用持续连接
用户类型:User-agent
语言版本:Accept-language
实体部分
GET方法:实体部分为空,并且参数拼在URL中
POST方法:信息写入实体部分
HEAD方法:类似GET方法,只是服务器响应时用HTTP报文响应,而不是对象
响应报文
HTTP/1.1 200 OK
Connection: close
Date: Tue, 09 Aug 2011 15:44:04 GMT
Server: Apache/2.2.3 (CentOS)
Last-Modified: Tue, 09 Aug 2011 15:11:03 GMT
Content-Length: 6821
Content-Type: text/html
Line 1 为状态行(Status Line)
200 OK:请求成功
301 Moved Permanently:请求对象已经永久转移,新的URL在响应报文的Location字段中
400 Bad Request:一个通用差错代理,表示请求不能被服务器所理解
404 Not Found:被请求文档不在服务器上
505 HTTP Version Not Supported:服务器不支持HTTP协议版本
2.2.4 用户与服务器交互:Cookie
HTTP服务器是无状态的,这样允许工程师们开发可以同时处理数以千计的TCP连接的服务器。
HTTP通过Cookie识别用户,Cookie包含4部分:
HTTP响应报文中的一个Cookie首部
HTTP请求报文中的一个Cookie首部
客户端系统保留的Cookie,由浏览器管理
位于Web站点的一个后端数据库
2.2.5 Web 缓存
Web缓存器(Web Cache)也称代理服务器(Proxy Server),它有自己的储存空间,可以保存最近请求过的对象副本。
Web缓存的作用:
减少客户请求的响应时间
减少接入一个机构的接入链路通信量
Web缓存构成内容分发网络(Content Distribution Network,CDN),CDN公司在地理上部署了许多缓存器,因此使得大量流量实现本地化。
2.2.6 条件GET方法
高速缓存可以使得用户的请求响应时间降低,但是缓存器中的对象副本可能过于陈旧。条件GET(Conditional GET)方法允许缓存器证实对象副本是否最新。
请求报文使用GET方法
请求报文中包含一个‘If-Modified-Since’的首部字段
Last updated
Was this helpful?