http请求跨域问题分析
http请求跨域问题分析
个人认为可能涉及很多http的知识,本人才疏学浅不敢妄自揣测,只是做个笔记为了以后对比理解,从原生fetch说起吧,前提假设有个后端服务,我用express来模拟,如下:
var express = require('express');
var app = express();
app.get('/stduy-cors', (req, res) => {
res.status(200).json({
hello: true,
world: false
});
});
app.listen(5555);
上面是服务端代码,假设前端服务在3000端口,我们在上面的代码下可以这样调用:
fetch('http://localhost:5555/cors', {
mode: 'no-cors'
}).then(res => {
console.log(res.type); //opaque
// 此时无法转为json,因为这种type下无法读取响应内容
return res.json(); // 报错
});
注意你不能用js拿到响应内容,但是可以用谷歌浏览器控制台查看。
常见解决方案
- 做一层中间层,服务端调服务端是没有跨域的,可以用node或ngix做中间层转发,这种方案比较常见。
- 服务端修改响应头,客户端修改请求头。
var express = require('express');
var app = express();
app.use((req, res, next) => {
res.header('Access-Control-Allow-Credentials', true);
res.header('Access-Control-Allow-Origin', 'http://your-ip:your-port');
next();
});
app.get('/stduy-cors', (req, res) => {
res.status(200).json({
hello: true,
world: false
});
});
app.listen(5555);
客户端如下调用接口:
fetch('http://localhost:5555/cors', {
mode: 'cors'
}).then(res => {
return res.json(); // 正确
}).then(res => {
console.log(res);
});
客户端传入mode: 'cors', 服务端加上Access-Control-Allow-Credentials为true, 和Access-Control-Allow-Origin为你的ip+端口, 后者不能为通配符*, 想必这是处于安全策略, 暂时就写到这,后面再补。
http请求跨域问题分析的更多相关文章
- 在ABP的Web层中实现复杂请求跨域访问
在最近的项目中,后端使用ABP,前端采用React,前后端完全分离.其中大部分接口都通过WebApi层调用,项目中未使用Session.但最后在添加一个网站的验证码验证留言功能时,使用了Session ...
- 前后端分离框架前端react,后端springboot跨域问题分析
前后端分离框架前端react,后端springboot跨域问题分析 为啥跨域了 前端react的设置 springboot后端设置 为啥跨域了 由于前后端不在一个端口上,也是属于跨域问题的一种,所以必 ...
- day78_淘淘商城项目_11_单点登录系统实现 + 用户名回显 + ajax请求跨域问题详解_匠心笔记
课程计划 1.SSO注册功能实现 2.SSO登录功能实现 3.通过token获得用户信息 4.ajax跨域请求解决方案--jsonp 1.服务接口实现 SSO系统就是解决分布式环境下登录问题的,本 ...
- 百万年薪python之路 -- 请求跨域和CORS协议详解
楔子 什么是同源策略 同源策略,它是由Netscape提出的一个著名的安全策略.现在所有支持JavaScript 的浏览器都会使用这个策略.所谓同源是指,域名,协议,端口相同.当一个浏览器的两个tab ...
- django 前端请求跨域问题解决
django 前端请求跨域问题解决 笔者之前在做django-restful-api开发的时候,在前端请求页面发送请求的时候直接出现301,域名重定向的问题,经过一番查阅资料,终于得到了非常完美的解决 ...
- easy ui Tree请求跨域数据
扯淡篇: jQuery EasyUI为提供了大多数UI控件的使用,如:accordion,combobox,menu,dialog,tabs,validatebox,datagrid,window,t ...
- Vue(项目踩坑)_解决vue中axios请求跨域的问题
一.前言 今天在做项目的时候发现axios不能请求跨域接口 二.主要内容 1.之前直接用get方式请求聚合数据里的接口报错如下 2.当前请求的代码 3.解决方法 (1)在项目目录中依次找到:confi ...
- 关于ajax请求跨域问题
jQuery中的异步请求跨域的方法: xhrFields: {withCredentials: true} 当设置为 true时,表示允许跨域: false时,表示禁止跨域
- [php-cookie] cookie 请求跨域,如何共享
cookie 请求跨域的问题, 假设我有两个域名,一个 m.example.com,另一个是 www.example.com . 那么我需要如何设置 cookie 才可以在这两个域名都实现共享呢? / ...
随机推荐
- zabbix-server一键部署
最近想写一个zabbix脚本,自己尝试几次,能够实现,但是太糙了,在github上发现一个很好,谢谢作者脚本作者:火星小刘 web:www.huoxingxiaoliu.com email:xtlyk ...
- C# 获取应用程序几种方式的区别
// 获取程序的基目录.System.AppDomain.CurrentDomain.BaseDirectory 这种方式 无论什么权限 获取的也只是应用程序的启动路径 // 获取模块 ...
- 二叉排序树(Binary Sort Tree)
1.定义 二叉排序树(Binary Sort Tree)又称二叉查找(搜索)树(Binary Search Tree).其定义为:二叉排序树或者是空树,或者是满足如下性质的二叉树: ① 若它的左子树 ...
- Confluence 6 预览一个文件
当你浏览一个页面的时候,单击一个图片,文件缩略图或者链接将会运行预览. 预览视图包括了从远程 Web 页面导入的图片文件和已经附加到页面中的文件(尽管有可能这些文件没有在页面中显示). 在预览中你可以 ...
- Celery分布式异步任务框架
一.什么是Celery Celery是一个简单.灵活且可靠的,处理大量消息的分布式系统.专注于实时处理的异步任务队列,同时也支持定时任务 二.Celery架构 1.Celery的架构由三部分组成: 消 ...
- linux 下使用命令查看jvm信息
java程序员除了编写业务代码之外,特别是项目上线之后,更需要关注的是系统的性能表现,这个时候就需要了解一下jvm的性能表现了,可以借助于java虚拟机自带的一些分析工具,主要有三个常用的命令. 1. ...
- CentOS 7,使用yum安装Nginx
https://www.centos.bz/2018/01/centos-7%EF%BC%8C%E4%BD%BF%E7%94%A8yum%E5%AE%89%E8%A3%85nginx/ 文章目录 [隐 ...
- cmd 查看域名对应的 IP
1.cmd nslookup 2.输入 域名,例如:www.baidu.com
- for 循环 以及 for 循环的嵌套
格式:for (; ; ) 打印20遍你好 ; i <= ; i++) { Console.WriteLine("你好"); } 输入一个整数,计算从1加到这个数的结果 Co ...
- DeepFaceLab: 可视化交互式合成功能简介!
DeepFaceLab在沉寂了几个月后(目测Iperov同志讨生活去了),在8月下旬又迎来了重大更新.我总结了一下,主要是更新了三大功能. 新增Avatar模型 交互式转换器 半脸模型支持FAN ...