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

时间:2016-11-05 02:30:22

标签: same-origin-policy basex restxq

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

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

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

我想让BaseX本身提供HTML文档(并成为原点),从而消除了交叉原始请求。

有可能吗?

1 个答案:

答案 0 :(得分:1)

默认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前面托管一个反向代理来提供静态文件(通常无论如何都要用于生产),但这会增加开发中的一些管理开销。