http, 演示客户与服务器套接字。 http只支持GET操作及硬编码的MIME类型的一小部分(MIME类型是多媒体内容的类型描述符)。代理HTTP服务器是单线程的,该线程中每一个请求依次被处理,其他请求等待。http作为一个代理服务器时,它还拷贝每一个它获取的文件到本地缓存中。对于本地缓存,它没有用于刷新和无用单元回收的策略。
 
  HTTP服务器是通过5个类和一个接口实现的。更完善的实现方案可能在主类http外分裂很多方法,以使组成结构更抽象。
 
  MimeHeader.java
 
  MIME是通过电子邮件系统传达多媒体内容的一个Internet标准。HTTP协议运用并扩展了MIME标头的概念,在HTTP客户和服务器之间传输常规的属性/值对。 P410
 
该类是Hashtable的一个子类,能方便的存储和检索与MIME标头有关的关键字/值对。
parse方法用来获取一个原始MIME格式的字符串,并使它的关键字/值对进入一个给定的MimeHeader实例。它用StringTokenizer把输入数据分解成独立的有CRLF(\r\n)序列标记的行。
 
class MimeHeader extends Hashtable{
void parse(String data) {
StringTokenizer st = new StringTokenizer(data,"\r\n");
while(st.hasMoreTokens()){
String s = st.nextToken();
int colon = s.indexOf(':');
String key = s.substring(0,colon);
String val = s.substring(colon + 2);
put (key,val);
}} }
 
  HTTPResponse.java
 
  HTTPResponse类是所有与HTTP服务器应答有关的事物的包装程序。它被http类的代理部分使用。当你向一个HTTP服务器发送一个请求时,它以一个存储在statusCode中的整数形式的代码以及一个存储在reasonPhrase中的文本应答(这些变量名在正式的HTTP规范中规定)。这个单行的响应后面跟随着一个包含进一步应答信息的MIME头。我们用MimeHeader对象来解析这个字符串。
 
  UrlCacheEntry.java
 
  为在服务器上保存文档的内容,必须在用于找回文档的URL和文档自身描述之间建立联系。一个文档由它的MimeHeader和原始数据描述。例如一副图像可以被一个Content-Type:image/gif样式的MimeHeader描述,而原始图像数据就是一个字节数组。
  UrlCacheEntry对象的构造函数需要用URL作为关键字以及一个与之相关的MimeHeader。如果MimeHeader内部有一个名为Content-Length成员,数据区域被预先分配足够大的空间来保存它的内容。
 
  append() 用来给UrlCacheEntry对象增添数据的。它不是一个简单的setData()方法,原因是数据可能流经网络且需要在一定时间被存储成块。append方法处理三种情形:1.数据缓冲区根本没有分配; 2.数据缓冲区对于引入的数据来说太小,所以它被重新分配; 3.引入的数据正好可以插入缓冲区。 在任何时候,length成员变量保存数据缓冲区当前的有效大小值。

