有没有办法让 BaseX 的 HTTP 服务器提供一个 HTML 文档,该文档可以作为原始资源存储在数据库中,也可以存储在文件系统中,内容类型为 text/html,以便可以在浏览器中显示?
该文档是一个向 BaseX 发出 XHR 请求的网页。目前,我通过文件协议(protocol)在浏览器上加载它。这需要让 Jetty 响应 CORS header ,否则同源策略会阻止 XHR 请求。
但是,这是一种维护负担。对 BaseX 的每次更新都需要手动获取添加 CORS header 的新版本的 servlet 过滤器。
我想让 BaseX 本身为 HTML 文档提供服务(并成为来源),从而消除跨来源请求。
这可能吗?
最佳答案
默认的 web.xml
(位于 BaseXWeb/WEB-INF
)已经包含配置以提供来自 ./static
的静态文件/static/
URI 下的目录:
<!-- 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 应用程序的示例实现,并为一些 JavaScript 文件使用 ./static
文件夹。
当然,如果您需要从另一个目录托管的文件,您也可以更改默认的 web.xml
。替代方案始终是 store the documents in a database as RAW files ,并自行为他们提供足够的内容类型。由于通过 ./static
文件夹托管文件会绕过 RestXQ 执行并让 Jetty 直接提供文件,因此与从 BaseX 数据库读取文件相比,您可能会有一些性能改进。第三种解决方案可能是在 BaseX 之前托管一个反向代理来提供静态文件(通常在生产环境中这样做),但这会增加开发中的一些管理开销。
关于same-origin-policy - 有没有办法让 BaseX 为 HTML 文档提供服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40434190/