一个简单的带缓存http代理
眼下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代理的更多相关文章
- avalon实现一个简单的带增删改查的成绩单
		自从angular问世,一直就有去了解学习angular,一直想用angular去做一个项目,但无奈,大ng是国外产物,ng1.2版本就只兼容到IE8,1.3后的几个版本提升到IE9,据说NG2.0更 ... 
- 使用go语言的list实现一个简单的LRU缓存
		package main; import ( "container/list" "errors" "sync" "fmt" ... 
- 搭建一个简单的dns缓存服务器
		环境:linux 软件:bind97,bind97-utils, bind97-libs ip:192.168.192.130:192.168.192.131 -------------------- ... 
- iOS - 一个简单的带标题的图标的实现
		代码不复杂,直接上代码: ImageViewButton.h // // ImageViewButton.h// // 带有图片.底部标题或者顶部的按钮 // // #import <UIKit ... 
- 随手撸一个简单的带检查的printf
		#include <stdio.h> #include <iostream> #include <vector> #include <string> # ... 
- C#——做一个简单代理IP池
		一.缘由. 抓取数据时,有一些网站 设置了一些反爬虫设置,进而将自己本地 IP 地址拉入系统黑名单.从而达到禁止本地 IP 访问数据的请求. 二.思路. 根据其他 代理 IP 网站,进行一个免费的代理 ... 
- Bootstrap+JSP实例学习笔记一.简单的带登录功能的首页
		前言 Bootstrap 是流行的 HTML.CSS 和 JS 框架,用于开发响应式布局.移动设备优先的 WEB 项目.源自于twiteer内部的开发框架. 当前(2019-05)最新版本是v3.3. ... 
- Golang校招简历项目-简单的分布式缓存
		前言 前段时间,校招投了golang岗位,但是没什么好的项目往简历上写,于是参考了许多网上资料,做了一个简单的分布式缓存项目. 现在闲下来了,打算整理下. github项目地址:https://git ... 
- 通过Dapr实现一个简单的基于.net的微服务电商系统(十八)——服务保护之多级缓存
		很久没有更新dapr系列了.今天带来的是一个小的组件集成,通过多级缓存框架来实现对服务的缓存保护,依旧是一个简易的演示以及对其设计原理思路的讲解,欢迎大家转发留言和star 目录:一.通过Dapr实现 ... 
随机推荐
- 使用VC++压缩解压缩文件夹
			前言 项目中要用到一个压缩解压缩的模块, 看了很多文章和源代码, 都不是很称心, 现在把我自己实现的代码和大家分享. 要求: 1.使用Unicode(支持中文). 2.使用源代码.(不使用静态或 ... 
- PropertyPlaceholderConfigurer类的使用注意
			如果你在spring的applicationcontext.xml中需要使用属性配置文件,那PropertyPlaceholderConfigurer这个类就是必须的. <bean class= ... 
- [C++]C++中的运行时类型检测
			Date:2014-1-3 Summary: 使用C++中的运行时类型检测.(文章重点在于记录本人的使用情况,并非深层讨论RTTI) Contents:写习惯C#的我,在C++依然存在哪些.NET的惯 ... 
- SharePoint 内容部署-PowerShell
			1. 创建一个新的内容部署路径 New-SPContentDeploymentPath –Name "Marketing Internet Content" –SourceSPWe ... 
- HDU 4704 Sum (费马定理+快速幂)
			Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total Subm ... 
- android--手机桌面添加网址链接图标(解决方式)
			这样的做法最普遍最简单: 1.新建一个android空项目: 2.在drawable文件夹下加入图标文件,如icon.png:在values文件夹下的strings.xml文件里添加名称.如websi ... 
- 从零开始,创建GitHub团队开发环境
			从零开始,创建GitHub团队开发环境 GitHub提供免费的团队环境,不过免费仓库容量是300MB,请大家注意. 申请GitHub个人账号 1. 使用浏览器访问GitHub主页.如果使用IE,尽量不 ... 
- hdu4521(线段树+dp)
			传送门:小明系列问题——小明序列 题意:有n个数,求间距大于d的最长上升序列. 分析:dp[i]表示在i点以a[i]结束距离大于d的最长上升序列,然后每更新到第i点时,取i-d之前小于a[i]的数为结 ... 
- Android开发 更改返回button的图标
			非常多的Android应用左上角都有返回button 在默认的情况下 ADT会默认给一个返回图标 而作为开发需求 非常多都要求定制一个新的图标 在Android的站点上 发现了2种能够更改的方法 1. ... 
- [非官方]ArcGIS10.2 for Desktop扩展工具包——XTools Pro
			XTools Pro 是一套为ArcGIS平台设计的矢量空间分析. 形状转换和表管理扩展工具,大大增强了 ArcGIS 的功能,使用该工具能够提高 ArcGIS 用户的效率和性能. XTools Pr ... 
