有没有办法让 BaseX 提供 HTML 文档?

Is there a way to make BaseX serve an HTML document?

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

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

但是,这是一种维护负担。对 BaseX 的每次更新都需要手动获取添加 CORS headers.

的新版本的 servlet 过滤器

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

可以吗?

默认 web.xml(位于 BaseXWeb/WEB-INF)已经包含配置,以提供 /static/ URI 下 ./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。另一种选择总是 store the documents in a database as RAW files,并自行为他们提供足够的内容类型。由于通过 ./static 文件夹托管文件会绕过 RestXQ 执行并让 Jetty 直接提供文件,因此与从 BaseX 数据库读取文件相比,您可能会有一些性能改进。第三种解决方案可能是在 BaseX 之前托管一个反向代理来为静态文件提供服务(通常在生产环境中这样做),但这会增加开发中的一些管理开销。