自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

ASP.NET站點(diǎn)構(gòu)建之減少不必要的請(qǐng)求

開發(fā) 后端
今天我們要討論的是ASP.NET站點(diǎn)構(gòu)建系列中的減少不必要的請(qǐng)求,非常實(shí)用,希望對(duì)大家有所幫助。

高性能ASP.NET站點(diǎn)構(gòu)建系列文章目錄

  1. 高性能ASP.NET站點(diǎn)構(gòu)建之開篇
  2. 高性能ASP.NET站點(diǎn)構(gòu)建之剖析頁面的處理過程
  3. 高性能ASP.NET站點(diǎn)構(gòu)建之優(yōu)化HTTP請(qǐng)求
  4. 高性能ASP.NET站點(diǎn)構(gòu)建之細(xì)節(jié)決定成敗
  5. 高性能ASP.NET站點(diǎn)構(gòu)建之性能調(diào)優(yōu)綜述
  6. 高性能ASP.NET站點(diǎn)構(gòu)建之識(shí)別性能瓶頸
  7. 高性能ASP.NET站點(diǎn)構(gòu)建之簡單的優(yōu)化措施
  8. ASP.NET站點(diǎn)構(gòu)建之減少不必要的請(qǐng)求
  9. 高性能ASP.NET站點(diǎn)構(gòu)建之托管資源優(yōu)化
  10. 高性能ASP.NET站點(diǎn)構(gòu)建之監(jiān)測(cè)CLR性能

前言:本篇的一些內(nèi)容比較的有意思,總結(jié)了可能平時(shí)大家可以注意到的一些優(yōu)化點(diǎn),而且非常的實(shí)用。

本篇的議題如下:

識(shí)別和分析服務(wù)端的性能瓶頸(上)

內(nèi)存(前篇)

緩存(前篇)

CPU(后篇)

處理請(qǐng)求線程(后篇)

提高性能的一些簡單改進(jìn)措施(下)

部署優(yōu)化(前篇)

減少不必要回傳(前篇)

減少不必要的請(qǐng)求(后篇)

搜索引擎問題

熱鏈接問題

驗(yàn)證碼(CAPTCHA)

網(wǎng)絡(luò)刮刀
 

服務(wù)端的要處理的請(qǐng)求越多,無疑服務(wù)端的壓力也就越大,尤其是有些請(qǐng)求需要訪問一些比較昂貴的資源,例如數(shù)據(jù)庫,服務(wù)端的文件等。但是我們必須知道,在到達(dá)服務(wù)端的請(qǐng)求中,有些請(qǐng)求時(shí)我們希望的,例如網(wǎng)站的用戶的請(qǐng)求,有些請(qǐng)求其實(shí)是不必要,甚至是我們不想要的,為此,我們要避免這樣的請(qǐng)求,節(jié)省服務(wù)端的資源,從而提高性能。

搜索引擎

首先來看看有關(guān)搜索引擎的問題。

然后搜索引擎爬到我們的站點(diǎn)是一件好的事情,很多的SEO可以進(jìn)行,推廣站點(diǎn)。同時(shí),在站點(diǎn)中,有些文件或者資源比較的私密,或者我們不希望被搜索引擎請(qǐng)求和收錄的,因?yàn)槊看嗡阉饕嬖谡?qǐng)求這些資源的時(shí)候,就是發(fā)送請(qǐng)求到我們的站點(diǎn)服務(wù)器,勢(shì)必會(huì)加重服務(wù)器的負(fù)載。

不需要被搜索引擎請(qǐng)求的文件一般如下:

1. 圖片資源

2. Js腳本,css等

3. 一些需要身份驗(yàn)證或者授權(quán)才能看的頁面(如果頁面需要驗(yàn)證之后才能看,搜索引擎收錄了也作用不大)

我們可以設(shè)置一下,告訴搜索引擎的蜘蛛程序如何爬我們的站點(diǎn)。

步驟如下:

1. 在站點(diǎn)的根目錄下面,創(chuàng)建一個(gè)robots.txt的文件。

