为了账号安全,请及时绑定邮箱和手机立即绑定

前端页面发送请求post方式出错,打印的是Access-Control-Allow-Origin

前端页面发送请求post方式出错,打印的是Access-Control-Allow-Origin

MMMHUHU 2019-03-22 19:15:23
后端 expressapp.all('*', function(req, res, next) {    res.header("Access-Control-Allow-Origin", "*");    res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');    res.header("Access-Control-Allow-Headers", "X-Requested-With");    res.header('Access-Control-Allow-Headers', 'Content-Type');    next();});前端 axiosimport axios from 'axios'axios.defaults.baseURL = "http://localhost:5001"var formdata = new FormData();formdata.append('file', f);axios({    url: '/',    method: 'post',    data: formdata,    headers: {'Content-Type': 'multipart/form-data', 'Access-Control-Allow-Origin': '*'}})    .then(function (res) {         console.log(res)    })    .catch(function (err) {         console.log(err)    })在express这个代码上已经加了 app.all这套响应头代码,在前端发送请求为什么还那样问题?
查看完整描述

4 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

非简单请求和后端设置问题

给你过一遍流程

你请求的时候设置了Access-Control-Allow-Origin

所以请求变成了非简单请求 浏览器会先发出预检OPTIONS请求

携带请求头信息会多出下面 (你的请求为例)


Access-Control-Request-Headers: access-control-allow-origin

Access-Control-Request-Method: POST

Origin: http://你的地址

结果你服务端设置了res.header('Access-Control-Allow-Headers', 'Content-Type');

没有支持access-control-allow-origin

所以预检没通过

抛出错误Request header field ser is not allowed by Access-Control-Allow-Headers in preflight response.


1) 删掉前端的 Access-Control-Allow-Origin 变成简单请求 你前端设置的Access-Control-Allow-Origin也没啥作用

2) 设置后端 res.header('Access-Control-Allow-Headers', 'Content-Type,Access-Control-Allow-Origin');


查看完整回答
反对 回复 2019-04-03
?
慕标5832272

TA贡献1966条经验 获得超4个赞

----- update

我有点半瓶水乱晃的意思了。

刚刚使用 express 测试了一下, xhr 对象也会触发预检。

fetch 也会触发预检,之前答的是错误的。


查看完整回答
反对 回复 2019-04-03
?
largeQ

TA贡献2039条经验 获得超7个赞

你express监听的端口是5001?端口正确的话建议你用cors包


// npm install cors

let cors = require('cors')

app.use(cors())

app.post('/', function (req, res, next) {

  console.log(111)

})


查看完整回答
反对 回复 2019-04-03
?
手掌心

TA贡献1942条经验 获得超3个赞

我建议检查一下设置有没有生效,打开 network 面板看一下 response header 先。


查看完整回答
反对 回复 2019-04-03
  • 4 回答
  • 0 关注
  • 2675 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号