有没有办法让BaseX的HTTP服务器提供存储在数据库中作为原始资源或文件系统的HTML文档,文本/ html内容类型,因此可以在浏览器中显示?
该文档是一个向BaseX发出XHR请求的网页。目前,我通过文件协议将其加载到浏览器上。这需要让Jetty使用CORS头进行响应,否则相同的源策略会阻止XHR请求。
然而,这是一个维护负担。每次更新BaseX都需要手动获取新版本的servlet过滤器,以添加CORS标头。
我想让BaseX本身提供HTML文档(并成为原点),从而消除了交叉原始请求。
有可能吗?
答案 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前面托管一个反向代理来提供静态文件(通常无论如何都要用于生产),但这会增加开发中的一些管理开销。