当前位置: 首页 > 知识库问答 >
问题:

后端和前端在不同端口上运行,CORS错误

缑嘉玉
2023-03-14

我在不同的端口(80008001)上运行后端和前端,无法从express服务器生成res.redirect(…),并且浏览器显示CORS错误(访问XMLHttpRequest at…)。

这是MEVN(Mongo,Express,Vue,Nodejs)应用程序,Vue前端和Express(nodejs)后端在不同的端口上运行。我在后端实现了cors(),它使我的前端可以发出请求(get,post),但后端仍然无法使用res.redirect("…")重定向前端页面,因为它显示CORS错误。

// Backend
var cors = require('cors');
app.use(cors())
...
function (req, res, next){  // some middleware on backend
  ...
res.redirect('http://urltofrontend');  // cause error


// Error msg on Chrome
Access to XMLHttpRequest at 'http://localhost:8001/' (redirected from 
'http://localhost:8000/api/login') from origin 'null' has been blocked 
by CORS policy: Request header field content-type is not allowed by 
Access-Control-Allow-Headers in preflight response.

我已经实现了cors(),它允许我的前端向我的后端发出超文本传输协议请求,并且运行良好。但是,后端的res.redirect(…)被CORS错误阻止了。

共有3个答案

杜茂
2023-03-14

使用CORS中间件,如

var enableCORS = function (req, res, next) {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
  res.header('Access-Control-Allow-Headers', 'Content-Type, token, Content-Length, X-Requested-With, *');
  if ('OPTIONS' === req.method) {
    res.sendStatus(200);
  } else {
    next();
  }
};
app.all("/*", function (req, res, next) {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
  res.header('Access-Control-Allow-Headers', 'Content-Type, token, Content-Length, X-Requested-With, *');
  next();
});
app.use(enableCORS);
田琛
2023-03-14

只是我的两分钱…

  1. 允许前端AlloweOrigin
  2. lowCreentals设置为true
  3. 不要为AlloweOrigin使用通配符(*)(同样,如果您正在处理cookie/身份验证)。使用协议主机端口[为什么]。

Golang示例(使用gorilla/handlers):

handlers.CORS(
    // allowCredentials = true
    handlers.AllowCredentials(),
    // Not using TLS, localhost, port 8080 
    handlers.AllowedOrigins([]string{"http://localhost:8080"}),
    handlers.AllowedMethods([]string{"GET", "POST", "PUT", "HEAD", "OPTIONS"}),
    handlers.AllowedHeaders([]string{"X-Requested-With", "Content-Type", "Authorization"}),
)
韶浩皛
2023-03-14

要解决浏览器中的CORS错误,您应该在响应中添加以下HTTP标头:

Access-Control-Allow-Headers: Content-Type

您可以通过添加以下代码来执行此操作:

app.use(cors({
  'allowedHeaders': ['Content-Type'],
  'origin': '*',
  'preflightContinue': true
}));
 类似资料:
  • 当我运行时,我收到这个错误: 我有一个客户端文件夹,其中包含Vue应用程序,该文件夹与我的api文件夹位于同一目录中,其中包含后端。 当我在正确的目录中单独运行启动脚本时,每个脚本都可以完美地独立运行。这是我的脚本: 我知道C:\Users\reaga\Desktop\Projects\weather-app-v3\api\client/package。json不存在,但我不知道它为什么会首先出现

  • 我试图在Angular 9中构建前端应用程序,在spring boot中构建后端应用程序。 使用KeyClope对用户进行身份验证和授权。 我在Key斗篷上创建了两个客户端,一个前端是公共访问类型,一个后端是仅承载的。 angular应用程序是使用本教程配置的https://www.npmjs.com/package/keycloak-angular spring boot应用程序配置了此应用程序

  • 本文向大家介绍Vue前后端不同端口的实现方法,包括了Vue前后端不同端口的实现方法的使用技巧和注意事项,需要的朋友参考一下 前端Vue 8080端口,后端Node.js 8085端口 主要记录下前后端不同端口遇到的问题 1、写服务器端程序,我的在(node_proxy/index.js)下 这段代码很重要,要是没有的话会出现 No 'Access-Control-Allow-Origin' hea

  • 这是我在这里的第一个问题。我已经花了几个小时阅读主题,但以前从未发过一个问题。 此刻我有2个项目:一个前端和一个后端。为了使开发更快、更容易、更简单,我想把这两个项目放在一起。我知道有些开发人员不喜欢这种架构方式,但在我的情况下,它是最好的解决方案,一个项目,包括前端和后端。 具体:在开发区运行一个debug-webserver,我的angular应用程序运行在eq localhost上,而我的s

  • 问题内容: 我的php文件位于端口80(默认端口),而我的ajax调用位于端口8080上。 我在端口8080上的index.html 我的PHP 我有点google,JSONP大多出来了。知道如何将其转换为JSONP吗? 有什么办法可以使其工作? 问题答案: 实施JSONP服务非常简单,您只需要一个 回调 GET参数,最后,打印一个包含与以JSON数据作为参数的函数调用等效的字符串: 然后,您可以

  • 问题内容: 我想更改mysql docker容器的默认公开端口,但是如果我尝试使用此命令: 这没用。 如果我使用标准端口3306:3306,则工作正常,但我想更改端口。有可能吗? 我已经尝试过-p 52000:3600,但是我总是得到: 问题答案: 您需要在(服务器的)首选TCP端口上映射容器端口3306: 所以对于你的mysql