2017-08-16 34 views
0

我正在嘗試使用MarkLogic進行身份驗證。 我使用的是xdmp:login的方法,它在MarkLogic和Postman的查詢控制檯中工作正常。MarkLogic CORS錯誤

但在瀏覽器中,當我打電話MarkLogic的登錄功能,它拋出以下錯誤:

Error: XMLHttpRequest cannot load http://172.16.32.154:8000/v1/eval . Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin ' http://localhost:9001 ' is therefore not allowed access. The response had HTTP status code 405.

+1

[對預檢請求的響應未通過訪問控制檢查]的可能重複(https://stackoverflow.com/questions/35588699/response-to-preflight-request-doesnt-pass-access-control-check) –

+0

*響應的HTTP狀態碼爲405 *表示服務器可能未配置爲允許OPTIONS請求並響應它們。 https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests有關於瀏覽器的詳細信息在此處執行。但其要點在於,需要將服務器配置爲響應OPTIONS請求,並使用200或204和空響應主體以及正確的CORS Access-Control-Allow - \ *響應標頭。 – sideshowbarker

回答

2

問題是其從一個地方嘗試連接到一個不同的地方請求下載客戶端JS。這是Access-Control-Allow-Origin錯誤的重要組成部分。

看來您正在從本地主機上的應用程序服務器提供一些內容:9001(MarkLogic除外),然後嘗試點擊http://172.16.32.154:8000(MarkLogic)。這表明您的架構存在問題:您的MarkLogic實例可供任何人直接點擊。原來是a poor idea from a security point of view

localhost:9001上的主機是什麼?一種選擇是MarkLogic中的應用程序服務器可以承載您從localhost:9001提供的任何服務,以及管理您嘗試通過/ v1/eval發送的邏輯的模塊。

讓我們來看一個例子。假設您有一個MarkLogic應用程序服務器使用模塊的文件系統(請注意,首選使用模塊數據庫)。在只要您有該應用程序服務器的根目錄,你可以有:

  • JS/
  • CSS/
  • 的index.html
  • API/

在 「API」目錄中,您可以擁有一個名爲login.xqy或login.sjs的XQuery或JavaScript模塊,它可以執行任何要發送到/ v1/eval的任何操作。合理?