眼下1.0版模型非常easy。即对客户机发来的请求进行简单处理后,转发到server。转发之前先检查本地缓存。假设有。则直接回送给客户本地资源

程序流程大致例如以下图:

缓存是通过把文件保存到磁盘上,然后把索引记录在内存里实现,数据结构例如以下,兴许会考虑加入其它字段。比方时间戳等。

typedef struct Cache_node {
char name[MAX_LINE_SIZE];
char path[MAX_LINE_SIZE];
struct Cache_node * next;
}Cache_node; typedef struct Cache {
int init_size;
int current_size;
Cache_node fileset[MAX_CACHE_SIZE];
}Cache;

而转发部分。是通过对Request header里的url字段进行解析和重填,然后转发请求实现。

眼下阶段仅仅能处理GET请求。

以下是简单的使用:

首先配置浏览器,以Firefox为例(本程序执行在本地11111port)

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2ltb25feGlhX3Vlc3Rj/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

直接登录,可进入欢迎界面:

測试一下,以搜狗主页为样例:

做得比較仓促。仅仅是实现了主要的功能,还有非常多要改进的地方,先马克在这里。

眼下存在的问题:

1、网页较大或者网页上元素类型太多时。存在一定的Bug

2、有些缓存文件存储有异常。

兴许版本号要改进的地方:

1、对缓存文件的存放形式和查找效率等进行改进。甚至是缓存的形式。

2、对代理的效率进行提升,比方每次都请求查找IP是个非常消耗时间的过程。

程序的具体代码在:https://github.com/simon-xia/mini_proxy

各位路过的朋友有什么建议欢迎指出~~

一个简单的带缓存http代理的更多相关文章

  1. avalon实现一个简单的带增删改查的成绩单

    自从angular问世,一直就有去了解学习angular,一直想用angular去做一个项目,但无奈,大ng是国外产物,ng1.2版本就只兼容到IE8,1.3后的几个版本提升到IE9,据说NG2.0更 ...

  2. 使用go语言的list实现一个简单的LRU缓存

    package main; import ( "container/list" "errors" "sync" "fmt" ...

  3. 搭建一个简单的dns缓存服务器

    环境:linux 软件:bind97,bind97-utils, bind97-libs ip:192.168.192.130:192.168.192.131 -------------------- ...

  4. iOS - 一个简单的带标题的图标的实现

    代码不复杂,直接上代码: ImageViewButton.h // // ImageViewButton.h// // 带有图片.底部标题或者顶部的按钮 // // #import <UIKit ...

  5. 随手撸一个简单的带检查的printf

    #include <stdio.h> #include <iostream> #include <vector> #include <string> # ...

  6. C#——做一个简单代理IP池

    一.缘由. 抓取数据时,有一些网站 设置了一些反爬虫设置,进而将自己本地 IP 地址拉入系统黑名单.从而达到禁止本地 IP 访问数据的请求. 二.思路. 根据其他 代理 IP 网站,进行一个免费的代理 ...

  7. Bootstrap+JSP实例学习笔记一.简单的带登录功能的首页

    前言 Bootstrap 是流行的 HTML.CSS 和 JS 框架,用于开发响应式布局.移动设备优先的 WEB 项目.源自于twiteer内部的开发框架. 当前(2019-05)最新版本是v3.3. ...

  8. Golang校招简历项目-简单的分布式缓存

    前言 前段时间,校招投了golang岗位,但是没什么好的项目往简历上写,于是参考了许多网上资料,做了一个简单的分布式缓存项目. 现在闲下来了,打算整理下. github项目地址:https://git ...

  9. 通过Dapr实现一个简单的基于.net的微服务电商系统(十八)——服务保护之多级缓存

    很久没有更新dapr系列了.今天带来的是一个小的组件集成,通过多级缓存框架来实现对服务的缓存保护,依旧是一个简易的演示以及对其设计原理思路的讲解,欢迎大家转发留言和star 目录:一.通过Dapr实现 ...

随机推荐

  1. How to Design Programs, Second Edition

    How to Design Programs, Second Edition How to Design Programs, Second Edition

  2. RIO包 健壮的I/O函数代码

    下面是关于 #include <stdio.h> #include <string.h> #include <errno.h> #include <sys/t ...

  3. 基于Predictive Parsing的ABNF语法分析器(十三)——rulelist、rule、rulename、define-as和elements

    我们来看看rulelist,它是整个ABNF文法的入口,就是说一个ABNF文法就是一个规则列表rulelist.一个rulelist由若干个rule规则组成,每个rule由规则名rulename.定义 ...

  4. php 简易验证码(GD库)

    论坛中为了防止灌水,出现了非常多的验证码的插件.如今这里介绍一个非常easy的自己定义验证码函数,这个验证码实现的原理就是通过php扩展的gd库来实现的. 给出百度百科对验证码的定义"验证码 ...

  5. PHP中如何实现 “在页面中一边执行一边输出” 的效果

    <?php    set_time_limit(0);  //在有关数据库的大量数据的时候,可以将其设置为0,表示无限制.    ob_end_clean();     //在循环输出前,要关闭 ...

  6. iOS文件保存策略

    Where You Should Put Your App’s Files To prevent the syncing and backup processes on iOS devices fro ...

  7. set与map容器

    首先来看看set集合容器: set集合容器实现了红黑树的平衡二叉树数据结构,在插入元素时它会自动调整二叉树的排列,把该元素放到适当的位置,并且 保证左右子树平衡.平衡二叉检索树采用中序遍历算法. 对于 ...

  8. hdu2563(递推dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2563 解题思路:要分两种情况来考虑,a(n)为向上,b(n)为向左跟向右,f(n)为当前方案数.a(n ...

  9. shortcut switch in terminal start pos & end pos

    ctrl a ctrl e switch in terminal start pos & end pos

  10. WebKit爬虫

    https://github.com/emyller/webkitcrawler 一个开源的项目,可以快速入门. http://spiderformysql.com/ http://crawl.gro ...