3

有没有办法让 BaseX 的 HTTP 服务器为存储在数据库中作为原始资源或文件系统中的 HTML 文档提供文本/html 内容类型,以便可以在浏览器中显示?

该文档是一个向 BaseX 发出 XHR 请求的网页。目前,我通过文件协议将它加载到浏览器上。这需要让 Jetty 使用 CORS 标头进行响应,否则同源策略会阻止 XHR 请求。

然而,这是一个维护负担。BaseX 的每次更新都需要手动获取添加 CORS 标头的新版本的 servlet 过滤器。

我想让 BaseX 本身为 HTML 文档提供服务(并成为源),从而消除跨源请求。

是否可以?

4

1 回答 1

1

默认值web.xml(位于 中)已经包含配置以从URI下的目录BaseXWeb/WEB-INF中提供静态文件:./static/static/

  <!-- Mapping for static resources (may be restricted to a sub path) -->
  <servlet>
    <servlet-name>default</servlet-name>
    <init-param>
      <param-name>useFileMappedBuffer</param-name>
      <param-value>false</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/static/*</url-pattern>
  </servlet-mapping>

您还可以查看BaseX DBA,它还充当由 BaseX 托管的 Web 应用程序的示例实现,并利用该./static文件夹存储一些 JavaScript 文件。

当然,web.xml如果您需要从另一个目录托管的文件,您也可以更改默认值。另一种方法是始终将文档作为 RAW 文件存储在数据库中,并自行为它们提供足够的内容类型。由于通过./static文件夹托管文件绕过了 RestXQ 执行并让 Jetty 直接提供文件,但与从 BaseX 数据库读取文件相比,您可能会获得一些性能改进。第三种解决方案可能是在 BaseX 前面托管一个反向代理来提供静态文件(这通常是在生产环境中完成的),但这会增加开发中的一些管理开销。

于 2016-11-05T07:56:34.127 回答