我的帶有 angular 前端和 springboot 后端的應用程式正在嘗試從 Angular 前端對 PayPal API 之一進行 REST POST 呼叫。該應用程式部署為 GCP 虛擬機實體中的 Docker 容器。如果我在禁用網路安全的情況下不打開 Broser,我會收到錯誤
"Access to XMLHttpRequest at 'https://pilot-payflowpro.paypal.com/' from origin 'http://myserverip' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource."
我在 SO 和其他人中看到了很多關于這個問題的答案,在 httpd.conf / .htaccess 檔案中添加了標題。但我沒有這兩個檔案。我嘗試向 Dockerfile 添加標頭,并向 docker-compose.yaml 檔案添加命令。還嘗試在角度代理組態檔中添加結束 URL。它都沒有奏效。
有什么方法可以在 docker 組態檔或服務器本身中啟用 CORS。docker-compose.yml
image: docker.image.link
privileged: true
ports:
- '80:8080'
restart: 'no'
volumes:
- '/var/sftp/upload:/usr/share/invoice/invoiceFile'
environment:
- SPRING_PROFILES_ACTIVE=docker
- DB_CONN_STRING=jdbc:postgresql:url
- DB_USER=postgres
- DB_PASS=postgres
- HOST_NAME=hostname
- SMTP_HOST=smtphost
- SMTP_PORT=25
- SMTP_AUTH_TRUE_FALSE=false
檔案
FROM openjdk:8-jdk-alpine
ARG JAR_FILE
ADD target/${JAR_FILE} /usr/share/application.jar
ADD template/ /usr/share/template
VOLUME /tmp
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/usr/share/application.jar"]
uj5u.com熱心網友回復:
CORS 錯誤是當來自后端的請求回應沒有正確的標頭告訴瀏覽器此客戶端可以執行/查看請求時瀏覽器發出的錯誤。
因此,在您的情況下,后端是 PayPal(https://pilot-payflowpro.paypal.com/ -> paypal.com)而不是您的后端,因此即使您向后端或前端添加任何標頭,問題仍然存在因為當您對https://pilot-payflowpro.paypal.com/執行請求時,唯一重要的標頭是來自此請求回應的標頭。
為了解決這個問題,https://pilot-payflowpro.paypal.com/需要發送正確的標頭回應以允許您執行此請求,我認為這是不可能的,因為安全原因。
有些端點不能從前端應用程式使用,只能從后端使用,我認為這是你的情況。
為避免 CORS 問題,您可以在后端創建一個呼叫https://pilot-payflowpro.paypal.com/的端點。因此,在您的前端,您呼叫后端端點,后端呼叫 PayPal API。
uj5u.com熱心網友回復:
呼叫 REST 呼叫是一種解決方案。另一種解決方案是在 Angular 的代理配置中屏蔽端點 URL。
"/paypal" : {
"target" : "https://pilot-payflowpro.paypal.com/",
"secure" : true,
"changeOrigin": true,
"pathRewrite":{
"^/paypal":""
}
}
并在我們必須進行 REST 呼叫的地方呼叫 /paypal。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/330635.html
標籤:angularjs docker-compose 贝宝 文件 支付宝
