cors 在本地主机上工作,但不在生产上
Posted
技术标签:
【中文标题】cors 在本地主机上工作,但不在生产上【英文标题】:cors working on localhost but not on production 【发布时间】:2018-08-01 03:55:23 【问题描述】:express cors 有一个奇怪的问题。我的 Cors 配置在 localhost 上运行良好,但不适用于生产。我总是收到这个错误。
加载失败 https://my-movie-db-backend-roberto.herokuapp.com/auth/login:回复 预检请求未通过访问控制检查:否 请求中存在“Access-Control-Allow-Origin”标头 资源。原点“https://my-movie-db-roberto.herokuapp.com”是 因此不允许访问。响应具有 HTTP 状态代码 503。 如果不透明的响应满足您的需求,请将请求的模式设置为 'no-cors' 来获取禁用 CORS 的资源。
这是我的 cors 配置:
import * as cors from "cors";
const corsConfig: cors.CorsOptions =
origin: ["https://my-movie-db-roberto.herokuapp.com", "http://localhost:3000"],
credentials: true,
methods: "GET,HEAD,OPTIONS,PUT,PATCH,POST,DELETE"
;
app.use(cors(corsConfig));
// add your routes
<MY-Routes>
// enabling pre-flight
app.options("*", cors(corsConfig));
我已经有一段时间了,我决定最好寻求帮助,谢谢;-)
【问题讨论】:
将"GET,HEAD,OPTIONS,PUT,PATCH,POST,DELETE"
更改为数组["GET,HEAD,OPTIONS,PUT,PATCH,POST,DELETE"]
这不是问题。该文档允许将方法设置为字符串。但是我尝试了数组方法,错误仍然存在
“响应的 HTTP 状态代码为 503” 解决了这个问题。它甚至可能根本与您的快递服务器无关。
【参考方案1】:
我尝试复制设置,发现如果源不在允许的源列表中,cors
库似乎不会发送 Access-Control-Allow-Origin
标头。
因此,请确保您在该选项的条目中没有任何拼写错误,或者先尝试使用“*”,然后再进行第二步细化。
这是我正在使用的代码:
服务器端
var express = require('express')
var cors = require('cors')
const app = express()
const corsConfig =
origin: ["http://testing.local", "https://my-movie-db-roberto.herokuapp.com", "http://localhost:3000"],
credentials: true,
methods: "GET,HEAD,OPTIONS,PUT,PATCH,POST,DELETE",
allowedHeaders: ['Content-Type']
;
app.use(cors(corsConfig));
enter code here
// add your routes
app.post('/', (req, res) => res.send('yay'));
// enabling pre-flight
app.options("*", cors(corsConfig));
app.listen(8080, () => console.log('serving...'))
客户 (http://testing.local):
fetch('http://localhost:8080/',
method: 'POST',
headers: 'Content-Type': 'application/json'
)
.then(r => r.text())
.then(console.log)
【讨论】:
【参考方案2】:显然问题根本不在 cors 上。后端服务器由于缺少一些被认为是开发依赖项的软件包而处于脱机状态,而 Heroku 没有安装它们。只需更改 Heroku 上的 isProduction 标志,现在一切正常。
【讨论】:
以上是关于cors 在本地主机上工作,但不在生产上的主要内容,如果未能解决你的问题,请参考以下文章
appengine python`PUT/DELETE`在本地主机上工作但不在服务器上
无法打开流:没有这样的文件或目录,但目录存在。在本地主机上工作但不在实时站点上工作[重复]