服务端的要处理的请求越多,无疑服务端的压力也就越大,尤其是有些请求需要访问一些比较昂贵的资源,例如数据库,服务端的文件等。但是我们必须知道,在到达服务端的请求中,有些请求时我们希望的,例如网站的用户的请求,有些请求其实是不必要,甚至是我们不想要的,为此,我们要避免这样的请求,节省服务端的资源,从而提高性能。

搜索引擎

首先来看看有关搜索引擎的问题。

然后搜索引擎爬到我们的站点是一件好的事情,很多的SEO可以进行,推广站点。同时,在站点中,有些文件或者资源比较的私密,或者我们不希望被搜索引擎请求和收录的,因为每次搜索引擎在请求这些资源的时候,就是发送请求到我们的站点服务器,势必会加重服务器的负载。

不需要被搜索引擎请求的文件一般如下:

1. 图片资源

2. Js脚本,css等

3. 一些需要身份验证或者授权才能看的页面(如果页面需要验证之后才能看,搜索引擎收录了也作用不大)

我们可以设置一下,告诉搜索引擎的蜘蛛程序如何爬我们的站点。

步骤如下:

1. 在站点的根目录下面,创建一个robots.txt的文件。

2. 写入文件。如果我们希望阻止所有的搜索引擎来爬我们的站点的页面,那么就可以在文件中写入下面的配置:

User-agent: *

Disallow: /

如果希望阻止搜索引擎爬某个文件夹,可以配置如下:

User-agent: *

Disallow: /images/

Disallow: /js/

Disallow: /css/

Disallow: /private/

更有趣的是:对于某些搜索引擎,我们还可以改变他们的蜘蛛程序爬我们站点的频率,设置如下:

User-agent: *

Crawl-delay: 10

大家可以去上网找下一些如何影响Google,百度等蜘蛛程序的设置。

热链接问题

就是在A网站上面显示一个来自B网站的图片链接。例如我们在自己的站点上面有一个链接如下:<img src=”http://www.xxx.com/yyy.gif”/>,那么在别人在浏览我们的站点的时候,就回去别人的那个站点(http://www.xxx.com/yyy.gif)去请求这个图片,那么势必会消耗他们的服务器的资源。发过来,如果别人在他们的站点上采用了我们的图片或者其他的链接资料,那么用户在浏览别人的站点的时候就会消耗我们站点的服务端资源和带宽。

为一个组件就可以阻止这种情况的发生:http://www.iis.net/community/default.

aspx?tabid=34&i=1288&g=6.大家去看看。

验证码(CAPTCHA)

我们常常在站点中加入一些验证码的功能来防止网络注册机。一般是生成一张有文字的图片,然后根据验证用户输入的文字和图片中的文字是否一样来判断此时的用户是人还是注册机。

通过验证码阻止了注册机随意的消耗站点资源(如果没有验证码,注册机可以不断的注册信息,大小服务器和数据库资源,而且产生很多的垃圾数据)。

我们自己写生成验证码的程序,一般通过GDI+来做,同时也可以采用一些第三方的库实现,例如:reCAPTCHA: http://recaptcha.net/,大家上网找下,很多的。

网络刮刀(Scrapers)与Dos

这个问题必须引起重视。如果我们的站点上面有很多的有用的信息,那么别人可能就可能开发一个程序来到我们的站点抓取信息,然后把这些内容放到自己的站点上面。例如,很多的内容型的站点每天都从博客园的首页上面来抓取信息,然后放到他们的站点上,增加他们的访问量。

本来站点被搜索引擎抓就有点消耗性能了,如果还被很多的这样的网络刮刀来抓内容,对站点的性能影响可想而知。

如果那些网络刮刀程序的的IP地址变化不频繁,而且请求我们站点的频率比较的由规律,那么我们就可以采用一些代码的方式来防止这样的请求。例如,我们可以监测:同一个IP是否在20min之内发送了100个请求,如果是,我们就推测:可能是别人在抓我们的站点内容,我们就拒绝这个IP的请求。

