2020国产成人精品视频,性做久久久久久久久,亚洲国产成人久久综合一区,亚洲影院天堂中文av色

分享

ASP.NET運(yùn)行機(jī)制和圖片盜鏈問題

 sumi2005 2011-07-19

ASP.NET運(yùn)行機(jī)制和圖片盜鏈問題

  1什么是圖片盜鏈

  讓我們先分析一般的瀏覽現(xiàn)象,其中最重要的一點(diǎn)就是一個(gè)完整的頁面并不是一次全部傳送到客戶端的。如果你請求的是一個(gè)帶有許多圖片和其它信息的頁面,那么最先的一個(gè)Http請求被傳送回來的是這個(gè)頁面的文本,然后通過客戶端的瀏覽器對這段文本的解釋執(zhí)行,發(fā)現(xiàn)其中還有圖片,那么客戶端的瀏覽器會再發(fā)送一條Http請求,當(dāng)這個(gè)請求被處理后那么這個(gè)圖片文件會被傳送到客戶端,然后瀏覽器回將圖片安放到頁面的正確位置,就這樣一個(gè)完整的頁面也許要經(jīng)過發(fā)送多條Http請求才能夠被完整的顯示?;谶@樣的機(jī)制,就會產(chǎn)生一個(gè)問題,那就是盜鏈問題:就是一個(gè)網(wǎng)站中如果沒有起頁面中所說的信息,例如圖片信息,那么它完全可以將這個(gè)圖片的連接到別的網(wǎng)站。這樣沒有任何資源的網(wǎng)站利用了別的網(wǎng)站的資源來展示給瀏覽者,提高了自己的訪問量,而大部分瀏覽者又不會很容易地發(fā)現(xiàn),這樣顯然,對于那個(gè)被利用了資源的網(wǎng)站是不公平的。

  2 解決方法

  那么現(xiàn)在利用ASP.NET中的這HttpHandler能夠很好地解決這個(gè)問題,之所以能夠發(fā)生這個(gè)問題。就是因?yàn)槲覀冊谀J(rèn)狀態(tài)下只處理那些動態(tài)的網(wǎng)頁,象asp,aspx等等,但當(dāng)有請求一個(gè)圖片文件時(shí),IIS就會直接提取資源并發(fā)送給客戶端,這樣看來就顯得有些盲目了吧

  所以我們要創(chuàng)建自己的HttpHandler來處理圖片文件。例如jpg文件。

  3 那么我們?nèi)绾谓⒆约旱腍ttpHandler并在web應(yīng)用程序中注冊呢?

 ?。?)建立自己的HttpHandler

  創(chuàng)建一個(gè)繼承了System.Web.IHttpHandler接口的類,在System.Web.IHttpHandler接口只有兩個(gè)成員

  1 IsReusable 屬性,其返回一個(gè)值代表其他http請求是否可以使用當(dāng)前繼承了 System.Web.IHttpHander接口的類的實(shí)例。

  2 ProcessRequest(System.Web.HttpContext context) 方法,除了用戶自定義中被要求處理的特殊的http請求。

  其中的參數(shù) System.Web.HttpContext 類的實(shí)例裝入了一個(gè)http請求中http協(xié)議中要求的所有信息。其中System.Web.HttpContext 類中包含有屬性 Request 使得從客戶端發(fā)送過來的http請求信息的值可以被方便地讀取;屬性Response ,其中封裝了需要返回給客戶端的信息和操作。當(dāng)然還有許多常用的屬性和方法,在此就不詳述了,我們這里只用到這兩個(gè)屬性。

  (2)web應(yīng)用程序中注冊自定義的HttpHandler。

  在 Web.config這個(gè)網(wǎng)絡(luò)應(yīng)用程序配置文件中加入注冊信息。

  4 那么我們看看在ProcessRequest(System.Web.HttpContext context)方法是如何對請求圖片文件的http請求進(jìn)行處理的。

  public void ProcessRequest(System.Web.HttpContext context)

  context.Response.Expires = 0;//設(shè)置客戶端緩沖中文件過期時(shí)間為0,即立即過期。

  context.Response.Clear();//清空服務(wù)器端為此會話開辟的輸出緩存

  context.Response.ContentType = getContentType(context.Request.PhysicalPath); //獲得文件類型

  context.Response.WriteFile(context.Request.PhysicalPath);//將請求文件寫入到服務(wù)器端為此會話開辟的輸出緩存中

  context.Response.End();//將服務(wù)器端為此會話開辟的輸出緩存中的信息傳送到客戶端

  Else //如果不是本地引用,則屬于盜鏈引用,返回給客戶端錯誤的圖片

  context.Response.Expires = 0; //設(shè)置客戶端緩沖中文件過期時(shí)間為0,即立即過期。

  context.Response.Clear();//清空服務(wù)器端為此會話開辟的輸出緩存

  context.Response.ContentType = getContentType("error.jpg"); //獲得文件類型

  context.Response.WriteFile("error.jpg");//將特殊的報(bào)告錯誤的圖片文件寫入到服務(wù)器端為此會話開辟的輸出緩存中

  context.Response.End();//將服務(wù)器端為此會話開辟的輸出緩存中的信息傳送到客戶端

  5 待這一切都做好了,我們還要在讓IIS知道,遇到圖片文件也要進(jìn)行處理。

  這件事情我們還要讓IIS知道。而為什么aspx文件會被處理,而默認(rèn)的那些可以處理aspx的HttpHandler在哪里,其實(shí)是因?yàn)镮IS在接收到aspx頁面請求時(shí),會為其自動加載一個(gè)C:WINDOWSMicrosoft.NETFrameworkv1.1.4322aspnet_isapi.dll文件,這個(gè)文件是專為處理aspx頁面所用的,是。NET Framework的一部份,我們要IIS在接收到j(luò)pg文件請求時(shí)也為其加載這個(gè)dll文件。

  我們首先添加一個(gè)處理,讀者可以參考aspx文件的配置就可以對處理jpg文件進(jìn)行配置,我們同樣也為jpg文件加載aspnet_isapi.dll文件,因?yàn)槲覀儗pg文件的處理也是建立在 ASP.NET機(jī)制之上的。具體配置,如下圖:

  OK,現(xiàn)在你已經(jīng)對此方法有一定的了解了,其實(shí)自定義HttpHandler還有其他的應(yīng)用,在此我們就不贅述了,下面的工作就需要讀者多多實(shí)踐了,并從中學(xué)習(xí)到更多的東西獲得更多的經(jīng)驗(yàn),更好地應(yīng)用設(shè)計(jì)開發(fā)的需求。來源華軍資訊編輯整理)

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多