2017-02-09 71 views
1

如果我们想使用来自不同主机或端口的AJAX请求连接到MarkLogic REST端点,我认为MarkLogic不允许向内置REST端点添加标头以避免CORS问题?MarkLogic CORS头文件

我相信我能解决这个问题,通过使用一个XQuery脚本,并连接到这一点 - 并添加以下到XQuery的脚本:

xdmp:add-response-header("Access-Control-Allow-Origin", "*"); 
xdmp:add-response-header("Access-Control-Allow-Headers", "origin, x-requested-with, content-type"); 

所以如而不是连接到“v1/documents?uri =”端点,我可以连接到提供相同功能的“documents.xqy?uri =”脚本。这种方法有缺点吗?有没有更好的方法来处理这个问题?

我注意到过去给出的另一个选择是使用反向代理,但我认为这是不必要的给定上面的方法?

谢谢!

回答

2

如果您构建自定义XQuery端点而不是使用REST API,那么是的,您可以设置响应标头,并且应该没问题。唯一的缺点就是失去了REST API的开箱即用功能。

另一种方法是在客户端JavaScript和MarkLogic之间使用中间层,并在那里处理CORS问题。

你不想做的是你的client-side JavaScript talk directly to the REST API - 这就像有一个公共可用的ODBC连接。 (对于概念证明来说,这很好,但对于生产来说不是一个好主意。)

+0

我第二次戴夫的断言。引用他的优秀文章(在他的回复中提到)更全面地解决了这个话题:“MarkLogic REST API是在考虑三层架构的情况下构建的,中间层应用业务逻辑以确保只有正确的请求才能通过REST API“。只在公共网络上公开业务逻辑定义的端点,而不是粒度和强大的REST API端点。 –

+0

谢谢!这适用于使用Marklogic的LDAP身份验证的专用网络。考虑到这个用例,Dave的文章中概述的关注点是否更少? 此外,我知道解决CORS问题的一个选择是扩展REST API,以便可以添加相关头文件。正如我们所讨论的,我们正在使用的方法是连接到xquery脚本并在其中添加标题。通过扩展REST API来做这件事是否有缺点,还是仅仅取决于用例? – Robert

+0

在专用网络上使用可减少可能试图超出其授权范围的人数,但不会自行更改问题。如果您致力于一个双层应用程序(一个完全合理的体系结构),建议是推出自己的端点以确保对人们可以执行的操作进行精细控制。 –