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 管理介面的快速入門指南。