天天看點

SAP Spartacus CORS 設定Project Properties FileCommerce Cloud Manifest ConfigurationImpex

CORS 是 Web 上的一種标準機制,它使來自 Web 應用程式的跨域請求能夠到達不同域上的伺服器。 隻要響應中沒有所需的 HTTP 标頭,浏覽器就會阻止跨源請求。

響應标頭由伺服器指定,這就是為什麼必須設定伺服器以生成正确的标頭的原因。 在 SAP Commerce Cloud 後端,可以使用 CorsFilter 以通用方式配置這些标頭。 可以使用項目屬性為每個節點配置此屬性,或者可以使用 ImpEx 安裝腳本安裝到每個節點。

SAP Commerce 支援跨域資源共享機制。 CORS 機制為浏覽器和伺服器定義了一種方式,可以決定允許或不允許對受限資源的跨域請求。

想象一下

http://www.example.com/somepage.html 上的腳本想要從 https://www.example.com:87/resources

通路資源。 您的浏覽器将這兩個位址視為兩個不同的來源,它将阻止 /somepage.html 腳本從 /resources 擷取資源。 通過以接受 /somepage.html 請求的方式準備 CORS 配置,可以安全地放寬此限制。

Enabling CORS Support in SAP Commerce Extensions

要在 SAP Commerce 擴充中啟用 CORS 支援,請将這些部分包含在所選擴充的 [extname]-web-spring.xml 檔案中。

extname-web-spring.xml:

SAP Spartacus CORS 設定Project Properties FileCommerce Cloud Manifest ConfigurationImpex

Configuring CORS in SAP Commerce Web Applications

Global Cluster Configuration

CORS 配置存儲在 CorsConfigurationProperty 項内的資料庫中。 它是全局的,适用于連接配接到叢集的所有節點。

要編輯您的配置,請在背景轉到系統 CORS 過濾器 CorsConfigurationProperty 并建立或修改 CorsConfigurationProperty 類型的執行個體。

SAP Spartacus CORS 設定Project Properties FileCommerce Cloud Manifest ConfigurationImpex

CORS Headers

allowedOrigins

在開發中,允許的來源通常用星号 (*) 配置,這會将所有用戶端列入許可名單,無論其域如何。 在生産環境中,這應該包含允許與後端 API 互動的不同域。

allowedMethods

允許的标頭必須包括所有允許使用的 HTTP 方法。 對于斯巴達克斯,需要配置以下方法:

GET HEAD OPTIONS PATCH PUT POST DELETE

allowedHeaders

allowed headers 設定訓示允許跨域請求的 HTTP 标頭。如果這些标頭不允許跨域,Spartacus 将不會收到特定請求的響應。大多數标頭是标準标頭,但您可能需要一些特定于功能的标頭。以下清單提供了可以使用的所有标頭的概述。

SAP Spartacus CORS 設定Project Properties FileCommerce Cloud Manifest ConfigurationImpex

allowCredentials

請求憑證(Request credentials)與 cookie、授權标頭或 TLS 用戶端證書有關。預設情況下,這些在跨域請求中是不允許的,這就是為什麼在未應用配置時請求會被阻止的原因。

在 Spartacus 庫的 1.x 版中,Spartacus 沒有發送 cookie,但從 2.0 版開始,将為每個 OCC 請求發送 cookie。這也已修補到 Spartacus 庫的 1.4 和 1.5 版。

需要發送 cookie 才能獲得“會話親和力”,也稱為“粘性會話”。會話親和性意味着 API 端點後面的同一伺服器用于同一會話的所有後續請求。盡管 Commerce API 是無狀态的,但有時多個并行或順序調用可能會失敗。例如,“添加到購物車”請求後跟“加載購物車”請求可能會失敗,因為第一個請求可能會在伺服器 1 上結束,而緊随其後的第二個請求可能會在伺服器 2 上結束。伺服器可能不夠快,無法發送緩存失效,這就是為什麼第二個響應可能無法捕獲添加的項目。

會話親緣關系的另一個優點是,如果對同一會話的請求由同一伺服器提供服務,則後端将獲得性能改進。

為此,CCv2 公開了一個響應 cookie (ROUTE),訓示用于處理 API 請求的處理伺服器。每當用戶端将此 cookie 添加到下一個請求中時,該請求由同一伺服器處理。

Setting Up CORS

後端需要的各種CORS配置可以通過以下方式安裝:

使用配置屬性(configuration properties)在部署期間安裝它們

在部署期間使用 Commerce Cloud 清單檔案(manifest.json)安裝它們

使用 ImpEx 腳本在運作時安裝它們

使用 Backoffice 在運作時手動配置它們

OCC 由名為 commercewebservices 的模闆擴充(template extension)安裝。 但是,您可以重命名擴充 Web 應用程式路徑,或從中生成自定義擴充。 在下一節的示例中,我們假設名稱為 commercewebservices,但如果您有自定義名稱,則應替換它。

大多數配置僅适用于 OCC,但如果您使用其他 API(例如輔助服務子產品),您還需要為這些 API 配置 CORS。

Project Properties File

如果按屬性安裝CORS過濾器配置,則必須添加以下屬性:

SAP Spartacus CORS 設定Project Properties FileCommerce Cloud Manifest ConfigurationImpex

Commerce Cloud Manifest Configuration

如果您使用 Commerce Cloud 清單檔案安裝 CORS 過濾器配置,請将以下标頭添加到清單檔案:

SAP Spartacus CORS 設定Project Properties FileCommerce Cloud Manifest ConfigurationImpex

Impex

如果您想在初始化期間、更新期間或使用 Hybris 管理控制台手動安裝 CORS 過濾器配置,您可以使用以下 ImpEx 腳本。

SAP Spartacus CORS 設定Project Properties FileCommerce Cloud Manifest ConfigurationImpex