MarkLogic CORS标头

MarkLogic CORS标头,marklogic,Marklogic,如果我们想使用来自不同主机或端口的AJAX请求连接到MarkLogic REST端点,我认为MarkLogic不允许向内置REST端点添加头以避免CORS问题,这是正确的吗 我相信我可以通过使用xquery脚本并连接到它来解决这个问题,并将以下内容添加到xquery脚本中: xdmp:add-response-header("Access-Control-Allow-Origin", "*"); xdmp:add-response-header("Access-Control-Allow-H

如果我们想使用来自不同主机或端口的AJAX请求连接到MarkLogic REST端点,我认为MarkLogic不允许向内置REST端点添加头以避免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=”脚本即可。这种方法有缺点吗?有没有更好的方法来处理这个问题

我注意到,过去给出的另一个选项是使用反向代理,但鉴于上述方法,我认为这是不必要的


谢谢

如果您构建自定义XQuery端点而不是使用RESTAPI,那么是的,您可以设置响应头,这样就可以了。唯一的缺点是失去RESTAPI的开箱即用功能

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


您不想做的是让您的--这有点像公开一个ODBC连接。(这样做可以证明概念,但不是制作的好主意。)

我支持Dave的主张。引用他的文章(在他的回复中有链接)更全面地阐述了这个主题,“MarkLogic REST API构建时考虑了三层架构,中间层应用业务逻辑以确保只有正确的请求才能通过REST API。”只公开公共网络上的业务逻辑定义的端点,不是粒度和功能强大的RESTAPI端点。谢谢!这是在使用带有Marklogic的LDAP身份验证的专用网络上使用的。鉴于这个用例,Dave的文章中概述的关注点是否不那么重要?另外,我知道解决CORS问题的一个方法是扩展RESTAPI,以便添加相关的头。如前所述,我们正在使用的方法是连接到xquery脚本并在其中添加头。在扩展REST API时这样做有缺点吗?还是仅仅取决于用例?在专用网络上使用会减少试图超越授权行事的人数,但不会改变问题本身。如果您致力于两层应用程序(一种完全合理的体系结构),建议您滚动您自己的端点,以确保对人们可以做什么进行细粒度控制。