localhost webapp 上的本地开发和 Cors 策略阻止的 localhost 访问
Posted
技术标签:
【中文标题】localhost webapp 上的本地开发和 Cors 策略阻止的 localhost 访问【英文标题】:local development on localhost webapp and localhost access blocked by Cors policy 【发布时间】:2019-11-18 20:06:27 【问题描述】:我正在尝试开发 web 应用程序和 api,但我遇到了 cors 阻塞。 这对我来说有点新,但我想变得更好。
所以我有一个用于 api 的快速服务器:
const express = require('express')
const cors = require('cors')
const app = express()
module.exports = app.post('/posttest/', cors(), async (req, res, next) =>
res.header('Access-Control-Allow-Origin', '*');
res.json( msg: 'WHOAH with CORS it works!' )
)
这是在 http://localhost:3000 本地提供的 “posttest”是我路线的上述模块。
const posttest = require('./src/routes/posttest.js')
const server = require('http').createServer();
const Router = require('express');
server
.on(
'request',
Router( mergeParams: true )
.use( posttest )
)
.on('listening', () =>
console.log('listeing');
)
.on('error', () =>
console.log('ERROR!!!!');
)
.listen(3000);
然后我的网络应用程序使用 fetch 发出 Post 请求:
fetch('http://localhost:3000/posttest/',
method: 'POST',
headers:
'Content-Type': 'application/json',
,
body: JSON.stringify(text:'test'),
mode: 'cors' ) .then( (res) => //resolve ) .catch( (err) => //error );
我还应该提到,Web 应用程序在 localhost:8080 本地提供服务
所以问题是,当我尝试发出发布请求时,我得到了
以下错误。访问 'http://localhost:3000/posttest/' 获取 来自原点 'http://localhost:8080' 已被 CORS 策略阻止: 对预检请求的响应未通过访问控制检查:否 请求中存在“Access-Control-Allow-Origin”标头 资源。如果不透明的响应满足您的需求,请设置请求的 模式为“no-cors”以获取禁用 CORS 的资源。
为了它的价值,我正在使用 chrome。
那么这里发生了什么?我认为如果我包含res.header('Access-Control-Allow-Origin', '*');
它将解决我的问题。 Postman 可以成功访问路由。但是当我使用浏览器时,它会被拒绝。如果我将服务器和 Web 应用程序投入生产,也会发生同样的事情。我错过了什么?你能像我五岁一样解释吗?
提前感谢您的所有帮助。
【问题讨论】:
你不必手动设置res.headers
,这就是cors()
所做的。
【参考方案1】:
pre-flight request 是一个OPTIONS
请求,您的cors()
处理程序仅附加到POST
请求(通过.post
)。使用
app.use(cors());
全局禁用 CORS(并回答飞行前的问题)。你也可以enable pre-flight requests单条路线:
app.options("/posttest/", cors());
app.post('/posttest/', cors(), async (req, res, next) =>
res.json( msg: 'WHOAH with CORS it works!' );
);
【讨论】:
谢谢。我还注意到,我没有使用 'Content-Type': 'application/json' ,而是使用 'Content-Type': 'application/x-www-form-urlencoded' 或 text/plain 它可以工作。尝试使用 json 来标记安全问题对吗?以上是关于localhost webapp 上的本地开发和 Cors 策略阻止的 localhost 访问的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot webapp localhost only
在本地部署在影响 javascript 游戏引擎中编码的 webapp,导致 Chrome 上的 CORS
eclipse部署web项目至本地的tomcat但在webapps中找不到
eclipse部署web项目至本地的tomcat但在webapps中找不到问题
在tomcat下部署 在webapps下的war包 的项目能不能直接通过localhost:8080访问不加项目名,急!在线等