前后端数据交互 ---- 跨域请求

跨域请求

nodejs后台配置的两种方案(响应时)
1. res.setHeader(‘Access-Control-Allow-Origin’, req.headers.origin); 允许跨越
2. cors 中间件 (如果后端配置了中间件,前端不需要设置请求头)
需求:服务器跨域给前端写cookie

//cors中间件
var cors = require('cors');

app.use(cors({
    "origin": "*",
    "methods": "GET,HEAD,PUT,PATCH,POST,DELETE",
    "preflightContinue": false,
    "optionsSuccessStatus": 204
}));

跨源凭据:
ajax跨源请求不提供凭据(cookie、HTTP认证及客户端SSL证明等)


前端:设置ajax的请求带凭据

withCredentials=true

后端:接受后http必须做出对应的响应:

Access-Control-Allow-Credentials: true
nodejs:
router.get('/cookies', function(req, res){
    res.setHeader('Access-Control-Allow-Origin',
    req.headers.origin); //允许跨越
    res.setHeader('Access-Control-Allow-Origin', '*');                 //允许所有跨越
    res.setHeader('Access-Control-Allow-Credentials', true);//告诉客户端可以在HTTP请求中带上Cookie(凭证数据),客户端可以不带
}

前端原生:请求头里面带凭证,带cookie

var xhr = new XMLHttpRequest();
xhr.open("post", "xxx/xxx", true);
xhr.withCredentials = true;    //放在 open 方法后面比较靠谱
xhr.onload = function(){}
xhr.send("a=1&b=2");

前端jqAjax: 请求头里面带凭证,带cookie

$.ajax({
    type:'get',
    url:"http://localhost:3000/logouts",
    dataType:"json",
    xhrFields: {
       withCredentials: true
    },
   success:function(data){
       console.log(data);
   }
})

前端:axios 请求头里面带凭证,带cookie

axios.defaults.withCredentials=true

前端:fetch 请求头里面带凭证,带cookie

fetch('http:localhost:3000/cookies', {
    credentials: 'include', //凭证
    method:'get',
    headers:{
       'Accept':'application/json,text/plain,*/*',
       'Content-type':'application/x-www-form-urlencoded;charset=utf-8'
   },
   body:数    据
}).then(function(res) {
        // ...
})
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值