当然了,上面只是一些简单的方法,对于一些复杂的Dos***,上面的监测代码基本没有作用。因为Dos***中,***的IP地址是变化的。

下面我们就写一些代码来防止简单的网络刮刀程序和简单的Dos***。基本的思想就是:如果在给定的时间段内,如果某个用户的请求很多,超过了一定的数量,那么我们就认为这个”用户”可能是网络刮刀程序,然后就拒绝下面的请求,一段时间之后,再次允许这个从这个IP发出的请求。

下面的代码中:假设如果一个用户在5秒之内发出了100个请求,那么我们就认为这是网络刮刀程序或者是网站的***者。当然,我们还考虑这个发送请求的”用户”是否是搜索引擎的蜘蛛程序。(下面的代码只是简单作为演示,不是实际生产的代码,抛砖引玉)

  1. private const int intervalSeconds = 30;
  2. private const int maxRequestsInInterval = 5;

如果认为这个”用户”是***者,那么我们就阻止用户的请求,阻止时间是20秒

  1. private const int blockedPeriodSeconds = 20;

下面,我们创建一个类来描述一个访问者的信息。如下:

  1. private class VisitorInfo
  2. {
  3. public int nbrHits;
  4. public bool blocked;
  5. public VisitorInfo()
  6. {
  7. nbrHits = 1;
  8. blocked = false;
  9. }
  10. }

在BotDefence类中加入一个方法IsBotAttach来判断一个请求是否是***性的请求。如下:

  1. public static bool IsDosAttack()
  2. {
  3. string visitorIP = HttpContext.Current.Request.UserHostAddress;
  4. VisitorInfo visitorInfo = (VisitorInfo)HttpContext.Current.Cache[visitorIP];
  5. if (visitorInfo == null)
  6. {
  7. HttpContext.Current.Cache.Insert(
  8. visitorIP, new VisitorInfo(), null,
  9. DateTime.Now.AddSeconds(intervalSeconds),
  10. System.Web.Caching.Cache.NoSlidingExpiration);
  11. }
  12. else
  13. {
  14. if (visitorInfo.blocked)
  15. {
  16. return true;
  17. }
  18. visitorInfo.nbrHits++;
  19. if (visitorInfo.nbrHits > maxRequestsInInterval)
  20. {
  21. visitorInfo.blocked = true;
  22. HttpContext.Current.Cache.Insert(
  23. visitorIP, visitorInfo, null,
  24. DateTime.Now.AddSeconds(blockedPeriodSeconds),
  25. System.Web.Caching.Cache.NoSlidingExpiration);
  26. return true;
  27. }
  28. }
  29. return false;
  30. }

上面的代码都是自解释的,很容易看懂,就不赘述了。

原文链接:http://www.cnblogs.com/yanyangtian/archive/2011/02/16/1955693.html

