2015-04-06 62 views
4

我正在使用Domino作爲後端的AngularJS應用程序。由於我想要比Domino Access Services(DAS)提供的更多定製選項,我的下一個選擇是來自擴展庫的REST服務。Domino,CORS和OPTIONS請求

該應用程序在Domino的獨立域上運行,因此我需要添加CORS標頭才能使該方案正常工作。使用CORS,瀏覽器(對於某些請求)首先向服務器發出預檢HTTP OPTIONS請求,以檢查允許哪些方法(更多CORS在此處:http://www.html5rocks.com/en/tutorials/cors/)。

我現在遇到的問題是Domino在該OPTIONS請求上拋出Method Not Allowed錯誤(響應代碼405)。我已經將它添加到我的Internet站點文檔中允許的方法列表中(儘管我不確定REST服務是否會遵守這些方法)。請求通過DAS罰款。

查看擴展庫中的RestDocumentJsonServicesource code似乎根本不支持OPTIONS方法。

有關如何使這項工作的任何想法?或者爲了解決方法?我知道我可以編寫自己的servlet或在Domino前安裝一個代理,但我不想走那條路線(還;-)

+0

你有什麼頭試圖將POST請求的內容類型覆蓋爲'application/x-www-form-urlencoded','multipart/form-data'或'text/plain'?這可以防止瀏覽器發送預檢請求。 –

+0

這不起作用(對於'xe:restService'組件):它會拋出一個錯誤,指出Content-Type必須是「application/json」(對於POST請求以及PUT和PATCH)。 –

+3

如果你真的想在RestDocumentJsonService中添加OPTIONS方法,你可以擴展它只覆蓋你需要的東西,然後在Extension Library的Rest服務 –

回答

0

馬克,只是一個快速的評論。我不確定這是否適合你。

但是我在當前項目中做的是將Angular應用程序放在NSF的WebContent文件夾中。這有幾個目的 - 其中一個就是在同一個NSF中使用正確版本的後端代碼進行部署。我已經將數據庫設置爲源代碼控制,並直接在NSF的磁盤項目中編輯Angular部分,並在需要運行時同步它們。作爲一個副作用,這個設置也將解決任何問題CORS系統作爲客戶端的代碼是從同一個域推出,我的REST服務是從;-)

/約翰稱爲

+0

嗨,John。謝謝。這當然會起作用,因爲我不必再處理CORS了。但是...我想嘗試使用單獨的域和CORS進行這項工作。我認爲在這種情況下將Angular應用程序託管在單獨的服務器上更有意義。 –

+0

嗨馬克,以及我認爲如此...(如我所示) ...並且它很有意義:-) –

2

如果你試圖使用認證CORS你將需要至少包含四個頭工作

Access-Control-Allow-Credentials: true 
access-control-allow-header: X-Requested-With, Origin, Accept, Accept-Version, Content-Type 
access-control-allow-method: OPTIONS, GET, PUT, POST, DELETE, PATCH 
access-control-allow-origin: http://yourOtherDomain.com 

不幸的是,你只能通過Web站點文檔添加3頭

你不能經歷的一個階段監聽器添加任何東西,因爲EXTLIB REST服務不經過XS P階段

您可以使用代理服務器,如nginx的或在我的情況下,我使用IHS

http://xomino.com/2014/04/20/adding-custom-http-headers-to-domino-r9-using-ibm-http-server-ihs/

或者你也可以推出自己的REST服務,並添加你想要

+1

代理服務是不需要的。您可以使用'PhaseListener'將標題添加到'xe:restService'組件。這些服務將觸發'RESTORE_VIEW'階段。 –

+0

@MarkLeusink你能否解釋一下如何以這種方式進行身份驗證?我沒有得到你如何可以張貼到xpage(等),並通過ajax申請你的憑據 - 謝謝(原諒我,如果我的問題沒有意義;我找到了這個東西我的方式) – user2808054

+0

有,自9.0。 1 FP6通過notes.ini參數「HTTPAdditionalRespHeader = 」向所有網站規則中添加另一個第四個標頭的選項,請參閱http://www-01.ibm.com/support/docview.wss?uid=swg21984240 – Tschenser

相關問題