简单的缓存代理HTTP服务器的更多相关文章

  1. 对jquery的ajax进行二次封装以及ajax缓存代理组件:AjaxCache

    虽然jquery的较新的api已经很好用了, 但是在实际工作还是有做二次封装的必要,好处有:1,二次封装后的API更加简洁,更符合个人的使用习惯:2,可以对ajax操作做一些统一处理,比如追加随机数或 ...

  2. js中ajax连接服务器open函数的另外两个默认参数get请求和默认异步(open的post方式send函数带参数)(post请求和get请求区别:get:快、简单 post:安全,量大,不缓存)(服务器同步和异步区别:同步:等待服务器响应当中浏览器不能做别的事情)(ajax和jquery一起用的)

    js中ajax连接服务器open函数的另外两个默认参数get请求和默认异步(open的post方式send函数带参数)(post请求和get请求区别:get:快.简单 post:安全,量大,不缓存)( ...

  3. Nginx多进程高并发、低时延、高可靠机制在缓存代理中的应用

    1. 开发背景 现有开源缓存代理中间件有twemproxy.codis等,其中twemproxy为单进程单线程模型,只支持memcache单机版和redis单机版,都不支持集群版功能. 由于twemp ...

  4. Nginx多进程高并发、低时延、高可靠机制缓存代理中的应用

    1. 开发背景 现有开源缓存代理中间件有twemproxy.codis等,其中twemproxy为单进程单线程模型,只支持memcache单机版和redis单机版,都不支持集群版功能. 由于twemp ...

  5. varnish4.0缓存代理配置

    防伪码:你必须非常努力,才能看起来毫不费力. 一.varnish原理: 1)Varnish简介: varnish缓存是web应用加速器,同时也作为http反向缓存代理.你可以安装varnish在任何h ...

  6. 安全开发运维必备,如何进行Nginx代理Web服务器性能优化与安全加固配置,看这篇指南就够了

    本章目录 1.引言 1.1 目的 1.2 目标范围 1.3 读者对象 2.参考说明 2.1 帮助参考 2.2 参数说明 3.3 模块说明 3.服务优化 3.1 系统内核 3.2 编译优化 3.3 性能 ...

  7. Memcached集群/分布式/高可用 及 Magent缓存代理搭建过程 详解

    当网站访问量达到一定时,如何做Memcached集群,又如何高可用,是接下来要讨论的问题. 有这么一段文字来描述“Memcached集群” Memcached如何处理容错的? 不处理!:) 在memc ...

  8. 第十二篇 SQL Server代理多服务器管理

    本篇文章是SQL Server代理系列的第十二篇,详细内容请参考原文 在这一系列的上一篇,我们查看了维护计划,一个维护计划可能会创建多个作业,多个计划.你还简单地看了SSIS子系统,并查看了维护计划作 ...

  9. squid3.5缓存代理实践记录

    准备: 两台服务器,一台web,一台squid缓存代理 squid机域名:www.dannylinux.top web机IP:12.1.1.1 1.版本: [root@danny squid]# sq ...

随机推荐

  1. ubuntu 以root 运行程序

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

  2. linux下c语言实现计算磁盘剩余空间

    #include <sys/statfs.h> unsigned ; size_t mbFreedisk = ; unsigned ; size_t mbTotalsize = ; str ...

  3. android中的Handler

    android的Handler   前言 学习android一段时间了,为了进一步了解android的应用是如何设计开发的,决定详细研究几个开源的android应用.从一些开源应用中吸收点东西,一边进 ...

  4. 如何给caffe添加新的layer ?

    如何给caffe添加新的layer ? 初学caffe难免会遇到这个问题,网上搜来一段看似经典的话, 但是问题来了,貌似新版的caffe并没有上面提到的vision_layer:

  5. min—width的使用

    在网页中,如果一个元素没有设置最小宽度(min-width),这时当浏览器缩小到一定程度时,元素中的布局可能会发生变化.如果想要保持布局不变,可以给该元素(如div)设置最小宽度属性 .box{ ba ...

  6. nginx反向代理原理和配置讲解

    最近有打算研读nginx源代码,看到网上介绍nginx可以作为一个反向代理服务器完成负载均衡.所以搜罗了一些关于反向代理服务器的内容,整理综合. 一  概述 反向代理(Reverse Proxy)方式 ...

  7. SQLServer三种自定义函数

    自定义函数"是我们平常的说法,而"用户定义的函数"是 SQL Server 中书面的说法. SQL Server 2000 允许用户创建自定义函数,自定义函数可以有返回值 ...

  8. Flowplayer-一款免费的WEB视频播放器

    Flowplayer 是一个开源(GPL 3的)WEB视频播放器.您可以将该播放器嵌入您的网页中,如果您是开发人员,您还可以自由定制和配置播放器相关参数以达到您要的播放效果. Flowplayer支持 ...

  9. JS日期加减,日期运算

    一.日期减去天数等于第二个日期 function cc(dd,dadd){//可以加上错误处理var a = new Date(dd)a = a.valueOf()a = a - dadd * 24 ...

  10. AJAX状态值与状态码

    在<Pragmatic Ajax A Web 2.0 Primer > 0: (Uninitialized) the send( ) method has not yet been inv ...