gpt4 book ai didi

c# - 使用前端 Controller 和 IIS 服务静态文件的方法?

转载 作者:搜寻专家 更新时间:2023-10-31 01:58:11 25 4
gpt4 key购买 nike

背景

IIS ISAPI 过滤器将所有请求路由到前端 Controller Java CMS 以进行响应。没有物理文件对应于给定的 URL。动机:

  1. 保护 URL
  2. 强制执行 SSL

这是服务静态文件(如音频和视频)的性能瓶颈。并且,池化的应用程序服务器处理线程被占用来服务于响应。

想法

让应用程序服务器填充一个 IIS ISAPI 过滤器或 http 模块,它可以读取然后提供文件。可能用物理文件路径、内容长度和 mime 类型填充响应 header 。

问题

  1. 不让 IIS 直接提供文件的糟糕设计决策?如果是这样,建议在安全和 SSL 实现方面要注意什么(CMS 处理这两者)。
  2. 如果让 IIS 响应,如何利用 IIS static file caching ?或者缓存有多大好处?

最佳答案

我认为您应该允许 IIS 为静态文件提供服务。您可以让 HttpModule(或您的过滤器)将控制权转移回 IIS——这意味着可能必须复制安全执行代码。另一种方法是让应用程序服务器将控制权转移回 IIS 以提供文件(当然之前会进行安全检查)。或者最后,正如您所概述的,您的应用程序服务器可以注入(inject)响应 header ,然后 httpmodule 将读取它们并将控制权传递给 IIS。不确定 java 但在 .NET 中你可以使用 HttpResponse.TransmitFile将控制权传回 IIS 的方法 - 这应该避免需要使 HttpModule 服务文件。

最后,对于缓存,您始终可以发出缓存 header 以响应低级别(代理或客户端缓存)。如果文件正在更改,那么您可以添加文件依赖项等。

编辑:不确定这是否适合您。创建一个 http 处理程序 (ashx) 并将其标记为 IIS 中所需的 SSL。此处理程序将提供所有媒体文件。处理程序会将文件用作查询参数。现在,您可以传递一些文件标识符或加密的部分路径(相对于文件存储的配置基本路径),以便用户看不到实际文件名或路径。您甚至可以制作会在一段时间后过期的 token (本质上,附加文件 ID 和时间戳并对其进行加密),以便用户无法使用相同的参数再次请求相同的文件。处理程序的伪代码是

void ProcessRequest(HttpContext context)
{
// read file id/name token
var token = context.Request["q"];

// validate/decrypt token etc and get the actual path for file to be served
string filePath;

// set needed response headers - content-type, content-disposition and cache related
...

// ask IIS to serve the file
context.Response.TransmitFile(filePath);
}

关于c# - 使用前端 Controller 和 IIS 服务静态文件的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4425102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com