2015-04-06 90 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

相关问题