same-origin-policy - 有没有办法让 BaseX 为 HTML 文档提供服务?

标签 same-origin-policy basex restxq

有没有办法让 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/

相关文章:

java - OpenJDK 8 (1.8.0_232) 和某些 HTTPS 连接是否存在导致 HTTP 错误 403 的已知问题?

xml - 在 XQuery 中声明默认元素命名空间时抛出 "Expecting expression"异常

xquery - 在BaseX中,数据库和集合有什么区别?

linux - 使用 RestXQ 服务打开的文件过多

javascript - 规避同源策略的方法

node.js - heroku 上缺少 Access-Control-Allow-Origin header

javascript - 为什么 CORS 允许向任何服务器发送数据?

javascript - Firefox 跨域请求