2. 寫入文件。如果我們希望阻止所有的搜索引擎來爬我們的站點(diǎn)的頁面,那么就可以在文件中寫入下面的配置:

User-agent: *

Disallow: /

如果希望阻止搜索引擎爬某個(gè)文件夾,可以配置如下:

User-agent: *

Disallow: /images/

Disallow: /js/

Disallow: /css/

Disallow: /private/

更有趣的是:對(duì)于某些搜索引擎,我們還可以改變他們的蜘蛛程序爬我們站點(diǎn)的頻率,設(shè)置如下:

User-agent: *

Crawl-delay: 10

大家可以去上網(wǎng)找下一些如何影響Google,百度等蜘蛛程序的設(shè)置。

熱鏈接問題

就是在A網(wǎng)站上面顯示一個(gè)來自B網(wǎng)站的圖片鏈接。例如我們?cè)谧约旱恼军c(diǎn)上面有一個(gè)鏈接如下:<img src=”http://www.xxx.com/yyy.gif”/>,那么在別人在瀏覽我們的站點(diǎn)的時(shí)候,就回去別人的那個(gè)站點(diǎn)(http://www.xxx.com/yyy.gif)去請(qǐng)求這個(gè)圖片,那么勢(shì)必會(huì)消耗他們的服務(wù)器的資源。發(fā)過來,如果別人在他們的站點(diǎn)上采用了我們的圖片或者其他的鏈接資料,那么用戶在瀏覽別人的站點(diǎn)的時(shí)候就會(huì)消耗我們站點(diǎn)的服務(wù)端資源和帶寬。

為一個(gè)組件就可以阻止這種情況的發(fā)生:http://www.iis.net/community/default.

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

驗(yàn)證碼(CAPTCHA)

我們常常在站點(diǎn)中加入一些驗(yàn)證碼的功能來防止網(wǎng)絡(luò)注冊(cè)機(jī)。一般是生成一張有文字的圖片,然后根據(jù)驗(yàn)證用戶輸入的文字和圖片中的文字是否一樣來判斷此時(shí)的用戶是人還是注冊(cè)機(jī)。

通過驗(yàn)證碼阻止了注冊(cè)機(jī)隨意的消耗站點(diǎn)資源(如果沒有驗(yàn)證碼,注冊(cè)機(jī)可以不斷的注冊(cè)信息,大小服務(wù)器和數(shù)據(jù)庫資源,而且產(chǎn)生很多的垃圾數(shù)據(jù))。

我們自己寫生成驗(yàn)證碼的程序,一般通過GDI+來做,同時(shí)也可以采用一些第三方的庫實(shí)現(xiàn),例如:reCAPTCHA: http://recaptcha.net/,大家上網(wǎng)找下,很多的。

網(wǎng)絡(luò)刮刀(Scrapers)與Dos

這個(gè)問題必須引起重視。如果我們的站點(diǎn)上面有很多的有用的信息,那么別人可能就可能開發(fā)一個(gè)程序來到我們的站點(diǎn)抓取信息,然后把這些內(nèi)容放到自己的站點(diǎn)上面。例如,很多的內(nèi)容型的站點(diǎn)每天都從博客園的首頁上面來抓取信息,然后放到他們的站點(diǎn)上,增加他們的訪問量。

本來站點(diǎn)被搜索引擎抓就有點(diǎn)消耗性能了,如果還被很多的這樣的網(wǎng)絡(luò)刮刀來抓內(nèi)容,對(duì)站點(diǎn)的性能影響可想而知。

如果那些網(wǎng)絡(luò)刮刀程序的的IP地址變化不頻繁,而且請(qǐng)求我們站點(diǎn)的頻率比較的由規(guī)律,那么我們就可以采用一些代碼的方式來防止這樣的請(qǐng)求。例如,我們可以監(jiān)測(cè):同一個(gè)IP是否在20min之內(nèi)發(fā)送了100個(gè)請(qǐng)求,如果是,我們就推測(cè):可能是別人在抓我們的站點(diǎn)內(nèi)容,我們就拒絕這個(gè)IP的請(qǐng)求。

