2017-02-09 1 views
1

Если мы хотим подключиться к конечной точке REST MarkLogic с использованием запроса AJAX с другого хоста или порта, могу ли я правильно подумать, что 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, то да, вы можете установить заголовки ответов, и вы должны быть в порядке. Единственный недостаток - это потерять функциональность API REST.

Другой подход - использовать средний уровень между вашим клиентским JavaScript и MarkLogic и обрабатывать проблему CORS.

Что вы не хотите делать, это ваш client-side JavaScript talk directly to the REST API - это похоже на доступность ODBC-соединения. (Это хорошо для доказательства концепции, но не очень хорошая идея для производства.)

+0

I второе утверждение Дейва. Процитировав свою замечательную статью (связанную в своем ответе), более полно обращается к теме: «API-интерфейс MarkLogic REST был построен с учетом трехуровневой архитектуры, где этот средний уровень применяет бизнес-логику, чтобы гарантировать, что только правильные запросы пройдут REST API. " Выставлять только конечные точки, определяемые бизнес-логикой, в общедоступных сетях, а не в гранулярные и мощные конечные точки API REST. –

+0

Спасибо! Это предназначено для использования в частной сети с использованием аутентификации LDAP с помощью Marklogic. Являются ли проблемы, изложенные в статье Дэйва, менее опасными, учитывая этот случай использования? Кроме того, я знаю, что один вариант решения проблемы CORS заключается в расширении API REST, чтобы можно было добавить соответствующие заголовки. Подход, который мы используем, как обсуждалось, заключается в подключении к скриптам xquery и добавлении заголовков. Есть ли недостаток, заключающийся в том, чтобы сделать это над расширением REST API или просто зависит от варианта использования? – Robert

+0

Использование в частной сети уменьшает количество людей, которые могут пытаться действовать вне их полномочий, но не изменяет сама проблема. Если вы привержены двухуровневому приложению (совершенно разумной архитектуре), совет должен сворачивать ваши собственные конечные точки, чтобы обеспечить мелкомасштабный контроль над тем, что люди могут делать. –