【发布时间】:2019-11-18 21:05:24
【问题描述】:
我在 Google Compute Engine 上部署了一个 node.js API 和一个网站,一切都在我的本地机器上运行良好,而且它们都单独运行良好,但每当我调用我的 API 时,我都会收到以下信息:
Access to XMLHttpRequest at 'my-api-domain' from origin 'my-website-domain' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
我使用 express 并且我使用 cors 中间件来处理 CORS,它可以在我的机器上运行,但似乎 google 禁用了这种响应标头。
我的快速设置
const express = require('express')
const bodyParser = require('body-parser')
const user = require('../routes/user')
const cors = require('cors')
module.exports = function(app) {
app.use(cors())
app.use(express.json())
app.use( bodyParser.json())
app.use(bodyParser.urlencoded({
extended: true
}))
}
注意:
我尝试从浏览器向 api 发送一个 get 请求,它可以工作,我在响应标头中收到 access-control-allow-origin: *!
但是当我从网站的来源调用相同的端点时,这些标头不会被发送。
【问题讨论】:
-
你的架构是什么?您是否直接访问您的虚拟机?您是否在服务器前使用负载均衡器或其他层?
-
浏览器在 devtools 控制台中记录的确切错误消息是什么?响应的 HTTP 状态码是什么?您可以使用浏览器开发工具中的网络窗格进行检查。是 4xx 还是 5xx 错误而不是 200 OK 成功响应?