ASP.NET站点构建之减少不必要的请求相关推荐

  1. 高性能ASP.NET站点构建之托管资源优化

    高性能ASP.NET站点构建之托管资源优化 转载cnn2371112011-02-26 11:42:36评论(0)51人阅读 前言:本章主要详细的讲述如何因内存问题而导致的性能问题,很多的时候都是深入 ...

  2. 高性能ASP.NET站点构建之简单的优化措施

    部署优化 我们都知道,不同的部署方式对站点的性能是有影响的,可能有些朋友已经知道了这点,不管怎样,我们这里还是详细系统的讲述一下这个问题,熟悉的朋友权当回顾J. Release方式编译项目 如果我们的 ...

  3. 【原创】构建高性能ASP.NET站点 开篇

    原文:[原创]构建高性能ASP.NET站点 开篇 构建高性能ASP.NET站点 开篇 前言:有段时间没有写ASP.NET的东西了,心里总是觉得缺少了什么,毕竟自己对ASP.NET还是情有独钟的. 在本 ...

  4. 构建高性能ASP.NET站点 第六章—性能瓶颈诊断与初步调优(下前篇)—简单的优化...

    构建高性能ASP.NET站点 第六章-性能瓶颈诊断与初步调优(下前篇)-简单的优化措施     前言:本篇给出一些在部署ASP.NET站点时采用的简单的优化措施.        本篇议题如下:     ...

  5. 构建高性能ASP.NET站点 开篇

    前言:有段时间没有写ASP.NET的东西了,心里总是觉得缺少了什么,毕竟自己对ASP.NET还是情有独钟的. 在本系列文章中,准备比较全面的讲述ASP.NET的性能的优化,从前台到后台,以后本列文也看 ...

  6. 【原创】构建高性能ASP.NET站点 第五章—性能调优综述(后篇)

    构建高性能ASP.NET站点 第五章-性能调优综述(后篇) 前言:本篇主要讲述如何根据一些简单的工具和简单的现象来粗布的定位站点的性能问题. 本章的议题如下: 性能调优的一般过程 利用分析工具分析页面 ...

  7. 转:构建高性能ASP.NET站点 第五章—性能调优综述(中篇)

    构建高性能ASP.NET站点 第五章-性能调优综述(中篇) 前言:本篇主要讲述用一些简单的工具来分析一些与站点性能有关的数据,在上一篇文章中,我们讨论了一下性能调优的一般过程,本篇就开始介绍一些方法和 ...

  8. 构建高性能ASP.NET站点 第七章 如何解决内存的问题(后篇)—托管资源优化—监常用优化措施...

    构建高性能ASP.NET站点 第七章 如何解决内存的问题(后篇)-托管资源优化-监常用优化措施   前言:有段时间没有写这个系列了,希望大家见谅,本篇主要将会介绍一些常用的CLR优化措施. 本篇的议题 ...

  9. 建高性能ASP.NET站点 第五章—性能调优综述(中篇)

    构建高性能ASP.NET站点 第五章-性能调优综述(中篇) 前言:本篇主要讲述用一些简单的工具来分析一些与站点性能有关的数据,在上一篇文章中,我们讨论了一下性能调优的一般过程,本篇就开始介绍一些方法和 ...

最新文章

  1. 公开平等的企业文化是OKR落地第一步
  2. 汇编语言LAHF和SAHF指令
  3. OpenvSwitch VxLAN实验
  4. LeetCode 239. Sliding Window Maximum
  5. Windows Mobile 数独游戏及全部源码
  6. 电脑锁屏按什么键解锁_手机屏幕密码忘了怎么解锁
  7. 机器学习-吴恩达-笔记-4-神经网络描述
  8. CxImage使用心得(转载)
  9. 高性能计算多集群管理平台
  10. 同类型的免费下载软件中, JDownloader的功能比FreeRapid Downloader功能要强很多
  11. Windows 10 创建 删除 合并磁盘分区
  12. Ubuntu中修改Home目录下中文目录为英文
  13. php生产环境配置,PHP生产环境配置 - osc_ifi9q17t的个人空间 - OSCHINA - 中文开源技术交流社区...
  14. 蓝桥杯--数字排列的Python解法
  15. [笔试] 搜狗校招哈尔滨,武汉站 - 实现加减乘操作
  16. 浏览器打开服务器上的图片无法显示,网页中的图片打不开怎么办?原因与解决办法...
  17. 读书百客:《长恨歌》赏析
  18. 高德地图红绿灯读秒是怎么实现的?(二)
  19. Process Lasso – 智能调整进程优先级提高CPU性能避免程序停止响应
  20. MCU在可穿戴计算机生物特征识别中的关键作用

热门文章

  1. rabbitmq充分利mysql_牛逼哄哄的 RabbitMQ 到底有啥用?
  2. 量子计算机概念谁提出来,目前的量子计算机从根本上来说是一个伪概念
  3. linux的free会擦出磁盘吗,如何在 Linux 上检查可用的磁盘空间 | Linux 中国
  4. osg多线程_尝试使用Osg编译上下文实现多线程编译显示列表--总结
  5. click Documenting Scripts
  6. Scala paralle
  7. Excel条件格式化(conditional formatting)应用
  8. 中软国际2020年业绩再创新高 归母净利同比增长26.5%
  9. SQLite学习总结(3)——SQLite命令及语法
  10. Beetl学习总结(3)——高级功能