ajax跨域解决方案

news/2024/10/5 9:26:41

1.何为跨域

  • AJAX跨域问题是指浏览器出于安全考虑,限制了一个源(域名、协议、端口)的脚本与另一个源的资源进行交互。通俗的说,当前页面的域名、协议、端口必须与ajax访问地址一致,才能正常通信,否则会造成跨域

2.解决方案

  • 浏览器开放限制:浏览器下载插件(Access-Control-Allow-Origin)
  • 代理服务器:在服务器端(前端所在服务器)设置一个代理服务器,所有AJAX跨域请求都发送到这个代理服务器,由代理服务器转发请求到目标服务器,并返回响应,相当于做了一个中转
  • CORS:服务器端(接口所在服务器)设置Access-Control-Allow-Origin响应头,允许特定的或所有域进行跨域请求
  • JSONP:通过 script 标签的src属性请求一个带参数的服务器端脚本,服务器端脚本输出一个指定函数的调用,该函数的参数是要传递的数据

3.Access-Control-Allow-Origin

  • 在chrome应用商店中搜 "cors",找到 "Access-Control-Allow-Origin"

  • 点击添加,安装完成后,启用该插件

4.CORS

  • http-server:启动时添加 --cors 参数,所有访问这个服务器的请求都允许跨域
http-server -c-1 -p 8097 --cors
  • express设置允许跨域
//引入express
const express = require("express")
//创建服务对象
let app = express()app.all('*', function (req, res, next) {//跨域允许访问的域名(通配符表示所有域名皆可访问,多个域名用都好隔开)res.header("Access-Control-Allow-Origin",'*')//跨域允许的header包含哪些字段res.header("Access-Control-Allow-Headers","Content-Type,Authorization,X-Requested-With")//跨域允许的请求方式res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS")//执行下一步(跳转到下一个路由判断中)next()
})//开启服务,监听80端口
var server = app.listen(80,function(){//当前当前监听的端口号var port = server.address().portconsole.log(`Server running at http://127.0.0.1:${port}/`)
})

4.代理服务器

  • http-server:启动时添加 -P 或者 --proxy 参数,当前服务器不能解析的资源会转交到代理服务器
//启动页面服务器8096,接口代理至8097
http-server -c-1 -p 8096 -P http://127.0.0.1:8097//接口服务器
http-server -c-1 -p 8097//页面代码(先访问http://127.0.0.1:8096/data.json,无法解析后再代理至http://127.0.0.1:8097/data.json)
axios({url: "data.json"})

  • vue脚手架:配置方式不固定,一切以文档为主,代理配置
//vue.config.jsconst { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({transpileDependencies: true,lintOnSave: false,devServer: {//代理proxy: {// 匹配以/api开头的所有路径'/api': {  target: 'http://localhost:8097', // 代理的后端api域名changeOrigin: true, // 支持跨域}}}
})
<script>new Vue({el:"#app",data: {},created(){this.getMsg()},methods: {async getMsg(){try {//接口一律访问当前8080服务器,然后自动代理至接口服务器,不得再访问原目标服务器const result = await axios({url: "/api/data.json",//url: "http://127.0.0.1:8097/api/data2.json",//错误写法})console.log('success',result.data)} catch (error) {console.log('error',error)}}}})
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/44036.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

ZooKeeper漫谈

ZooKeeper漫谈 1.什么是Zookeeper Zookeeper 是一个分布式协调服务的开源框架。主要作用是为分布式系统提供协调服务,包括但不限于:分布式锁、统一命名服务、配置管理、负载均衡、主控服务器选举以及主从切换等。 ZooKeeper本质上是一个分布式的小文件存储系统。提供类似与文…

余数的余数

问题:计算大于7的任意数除以7的余数再除以2的余数 函数公式解决:=MOD(MOD(A1,7),2)

【2024.06.15】35mm定焦构图练习

图源都为午饭饭,可以在B站搜索到,侵删 50期 日光充足、裙、小清新、城镇、伞

基础篇——VMware与提权初见

基础篇——VMware&提权初见 1. VMware基础 (1) 下载并安装VMware Workstation Pro,下载CentOS7_64的iso镜像文件并安装。(不会就在网上搜索相关教程) (2) VMware中的虚拟机有3种连网方式:仅主机(Host-Only)、桥接(Bridged)、网络地址转换(NAT)。 仅主机模式不能访问公网,…

【比赛】高一高考集训总结赛

?一场比赛四道 DP 乐了 集训全学 DP 你还真给我全考 DP 啊 T1 乌龟棋 70 Pts题面设 \(f_{i,j,k,w}\) 表示已经翻开 \(i\) 张步数为 \(1\) 的牌,\(j\) 张步数为 \(2\) 的牌,以此类推,暴力 DP 即可。 但赛时先开了个五维 DP 数组,然后发现开不下; 正常人到这就会想到要压掉…

O(1)LCA

大家常用的三种LCA算法如下: 倍增为在线,复杂度\(\Theta(n\log n)\)预处理,\(\Theta(\log n)\)查询。 树剖为在线,复杂度\(\Theta(n)\)预处理,\(\Theta(\log n)\)查询。 Tarjan为离线,\(\Theta(n+q)\)复杂度。 现在介绍\(\Theta(n\log n)\)时间预处理,\(\Theta(1)\)查询…

CMU15445数据库系统笔记.18221501

本篇文章是CMU 15445数据库系统的学习笔记,持续更新... [课程视频 Fall 2021] | [课程主页]LEC03. 数据库存储结构(上) 分层设计概述 设计任何大型系统时的一个常用手段是分层,数据库系统也可以被分成若干层,每一层处理自己的事情,向上提供简单的API隐藏细节。举个例子,…

纪念一下

教程来自:2019ISCC_web题解 - oswords blog (zhzhdoai.github.io)