IBM Connections 的 CORS 支持 API
CORS support for IBM Connections API
我们正在编写一个独立的 JavaScript 应用程序,它必须通过 Connections API 在 IBM Connections 社区中创建 Wiki 页面。但是,浏览器阻止了对连接 API 的请求,因为未在连接 API.
上配置跨源资源共享 (CORS)
是否可以配置连接 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
Daniel 的回答是一个很好的起点,适用于简单的 cross-origin 请求,但我发现 state-changing、pre-flighted 请求还有一些障碍需要克服。通过取消注释 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
(当然,大牛对域使用了更通用的正则表达式:我只需要一个特定的来源,所以相应地配置。)
"always set" 对于 pre-flighted cross-domain 请求很重要,它会在发出真正的请求之前向服务器发送一个 OPTIONS 请求。这里,"always" 表示 "even put these headers on error responses"。 Connections 不知道如何处理 OPTIONS 请求和 returns 错误;我通过设置 headers 来处理这个问题,然后 re-writing 将状态代码设置为 200(浏览器仍然会收到警告错误的文本,但并不关心)。
您不需要最后的 "unset" 行来通过 Web 服务器,但至少连接 API 的某些部分将拒绝具有 Origin 的 POST 请求header 出现 403。为了解决这个问题,如果 header 与我允许的来源相匹配,我会在 IBM WebSphere Application Server 获取它之前从请求中删除来源 header .
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>
可在此处找到详细信息:
我们正在编写一个独立的 JavaScript 应用程序,它必须通过 Connections API 在 IBM Connections 社区中创建 Wiki 页面。但是,浏览器阻止了对连接 API 的请求,因为未在连接 API.
上配置跨源资源共享 (CORS)是否可以配置连接 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
Daniel 的回答是一个很好的起点,适用于简单的 cross-origin 请求,但我发现 state-changing、pre-flighted 请求还有一些障碍需要克服。通过取消注释 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
(当然,大牛对域使用了更通用的正则表达式:我只需要一个特定的来源,所以相应地配置。)
"always set" 对于 pre-flighted cross-domain 请求很重要,它会在发出真正的请求之前向服务器发送一个 OPTIONS 请求。这里,"always" 表示 "even put these headers on error responses"。 Connections 不知道如何处理 OPTIONS 请求和 returns 错误;我通过设置 headers 来处理这个问题,然后 re-writing 将状态代码设置为 200(浏览器仍然会收到警告错误的文本,但并不关心)。
您不需要最后的 "unset" 行来通过 Web 服务器,但至少连接 API 的某些部分将拒绝具有 Origin 的 POST 请求header 出现 403。为了解决这个问题,如果 header 与我允许的来源相匹配,我会在 IBM WebSphere Application Server 获取它之前从请求中删除来源 header .
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>
可在此处找到详细信息: