是否有一种方法可以使BaseX的HTTP服务器提供存储在数据库中的HTML文档作为原始资源或在文件系统中,具有文本/HTML内容类型,因此它可以在浏览器中显示?
该文档是一个向BaseX执行XHR请求的网页。目前,我通过文件协议在浏览器上加载它。这就需要让Jetty使用CORS头来响应,否则同源策略会阻止XHR请求。
然而,这是一个维护负担。BaseX的每次更新都需要手动获取添加CORS头的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
。另一种方法总是将文档作为RAW文件存储在数据库中,并自行为其提供适当的内容类型。由于通过./static
文件夹的托管文件绕过RestXQ执行,并由Jetty直接提供这些文件,因此与从BaseX数据库读取文件相比,您可能会获得一些性能改进。第三种解决方案可能是在BaseX前面托管一个反向代理来为静态文件提供服务(这通常是在生产环境中完成的),但这会增加开发中的一些管理开销。