提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
转帖|其它|编辑:郝浩|2011-07-18 14:59:00.000|阅读 420 次
概述:让我们先分析一般的浏览现象,其中最重要的一点就是一个完整的页面并不是一次全部传送到客户端的。如果你请求的是一个带有许多图片和其它信息的页面,那么最先的一个Http请求被传送回来的是这个页面的文本,然后通过客户端的浏览器对这段文本的解释执行,发现其中还有图片,那么客户端的浏览器会再发送一条 Http请求,当这个请求被处理后那么这个图片文件会被传送到客户端,然后浏览器回将图片安放到页面的正确位置,就这样一个完整的页面也许要经过发送多条 Http请求才能够被完整的显示。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
1、什么是图片盗链
让我们先分析一般的浏览现象,其中最重要的一点就是一个完整的页面并不是一次全部传送到客户端的。如果你请求的是一个带有许多图片和其它信息的页面,那么最先的一个Http请求被传送回来的是这个页面的文本,然后通过客户端的浏览器对这段文本的解释执行,发现其中还有图片,那么客户端的浏览器会再发送一条Http请求,当这个请求被处理后那么这个图片文件会被传送到客户端,然后浏览器回将图片安放到页面的正确位置,就这样一个完整的页面也许要经过发送多条Http请求才能够被完整的显示。基于这样的机制,就会产生一个问题,那就是盗链问题:就是一个网站中如果没有起页面中所说的信息,例如图片信息,那么它完全可以将这个图片的连接到别的网站。这样没有任何资源的网站利用了别的网站的资源来展示给浏览者,提高了自己的访问量,而大部分浏览者又不会很容易地发现,这样显然,对于那个被利用了资源的网站是不公平的。
2、解决方法
那么现在利用ASP.NET中的这HttpHandler能够很好地解决这个问题,之所以能够发生这个问题。就是因为我们在默认状态下只处理那些动态的网页,象asp,aspx等等,但当有请求一个图片文件时,IIS就会直接提取资源并发送给客户端,这样看来就显得有些盲目了吧
所以我们要创建自己的HttpHandler来处理图片文件。例如jpg文件。
3 、 那么我们如何建立自己的HttpHandler并在web应用程序中注册呢?
(1)建立自己的HttpHandler
创建一个继承了System.Web.IHttpHandler接口的类,在System.Web.IHttpHandler接口只有两个成员
1 IsReusable 属性,其返回一个值代表其他http请求是否可以使用当前继承了 System.Web.IHttpHander接口的类的实例。
2 ProcessRequest(System.Web.HttpContext context) 方法,除了用户自定义中被要求处理的特殊的http请求。
其中的参数 System.Web.HttpContext 类的实例装入了一个http请求中http协议中要求的所有信息。其中System.Web.HttpContext 类中包含有属性 Request 使得从客户端发送过来的http请求信息的值可以被方便地读取;属性Response ,其中封装了需要返回给客户端的信息和操作。当然还有许多常用的属性和方法,在此就不详述了,我们这里只用到这两个属性。
(2)web应用程序中注册自定义的HttpHandler
在 Web.config这个网络应用程序配置文件中加入注册信息
<httpHandlers>
<add verb = " path = "*.jpg" type = "自定义handler的类的名称,网络应用程序名称" />
</httpHandlers>
4、 那么我们看看在ProcessRequest(System.Web.HttpContext context)方法是如何对请求图片文件的http请求进行处理的。
public void ProcessRequest(System.Web.HttpContext context)
{
if(context.Request.UrlReferrer.Host == "www.frontfree.net")//判断是否是本地引用,如果是则返回给客户端正确的图片,这里的判断就是用到了前面所述的http请求中所记路的参考页信息
{
context.Response.Expires = 0;//设置客户端缓冲中文件过期时间为0,即立即过期。
context.Response.Clear();//清空服务器端为此会话开辟的输出缓存
context.Response.ContentType = getContentType(context.Request.PhysicalPath); //获得文件类型
context.Response.WriteFile(context.Request.PhysicalPath);//将请求文件写入到服务器端为此会话开辟的输出缓存中
context.Response.End();//将服务器端为此会话开辟的输出缓存中的信息传送到客户端
}
Else //如果不是本地引用,则属于盗链引用,返回给客户端错误的图片
{
context.Response.Expires = 0; //设置客户端缓冲中文件过期时间为0,即立即过期。
context.Response.Clear();//清空服务器端为此会话开辟的输出缓存
context.Response.ContentType = getContentType("error.jpg"); //获得文件类型
context.Response.WriteFile("error.jpg");//将特殊的报告错误的图片文件写入到服务器端为此会话开辟的输出缓存中
context.Response.End();//将服务器端为此会话开辟的输出缓存中的信息传送到客户端
}
}
5、 待这一切都做好了,我们还要在让IIS知道,遇到图片文件也要进行处理。
这件事情我们还要让IIS知道。而为什么aspx文件会被处理,而默认的那些可以处理aspx的HttpHandler在哪里,其实是因为IIS在接收到aspx页面请求时,会为其自动加载一个C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll文件,这个文件是专为处理aspx页面所用的,是。NET Framework的一部份,我们要IIS在接收到jpg文件请求时也为其加载这个dll文件。
我们首先添加一个处理,读者可以参考aspx文件的配置就可以对处理jpg文件进行配置,我们同样也为jpg文件加载aspnet_isapi.dll文件,因为我们对jpg文件的处理也是建立在 ASP.NET机制之上的。具体配置,如下图:
OK,现在你已经对此方法有一定的了解了,其实自定义HttpHandler还有其他的应用,在此我们就不赘述了,下面的工作就需要读者多多实践了,并从中学习到更多的东西获得更多的经验,更好地应用设计开发的需求
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
文章转载自:网络转载面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