CORS对IBM连接API的支持

CORS对IBM连接API的支持,cors,ibm-connections,Cors,Ibm Connections,我们正在编写一个独立的JavaScript应用程序,它必须通过Connections API在IBM Connections社区中创建Wiki页面。但是,浏览器会阻止对Connections API的请求,因为Connections API上未配置跨源资源共享(CORS) 是否可以将connections API配置为允许来自所有内部应用程序的请求,例如*.our company.com?我们正在运行Connections v5.0。是的,这是可能的。您只需在IHS中配置即可!此配置代码段可能对

我们正在编写一个独立的JavaScript应用程序,它必须通过Connections API在IBM Connections社区中创建Wiki页面。但是,浏览器会阻止对Connections API的请求,因为Connections API上未配置跨源资源共享(CORS)


是否可以将connections API配置为允许来自所有内部应用程序的请求,例如
*.our company.com
?我们正在运行Connections v5.0。

是的,这是可能的。您只需在IHS中配置即可!此配置代码段可能对您有用:

RewriteCond %{HTTP:Origin} (.+\.<yourdomain>\.com) [NC]
RewriteRule .* - [E=acceptorigin:%1]
Header set Access-Control-Allow-Origin %{acceptorigin}e env=acceptorigin
Header set Access-Control-Allow-Credentials true env=acceptorigin
Header set Access-Control-Allow-Methods "POST, GET, HEAD" env=acceptorigin 
Header set Access-Control-Max-Age 3600 env=acceptorigin 
Header set Access-Control-Allow-Headers Content-Type env=acceptorigin
RewriteCond%{HTTP:Origin}(.+\.\.com)[NC]
重写规则。*-[E=acceptorigin:%1]
标头集访问控制允许源代码%{acceptorigin}e env=acceptorigin
标头集访问控制允许凭据true env=acceptorigin
标题集访问控制允许方法“POST、GET、HEAD”env=acceptorigin
标题集访问控制最大年龄3600环境=acceptorigin
标题集访问控制允许标题内容类型env=acceptorigin

Daniel的答案是一个很好的起点,适用于简单的跨源请求,但我发现对于状态更改、预先触发的请求,还有一些障碍需要克服。在通过取消IBM HTTP Server httpd.conf文件中相应行的注释来启用Apache重写模块之后,我的解决方案是将以下内容添加到VirtualHost区域:

RewriteEngine on
RewriteCond %{HTTP:Origin} ^(http(s)?://mysubdomain.mydomain.com)$ [NC]
RewriteRule .* - [E=acceptorigin:%1]
Header always set Access-Control-Allow-Origin %{acceptorigin}e env=acceptorigin
Header always set Access-Control-Allow-Credentials true env=acceptorigin
Header always set Access-Control-Allow-Methods "POST, GET, HEAD, OPTIONS, DELETE, PUT" env=acceptorigin 
Header always set Access-Control-Max-Age 3600 env=acceptorigin 
Header always set Access-Control-Allow-Headers Content-Type env=acceptorigin

RewriteCond %{HTTP:Origin} ^(http(s)?://mysubdomain.mydomain.com)$ [NC]
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule .* - [R=200,L]

RequestHeader unset Origin env=acceptorigin
(当然,Daniel对域使用了一个更通用的正则表达式:我只需要一个特定的原点,因此进行了相应的配置。)

“始终设置”对于预装跨域请求很重要,这些请求在发出实际请求之前向服务器发送选项请求。在这里,“总是”意味着“甚至将这些标题放在错误响应上”。连接不知道如何处理选项请求并返回错误;我通过设置标题来处理这个问题,然后将状态代码重新写入200(浏览器仍然会收到警告错误的文本,但并不在意)


您不需要最后一行“unset”就可以通过web服务器,但至少Connections API的某些部分会拒绝使用403打开原始标头的POST请求。为了解决这个问题,如果头与我允许的源匹配,我会在IBM WebSphere Application Server获得它之前从请求中删除源头。

IBM Connections 5.5可以直接处理CORS。您需要向LotusConnections-config.xml添加两个自定义属性:

<genericProperty name="CORS.Trusted.Websites">mydom1.com, mydom2.com</genericProperty>
<genericProperty name="CORS.Expose.Headers">Content-Encoding, Content-Length</genericProperty>
mydom1.com,mydom2.com
内容编码,内容长度
详情可在此找到:


仅链接答案实际上不是“答案”,请尝试提供实施或解决方案的示例,而不仅仅是链接,将链接用作参考,而不是答案本身。链接将引出一个简短的分步指南。仅仅复制必要的步骤不是一种糟糕的模式吗?