2016-11-05 55 views
1

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

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

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

我想让BaseX本身服务于HTML文档(并成为原点),从而消除了跨源请求。

可能吗?

回答

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应用程序的示例实现,并为某些JavaScript文件使用./static文件夹。

当然,如果您需要从其他目录托管的文件,也可以更改默认的web.xml。一个替代方案将始终是store the documents in a database as RAW files,并为您提供足够的内容类型。由于通过./static文件夹托管文件绕过RestXQ执行并使Jetty直接提供文件,不过,与从BaseX数据库读取文件相比,可能会有一些性能改进。第三种解决方案可能是在BaseX之前托管一个反向代理来提供静态文件(通常无论如何都是为生产而完成的),但这会增加开发中的一些管理开销。

+0

这是完美的。我正在向那些烦人的SOP块告别。谢谢! – ARX

相关问题