當(dāng)然了,上面只是一些簡單的方法,對(duì)于一些復(fù)雜的Dos攻擊,上面的監(jiān)測(cè)代碼基本沒有作用。因?yàn)镈os攻擊中,攻擊的IP地址是變化的。

下面我們就寫一些代碼來防止簡單的網(wǎng)絡(luò)刮刀程序和簡單的Dos攻擊。基本的思想就是:如果在給定的時(shí)間段內(nèi),如果某個(gè)用戶的請(qǐng)求很多,超過了一定的數(shù)量,那么我們就認(rèn)為這個(gè)”用戶”可能是網(wǎng)絡(luò)刮刀程序,然后就拒絕下面的請(qǐng)求,一段時(shí)間之后,再次允許這個(gè)從這個(gè)IP發(fā)出的請(qǐng)求。

下面的代碼中:假設(shè)如果一個(gè)用戶在5秒之內(nèi)發(fā)出了100個(gè)請(qǐng)求,那么我們就認(rèn)為這是網(wǎng)絡(luò)刮刀程序或者是網(wǎng)站的攻擊者。當(dāng)然,我們還考慮這個(gè)發(fā)送請(qǐng)求的”用戶”是否是搜索引擎的蜘蛛程序。(下面的代碼只是簡單作為演示,不是實(shí)際生產(chǎn)的代碼,拋磚引玉)

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

如果認(rèn)為這個(gè)”用戶”是攻擊者,那么我們就阻止用戶的請(qǐng)求,阻止時(shí)間是20秒

  1. private const int blockedPeriodSeconds = 20

下面,我們創(chuàng)建一個(gè)類來描述一個(gè)訪問者的信息。如下:

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

在BotDefence類中加入一個(gè)方法IsBotAttach來判斷一個(gè)請(qǐng)求是否是攻擊性的請(qǐng)求。如下:

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

上面的代碼都是自解釋的,很容易看懂,就不贅述了。

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

【編輯推薦】

  1. 高性能ASP.NET站點(diǎn)構(gòu)建之開篇
  2. 高性能ASP.NET站點(diǎn)構(gòu)建之剖析頁面的處理過程
  3. 高性能ASP.NET站點(diǎn)構(gòu)建之優(yōu)化HTTP請(qǐng)求
  4. 高性能ASP.NET站點(diǎn)構(gòu)建之細(xì)節(jié)決定成敗
  5. 高性能ASP.NET站點(diǎn)構(gòu)建之性能調(diào)優(yōu)綜述
  6. 高性能ASP.NET站點(diǎn)構(gòu)建之識(shí)別性能瓶頸
  7. 微軟PDC2009直擊:改進(jìn)ASP.NET 4運(yùn)行時(shí)
責(zé)任編輯:彭凡 來源: 博客園
相關(guān)推薦

2009-08-05 18:17:16

ASP.NET控件開發(fā)基類

2011-02-13 09:37:55

ASP.NET

2018-08-24 11:52:15

成本公共云云服務(wù)

2020-07-10 15:03:08

緩存架構(gòu)計(jì)算

2011-02-13 09:17:02

ASP.NET

2023-05-04 07:06:25

微軟Windows

2011-02-17 09:13:57

ASP.NET

2011-02-23 09:49:40

ASP.NET

2011-02-22 09:16:24

高性能ASP.NET

2011-02-15 09:31:56

ASP.NET

2011-02-16 09:08:27

ASP.NET

2011-02-14 09:32:16

ASP.NET

2011-04-18 14:35:53

2017-06-26 09:55:31

前端后端開發(fā)

2011-04-18 14:27:50

2010-07-22 09:13:00

ASP.NET

2009-07-28 17:17:19

ASP.NET概述

2011-04-13 13:49:50

ASP.NET網(wǎng)站優(yōu)化

2024-01-05 07:41:08

Go語言語句

2011-08-18 09:51:21

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)