# 第六章 CSP 架构 - 静态文件 # 静态文件 数据库服务器为所有 `CSP` 提供服务。 数据库服务器还可以通过 `CSP` 网关为 `Web` 应用程序提供任何类型的静态文件。在标准 `Web` 应用程序中,`Web` 服务器通常提供静态内容。要在 `Caché` 上运行 `Zen` 应用程序,必须配置 `Web` 服务器以允许服务器通过 `CSP` 网关提供所有静态文件。 **注意:要运行基于 `Zen` 的应用程序,请启用“服务文件”选项并配置 `Web` 服务器以允许 `Caché` 服务器提供静态文件。然后 `Zen` 框架将能够提供依赖图像和 `JavaScript` 帮助文档。** #### 指示字符编码 `CSP` 引擎通过流服务器以与主流 `Web` 服务器一致的方式处理静态文件,以确定 `JavaScript` 文件的字符编码。 现代惯例是将所有 `JavaScript` 文件标记为 `application/javascript `的 `Content-Type`,并且确保页面上使用的所有 `JavaScript` 文件都是这种情况。 以这种方式标记的 `JavaScript` 文件: - 如果文件包含 `BOM`(字节顺序标记),浏览器会自动检测到这一点并使用正确的字符集来读取它。 - 如果该文件不包含 `BOM`,则浏览器假定该文件是 `UTF-8`。 如果需要覆盖此行为以指定 `JavaScript` 文件的字符集,请将全局 `^%SYS("CSP","MimeFileClassify","JS")` 设置为列表值 `$listbuild(contenttype, binary, charset)`。例如, ```java SET ^%SYS("CSP", "MimeFileClassify", "JS") = $listbuild("text/javascript", 0 ,"ISO-8859-1") ``` 这将设置较旧的内容类型并使用 `ISO-8859-1` 字符集。此外,如果 转换表被定义为非空字符串或全局节点 `^%SYS("CSP","DefaultFileCharset")` 设置为空值,则 将为所有 `JavaScript` 使用此字符集和其他文本文件。默认情况下,这些全局节点均未设置。 #### 启用服务文件选项 `CSP` 应用程序的“服务文件”选项打开(始终)或关闭(否),或者 `CSP` 网关可以缓存 `Web` 服务器上的静态文件(始终和缓存)。 `Always and cached` 设置提高了效率,因为系统可以提供缓存的静态页面而无需返回到 `Caché` 服务器)。要运行 `Zen` 应用程序,必须使用始终或始终和缓存设置启用服务文件选项。 #### 配置 `Web` 服务器以允许缓存服务器提供静态文件 配置 `Web` 服务器以允许 `Caché` 服务器提供静态文件。 默认情况下,提供的安装脚本不会查找或配置外部 `Web` 服务器。如果运行自定义安装,可以选择该选项来配置任何以前安装的 IIS 或 `Apache Web` 服务器以启用 `CSP` 支持。安装脚本创建 `/csp` 虚拟目录,并为要由网关处理的 `.csp`、`.cls`、`.zen` 和 `.cxw` 扩展创建映射。这足以使 `CSP` 通过该 `Web` 服务器正常运行。它不支持服务文件功能。为此,必须手动配置 `Apache` 或 `IIS` 以映射要通过网关处理的特定文件扩展名。这是设计使然,因为通过这种机制将数据库服务器暴露在外是一种安全风险,不应该以无形的方式进行。 #### 从 Web 服务器提供静态文件 如果愿意,仍然可以使用从 `Web` 服务器提供静态页面的传统配置,例如,如果已经以这种方式设置了 `Web `应用程序。 (在这种情况下,`Static Files` 选项的设置无关紧要。)当一个公共 `Web` 服务器为两个不同版本的 提供服务时,这消除了争用,每个版本都需要某些静态文件的不同版本(例如,`hyperevent broker` 组件)。 如果您已将 `Web` 服务器本身配置为提供静态文件,请确保静态内容存在于每台 `Web` 服务器上。