技术分享
首页
  • JavaScript

    • 构造函数和原型
    • Cookie和Session
    • Object.create(null)和{}
    • TypeScript配置
    • typescript入门到进阶
  • 框架

    • Vue-Router
    • React基础入门
  • 其它

    • Http协议
    • 跨域问题总结
  • 分析Promise实现
  • Axios源码分析
  • Webpack原理
  • vueRouter源码分析
  • Vue

    • Vite快速搭建Vue3+TypeScript项目
    • Cordova打包Vue项目的问题
    • Vue将汉字转为拼音,取出首字母
  • JavaScript

    • new Function
  • 后端

    • Node.js中使用Crypto生成Token
    • Body-Parser处理多层对象的问题
  • 其它

    • 项目Demo汇总
    • Vuepress+Vercel搭建个人站点
    • 项目中能用到的
    • husky规范代码提交
  • Mongoose基础
  • Multer文件上传中间件的使用
  • JavaScript

    • 浅谈两数全等
    • JavaScript进制转换
    • 手写bind,apply,call和new
  • 算法

    • 数组去重和排序
    • 数组扁平化
    • 斐波那契数列
  • JavaScript 数据结构
  • 其它

    • webpack面试题
    • vite面试题
    • svg和canvas的优缺点
    • TypeScript面试题
    • Vue常见面试题
  • 计算机网络

    • 数据链路层
    • 网络层
  • Git的使用
  • Nginx的使用
  • CentOS7安装Nginx
  • 正则表达式
  • SEO搜索引擎优化
  • Serverless介绍
友链
GitHub (opens new window)

鑫生活

总有人要赢,为什么不能是我
首页
  • JavaScript

    • 构造函数和原型
    • Cookie和Session
    • Object.create(null)和{}
    • TypeScript配置
    • typescript入门到进阶
  • 框架

    • Vue-Router
    • React基础入门
  • 其它

    • Http协议
    • 跨域问题总结
  • 分析Promise实现
  • Axios源码分析
  • Webpack原理
  • vueRouter源码分析
  • Vue

    • Vite快速搭建Vue3+TypeScript项目
    • Cordova打包Vue项目的问题
    • Vue将汉字转为拼音,取出首字母
  • JavaScript

    • new Function
  • 后端

    • Node.js中使用Crypto生成Token
    • Body-Parser处理多层对象的问题
  • 其它

    • 项目Demo汇总
    • Vuepress+Vercel搭建个人站点
    • 项目中能用到的
    • husky规范代码提交
  • Mongoose基础
  • Multer文件上传中间件的使用
  • JavaScript

    • 浅谈两数全等
    • JavaScript进制转换
    • 手写bind,apply,call和new
  • 算法

    • 数组去重和排序
    • 数组扁平化
    • 斐波那契数列
  • JavaScript 数据结构
  • 其它

    • webpack面试题
    • vite面试题
    • svg和canvas的优缺点
    • TypeScript面试题
    • Vue常见面试题
  • 计算机网络

    • 数据链路层
    • 网络层
  • Git的使用
  • Nginx的使用
  • CentOS7安装Nginx
  • 正则表达式
  • SEO搜索引擎优化
  • Serverless介绍
友链
GitHub (opens new window)
  • js基础
  • vue入门
  • react基础入门
  • http协议
  • cookie和session
  • 跨域问题总结
    • 为什么会有跨域这个问题?
    • 什么是同源策略?
    • 非同源受到哪些限制?
    • 如何在开发中解决跨域问题
      • jsonp 解决跨域发送请求跨域问题
      • cors 解决跨域
  • 构造函数和原型
  • Object.create(null)和{}
  • TypeScript配置
  • Vue-Router
  • typescript入门到进阶
  • 前端
coderly
2020-05-02

跨域问题总结

# 跨域问题总结

# 为什么会有跨域这个问题?

原因是浏览器为了安全,而采用的同源策略(Same origin policy)

# 什么是同源策略?

  1. 同源策略是由 Netscape 提出的一个著名的安全策略,现在所有支持 JavaScript 的浏览器都会使用这个策略。
  2. Web 是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现
  3. 所谓同源是指:协议、域名、端口必须要完全相同。即:协议、域名、端口都相同,才能算是在同一个域里面

# 非同源受到哪些限制?

  1. cookie 不能读取
  2. DOM 无法获得
  3. Ajax 请求不能发送

# 如何在开发中解决跨域问题

# jsonp 解决跨域发送请求跨域问题

要明确的是:jsonp 不是一种技术,而是程序员“智慧的结晶”(利用了标签请求资源不受同源策略限制的特点)
jsonp 需要前后端人员互相配合

# jsonp 是什么?

jsonp(JSON with Padding),是一个非官方的跨域解决方案,纯粹凭借程序员的聪明才智开发出来,只支持 get 请求。

# jsonp 怎么工作的?

  1. 网页中有一些标签天生具有跨域的能力,比如:img、link、iframe、script。
  2. jsonp 就是利用 script 标签的跨域能力来发送请求的。

# jsonp 的使用

创建 script 节点,指定 src,利用标签把请求发出去
定义好一个处理数据的函数
把数据处理函数的名称传递个后端
后端返回符合 js 函数调用语法的字符串

  1. 动态的创建一个 script 标签
var script = document.createElement('script')
1
  1. 添加请求路径和请求参数
script.src = 'url?callback=getData'
1
  1. 定义一个全局函数
window.getData = function(data) {
  console.log(data)
}
1
2
3
  1. 把标签放入页面
document.body.appendChild(script)
1

5.后端配合

// 后端获取到参数,查询数据库,获得所需数据
// 给请求发送响应,因为script会对请求到的数据,进行js运行,所以如果返回回来的数据中有js代码的话,会执行js代码
response.send(`${callback}(`${JSON.stringify(data)}`)`)
1
2
3

# 局限性

  1. 只能解决 GET 请求跨域问题
  2. 必须需要后端人员配合

# cors 解决跨域

# node 后端设置

response.header('Access-Control-Allow-Origin', 'http://localhost:8080')
response.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE')
response.header('Access-Control-Allow-Headers', 'Content-Type')
1
2
3
上次更新: 2021/09/13, 15:11:59
cookie和session
构造函数和原型

← cookie和session 构造函数和原型→

最近更新
01
css
09-13
02
html
09-13
03
README
09-13
更多文章>
Theme by Vdoing | Copyright © 2021-2021 coderly | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式