Domino, CORS and the OPTIONS request



我正在开发一个使用Domino作为后端的AngularJS应用程序。由于我想要比Domino Access Services(DAS)提供的更多的自定义选项,所以我的下一个选择是扩展库中的REST服务。

该应用程序在与Domino分离的域上运行,因此我需要添加CORS头以使该场景正常工作。使用CORS,浏览器(对于某些请求)首先向服务器发出飞行前HTTP OPTIONS请求,以检查允许使用哪些方法(更多关于CORS的信息,请点击此处:http://www.html5rocks.com/en/tutorials/cors/)。

我现在遇到的问题是Domino在OPTIONS请求上抛出一个Method Not Allowed错误(响应代码405)。我已经将它添加到了我的网站文档中允许的方法列表中(尽管我不确定REST服务是否会遵守这一点)。DAS可以很好地处理该请求。

从扩展库中RestDocumentJsonService的源代码来看,OPTIONS方法似乎根本不受支持。

你有什么想法吗?或者为了解决问题?我知道我可以编写自己的servlet或在Domino前面安装代理,但我不想走那条路(现在;-)

如果您试图使用经过身份验证的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

不幸的是,您只能通过网站文档添加3个标题

您不能通过Phase Listener添加任何内容,因为ExtLib Rest Services不通过XSP Phases

你可以使用像nginx这样的代理,或者在我的情况下,我使用了IHS

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

或者,您可以推出自己的REST服务,并添加您想要的任何头。

标记,只是一个快速注释。我不确定这对你是否有效。

但我在当前项目中所做的是将Angular应用程序放在NSF的WebContent文件夹中。这有几个目的——其中之一是在同一NSF中使用正确版本的后端代码易于部署。我已经为源代码管理设置了数据库,并直接在NSF的磁盘项目中编辑Angular部分,只需在需要运行时同步它们。作为副作用,此设置还将解决任何CORS问题,因为客户端代码是从调用REST服务的同一域启动的;-)

/John

最新更新