CORS 過濾器

跨來源資源共享(CORS)是一種在資源上強制執行用戶端存取控制的方法,透過指定能夠存取您的網域的特定或所有路由的外部網域。瀏覽器使用 HTTP 標頭的存在來判斷是否允許來自不同來源的回應。

為了幫助演示 front-envoy 如何強制執行 CORS 策略,我們發佈了一組 docker compose 沙箱,這些沙箱在不同的來源上部署前端和後端服務,都在 front-envoy 後面。

前端服務有一個欄位可以輸入後端服務的遠端網域,以及選擇遠端網域 CORS 強制的單選按鈕。CORS 強制選項為

  • 已停用:CORS 在請求的路由上已停用。這將導致用戶端 CORS 錯誤,因為不存在被視為有效 CORS 請求所需的標頭。

  • 開放:CORS 在請求的路由上啟用,但允許的來源設定為 *。這是一個非常寬鬆的策略,表示任何來源都可以從此端點請求資料。

  • 受限:CORS 在請求的路由上啟用,並且唯一允許的來源是 envoyproxy.io。這將導致用戶端 CORS 錯誤。

步驟 1:啟動所有容器

切換到 examples/cors/frontend 目錄,並啟動容器

$ pwd
envoy/examples/cors/frontend
$ docker compose pull
$ docker compose up --build -d
$ docker compose ps

          Name                          Command              State                    Ports
-----------------------------------------------------------------------------------------------------------
frontend_front-envoy_1        /docker-entrypoint.sh /bin ... Up           10000/tcp, 0.0.0.0:8000->8000/tcp
frontend_frontend-service_1   python3 /code/service.py   ... Up (healthy)

現在,切換到 cors 範例中的 backend 目錄,並啟動容器

$ pwd
envoy/examples/cors/backend
$ docker compose pull
$ docker compose up --build -d
$ docker compose ps

          Name                         Command             State                            Ports
-----------------------------------------------------------------------------------------------------------------------------------
backend_backend-service_1   python3 /code/service.py   ... Up (healthy)
backend_front-envoy_1       /docker-entrypoint.sh /bin ... Up             10000/tcp, 0.0.0.0:8002->8000/tcp, 0.0.0.0:8003->8001/tcp

步驟 2:測試 Envoy 的 CORS 功能

您現在可以開啟瀏覽器,在 https://127.0.0.1:8000 查看您的前端服務。

跨來源請求的結果將顯示在頁面上的「請求結果」下方。

您瀏覽器的 CORS 強制日誌可以在瀏覽器主控台中找到。

例如

Access to XMLHttpRequest at 'http://192.168.99.100:8002/cors/disabled' from origin 'http://192.168.99.101:8000'
has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

步驟 3:透過管理介面檢查後端狀態

當 Envoy 執行時,如果設定了連接埠,它可以監聽 admin 請求。

在範例組態中,後端管理介面綁定到連接埠 8003

如果您瀏覽至 https://127.0.0.1:8003/stats,您將能夠查看後端的所有 Envoy 狀態。當您從前端叢集發出請求時,您應該會看到無效和有效來源的 CORS 狀態遞增。

http.ingress_http.cors.origin_invalid: 2
http.ingress_http.cors.origin_valid: 7

另請參閱

Envoy 管理快速入門指南

Envoy 管理介面的快速入門指南。