我試圖建立一個簡單的App Engine的新實體,它與托管在Google Cloud Function上的后端功能進行通信。應用程式引擎受到IAP的保護,而Google云功能是私有的。GAE使用Angular Framework,GCF使用Node 14與Express。 .
我不能從 App Engine 訪問我的 GCF,因為請求被 CORS 阻止了。
在''從原點''訪問 XMLHttpRequest 被 CORS 政策阻止了。所請求的資源上沒有'Access-Control-Allow-Origin'頭。
我嘗試了流行的解決方案。
我嘗試了網路上流行的解決方案:
在GCF上使用cors librairie。所以我的GCF上有
var cors = require('cors')
app.use(cors({ credentials: true, origin: true }))
而且我還為每個請求添加了這一行
res.set('Access-Control-Allow-Origin', '*')
- 在我的app.yaml上添加http-header 。
handlers:
- url: /(.*.[A-Za-z0-9]{1,4})$
static_files: dist/1
upload: dist/(.*.[A-Za-z0-9]{1,4})$
http_headers:
Access-Control-Allow-Origin: "*"
- 網址。/(.*)$
static_files: dist/index.html
上傳:dist/index.html
http_headers:
Access-Control-Allow-Origin: "*"
但我仍然得到相同的錯誤資訊。
編輯:所以第一個問題是由于一個認證問題,這就是為什么錯誤有相同的回應。所以我決定將兩個應用程式部署在 App Engine 上,以簡化兩個服務之間的通信。
uj5u.com熱心網友回復:
- 你現在可以通過設定適當的 CORS 標頭來完全訪問 HTTP 請求/回復。 檔案。
- 為了讓你知道你所面臨的錯誤的原因,它是 因為當您的網路瀏覽器呼叫一個位于不同/跨域的服務時,它不會 瀏覽器呼叫不同/跨域的服務時,它不會立即發出HTTP請求,而是先發出OPTIONS請求。 而是先發出一個OPTIONS請求(一個預檢請求 并將結果中的Access-Control-Allow-Origin頭的值與當前域的值進行比較。 結果中的Access-Control-Allow-Origin頭的值與當前域進行比較,也就是說,它檢查這個(req.method ==='OPTIONS'),如果頭的值與主機相匹配,就進行實際呼叫,否則就停止行動,并拋出上述錯誤。 。
- 為了徹底理解上述概念,請看一下 這個stackoverflow 答案,并閱讀這個文章以了解更多資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/317562.html
標籤:
