星期五 二月 26, 2010 15:50
超文本转移协议与万维网高速缓存
HTTP协议
HTTP是一个客户端和服务器端请求和应答的标准。从层次的角度看,HTTP是面向事务(所谓事务就是指一系列的信息交换,而这一系列交换是一个不可分割的整体,即要么所有的信息交换都完成,要么一次交换都不进行)的应用层协议,是万维网上能够可靠地交换文件的重要基础。
服务器进程不断的监听指定端口(默认端口为80),用来判断是否有浏览器(网络爬虫或其他客户进程)向它发出连接建立请求。当判断为真并建立连接之后,客户进程向源服务器(Origin Server)发出HTTP请求,源服务器响应,最后连接被释放。这样的操作交互遵循一定的规则与格式标准,而这个标准就是超文本转移协议HTTP。
HTTP虽然使用了TCP,但其本身是无状态的(stateless)。换句话说,同一个客户端第二次访问同一个服务器上的页面时,服务器的响应与第一次的相同。虽然TCP是面向连接的向上提供服务,但HTTP协议本身是无连接的。
尽管TCP/IP协议是互联网上最流行的应用,但HTTP协议并没有规定必须使用它和(基于)它支持的层。 事实上,HTTP可以在任何其他互联网协议上,或者在其他网络上实现。HTTP只假定(其下层协议提供)可靠的传输,任何能够提供这种保证的协议都可以被其使用。
HTTP报文
HTTP有两类报文,一种是请求报文,另一种是响应报文。它们都由三个部分组成。从下图不难看出,两种报文结构的开始行略有不同。
方法
空格
URL
空格
版本
CRLF
首部字段名:
空格
值
CRLF
…
首部字段名:
空格
值
CRLF
CRLF
实体主体(通常不用)
(a) 请求报文
版本
空格
状态码
空格
短语
CRLF
首部字段名:
空格
值
CRLF
…
首部字段名:
空格
值
CRLF
CRLF
实体主体(有些响应报文不用)
(b) 响应报文
1) 开始行,用于区分是请求报文还是响应报文。所有HTTP请求的第一行都是请求行,主要包含请求方法,请求资源的URL,以及HTTP的版本;而响应报文的开始行叫做状态行,主要包含HTTP的版本,状态码以及其对应的短语。它们都用空格隔开,CR代表回车,LF代表换行。
2) 首部(Head)行,用来描述浏览器(网络爬虫等)或服务器的一些信息。它可以有好几行,每一行都必须有CR与LF。整个首部行结束之后,还用一个CRLF将其与实体隔开。
3) 实体主体(Entity Body),请求报文中一般不用这个字段(只有请求方法要求时才会被放在请求消息中),而响应报文里也可以没有。
其中值得注意的是,状态代码的第一个数字代表当前响应的类型:
1xx 消息——请求已被服务器接收,继续处理
2xx 成功——请求已成功被服务器接收、理解、并接受
3xx 重定向——需要后续操作才能完成这一请求
4xx 请求错误——请求含有词法错误或者无法被执行
5xx 服务器错误——服务器在处理某个正确请求时发生错误
虽然 RFC 2616 中已经推荐了描述状态的短语,例如”200 OK”,”404 Not Found”,但是 WEB 开发者仍然能够自行决定采用何种短语,用以显示本地化的状态描述或者自定义信息。
可以看到的是,HTTP仍在不断的发展。现在的较新的版本是1999年公布的HTTP/1.1[RFC 2616],它已成为因特网草案标准。而下一代HTTP(HTTP-NG)则正在研究之中。
万维网高速缓存
万维网高速缓存(Web cache)是代理服务器的一种功能,它将最近的一些请求与响应暂存在代理服务器的本地磁盘中。如果新的请求与代理服务器的缓存吻合,则直接从代理服务器返回响应;反之,则需要按照请求的URL再次通过Internet访问该资源。其大致过程如下:
1) 客户端(浏览器)需要发送请求时,与带有Web Cache功能的代理服务器建立TCP连接,并向代理服务器发送HTTP请求报文。
2) 如果代理服务器已经存放了所请求的对象,则直接将其放入HTTP响应报文中返回给客户端(浏览器)。
3) 否则,代理服务器就代表客户端(浏览器),与Internet上的源服务器建立TCP连接,并发送HTP请求报文,源服务器把请求对象放在HTTP响应报文中返回给代理服务器。
4) 代理服务器获得该对象之后,先复制保存到本地磁盘(为其日后服务),再将该对象放在HTTP响应报文中,通过之前与客户端建立的TCP返回给用户(浏览器)。
其中,保存到本地磁盘以及返回响应之前,我们Ipv6项目还有很多事要做。
- Category: 教育技术学
- (1) Comment
最近评论