SAP的CORS启用
[TOC]
参考
参考Blog:How to Enable CORS on SAP NetWeaver Platform - Dong Pan && comment by Achim Braemer(除了blog本身,还可以关注下Achim Braemer的评论建议)
参考文档:SAP Help Portal : Editing Whitelists and No-Log Lists (CORS)
参考文档:在低于 7.52 版的 SAP NetWeaver 上启用 CORS
在高版本【7.52以及更高版本】
相关TCODE:RZ11、UCONCOCKPIT、SMICM
配置
1. 配置允许CORS参数
如果这个参数没有设置,那么所有的跨域请求都将被系统直接过滤,无法捕获
在 RZ11 修改参数 icf/cors_enabled
值为1
注意:通过动态方式修改的参数值会在服务器重启之后重置
2. 开启CORS
开启白名单场景
进入 UCONCOCKPIT,选择 HTTP白名单场景
(Http White-List Scenario)
首次开启会激活该场景
HTTP白名单激活对话框如果要撤销,通过左上角的 「HTTP白名单」 - 「还原旧配置」 ,然后会删除激活配置
开启CORS的 「 活动检查 」 模式
然后开启 「 活动检查 」
更改模式规则配置
之后可以双击CORS行进入配置白名单规则
但是为了方便,可以先产生一个跨域请求,系统就会捕获这个请求,针对这个请求,可以自动创建匹配白名单规则
选择未覆盖的规则,然后点击 「至白名单」
或者直接在右边「白名单」区域新建规则
前端调用CORS代码
用jquery调用会很简单
let xhr = new XMLHttpRequest();
xhr.onreadystatechange = () => {
console.log("xhr.readyState : " + xhr.readyState);
if (xhr.readyState == 4) {
console.log("xhr.status : " + xhr.status);
if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) {
console.log("xhr.responseText : " + xhr.responseText)
alert("收到消息:" + xhr.responseText);
}
else {
return "Req is unsuccessful : " + xhr.status;
}
}
}
xhr.open("POST", "$$请求地址$$");
xhr.setRequestHeader("Authorization","$$Basic basic基础验证串$$")
xhr.send();
其他辅助补充
查看连接请求
SMICM
SMICM SMICM-现实连接一次ajax请求,产生两次请求的原因
允许跨域资源共享(CORS)携带 Cookie,该文章介绍了CORS请求携带cookie信息的设置方式,同时也阐述了为什么有的CORS请求会产生两次请求。
在此之前需要了解什么是 简单跨域请求
,需求满足以下条件:
- Method只允许:GET/HEAD/POST
- Headers只允许出现 :
- Content-Type
- Accept
- Accept-Language
- Content-Language
- Last-Event-ID
- Content-Type只允许 :
- application/x-www-form-urlencoded
- multipart/form-data
- text/plain
不满足上述条件的即 复杂跨域请求
,会在正式请求前发出一个Method为OPTIONS的 预请求(preflight request)
用参考文章中的内容表示这个请求:
在低于 7.52 版的 SAP NetWeaver 上启用 CORS
参考文档:在低于 7.52 版的 SAP NetWeaver 上启用 CORS
以下内容系拷贝
先决条件
必须更新到 SAP 内核 7.49 PL 315 或更高版本。
背景信息
注意
如果 SAP BW 架构是在 SAP Web Dispatcher 背后运行,则应将这些更改应用到SAP Web Dispatcher
服务器,而不是 ABAP。
过程
1. 在 ABAP 服务器上创建新文件。
此文件将包含 CORS 重写规则。例如,/usr/sap/<SID>/SYS/profile/<cors_rewrite>。
2. 调整 ICM 参数来指向在步骤 1 中创建的文件。
可以在 ABAP 服务器的 SAP 配置文件参数设置中找到此参数。
例如,
icm/HTTP/mod_0 = PREFIX=/,FILE=<Path_To_CORS_Rewrite_File>
注意
使用创建的 CORS 重写文件的路径替换 <Path_To_CORS_Rewrite_File>。
3. 在重写文件中添加以下内容:
if %{HEADER:isSACOriginAllowed} = true
setHeader isSACOriginAllowed false
if %{HEADER:ORIGIN} regimatch ^(https:\/\/)?<HOSTNAME> [AND]
if %{PATH} regimatch (\/sap(\(.*\))*\/bw\/ina\/*)
setHeader isSACOriginAllowed true
if %{HEADER:isSACOriginAllowed} = true [AND]
if %{REQUEST_METHOD} regimatch (GET|POST)
begin
setResponseHeader Access-Control-Allow-Origin %{HEADER:ORIGIN}
setResponseHeader Access-Control-Expose-Headers x-csrf-token,sap-rewriteurl,sap-url-session-id,sap-perf-fesrec,sap-system
setResponseHeader Access-Control-Allow-Credentials true
setResponseHeader Vary origin
end
if %{HEADER:isSACOriginAllowed} = true [AND]
if %{REQUEST_METHOD} stricmp OPTIONS
begin
regRewriteUrl ^/(.*) /sap/public/ping
setResponseHeader Access-Control-Allow-Origin %{HEADER:ORIGIN}
setResponseHeader Access-Control-Allow-Methods GET,POST
setResponseHeader Access-Control-Allow-Headers x-csrf-token,x-sap-cid,authorization,mysapsso2,x-request-with,sap-rewriteurl,sap-url-session-id,content-type,accept-language
setResponseHeader Access-Control-Max-Age 600
setResponseHeader Access-Control-Allow-Credentials true
setResponseHeader Vary origin
removeResponseHeader Set-Cookie
removeResponseHeader Expires
end
注意
使用 SAP Analytics Cloud 主机替换 <HOSTNAME>。例如,mytenant.us1.sapanalytics.com。
注意
可以将多个主机添加到重写文件。有关详细信息,请参阅如何在 SAP NetWeaver 平台上启用 CORS。
网友评论