我有一个实现 IHttpHandler 的类,该类旨在处理图像调整大小请求。它像这样处理 URL
http://mysite.com/imageHandler?image=myimg.jpg&width=100&height=100
当前处理程序在磁盘上查找 myimg.jpg,剪切 100x100 缩略图(如果尚不存在)并将客户端重定向到缩略图,如下所示
Response.RedirectPermanent("/some/virtualPath/to/thumbnail.jpg");
这非常有效,但我想避免强制客户端发出第二个 HTTP 请求。执行以下操作安全吗?
Server.Transfer("/some/virtualPath/to/thumbnail.jpg")
所有MSDN documentation讨论使用 Server.Transfer() 重定向到 aspx 页面,所以我不确定这是否正确。
谢谢
最佳答案
嗯,MSDN page明确表示:
The page transferred to should be another .aspx page. For instance, a transfer to an .asp or .asmx page is not valid.
因此,即使它可能有效,但从您可以依赖此功能的意义上来说,它并不“安全”。您违反了contract通过使用非 aspx 页面,因此理论上,该方法可以任意运行。
解决您的问题的一个安全解决方案是使用 Response
对象的适当方法将缩略图发送到客户端,例如 BinaryWrite
(如果缩略图位于内存)或TransmitFile(如果图像位于磁盘上)。在这种情况下,不要忘记适当设置 HTTP header (Response.ContentType = "image/jpeg"
) 以通知客户端这是一张 jpg 图像。此方法的另一个优点是您的缩略图文件不需要驻留在网络服务器的可公开访问的目录中。
关于c# - 使用 Server.Transfer() 将请求传输到静态图像(.jpg、.png 等)是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4935146/