首页 > 其他分享 >ajax跨域解决方案

ajax跨域解决方案

时间:2024-06-15 17:32:28浏览次数:21  
标签:8097 Control http 跨域 解决方案 Access ajax 服务器

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().port
    console.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.js

const { 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>

标签:8097,Control,http,跨域,解决方案,Access,ajax,服务器
From: https://www.cnblogs.com/OrochiZ-/p/18249537

相关文章

  • Django 解决 CORS 跨域问题
    Django解决CORS跨域问题★CORS基本概念CORS(Cross-OriginResourceSharing跨域资源共享)是一种用于在Web浏览器中处理跨域请求的机制。跨域请求指的是在浏览器中,从一个域名的网页去请求另一个域名的资源。在默认情况下,浏览器限制了跨域请求,以保护用户的安全和隐私。★CO......
  • 数字化校园完整解决方案
    第一章 项目概述一国内信息化现状1校园信息化发展现状高等教育信息化是促进高等教育改革创新和提高质量的有效途径,是教育信息化发展的创新前沿。进一步加强基础设施和信息资源建设,重点推进信息技术与高等教育的深度融合,能促进教育内容、教学手段和方法现代化,创新人才培......
  • 传统后端SQL数据层替代解决方案: 内置数据源+JdbcTemplate+H2数据库 详解
    内置数据源我们回顾一下druid数据源的配置方式通过type属性指定数据源的类型导入依赖starter就使用了spring的自动装配功能格式二是在引入druid的依赖的基础上进行的一种配置方式Tomcat内部也可以进行数据源的配置轻量级中最快的数据源对象我们切换德鲁伊连接池......
  • jquery.form.js(ajax表单提交)
    参考代码:$("form").submit(function(){$(this).ajaxSubmit({url:"login",//设置提交的url,可覆盖action属性target:"#box",//服务器返回的内容存放在#box里type:"GET",dateTy......
  • LightAutoML——大型金融服务生态系统的 AutoML 解决方案
    尽管AutoML几年前就开始流行,但早期的工作AutoML的历史可以追溯到90年代初当科学家发表第一篇关于超参数优化的论文时。2014年,ICML组织了第一届AutoML研讨会,AutoML引起了ML开发者的关注。AutoML多年来的主要关注点之一是超参数搜索问题,其中模型实现了一系列优化方......
  • 如何确保数据跨域交换安全、合规、可追溯性?
    数据跨域交换是指在不同的组织、系统或网络之间进行数据的传输和共享。随着数字经济的发展,数据跨域交换在促进数据流通和创新融合方面发挥着重要作用。然而,这一过程也面临着诸多挑战和风险,例如数据安全、合规性、完整性以及责任不清晰等问题。在进行不同地域文件传输时,可能遇到......
  • 解决方案 | winrar 使用命令行解压到同名文件夹 (QTTabBar 中创建一个【解压文件】命令
     需求:我们经常需要把rar或者zip解压到当前文件夹,如果是直接解压的话可能会解压出来很多文件,事实上我们当然可以通过右键解压到这个指定文件夹。  但是经过查询知道,如果是指定文件夹好说,直接指定.\new_data\表示在当前目录下的new_data文件夹即可。但是这不是我想要的,我想......
  • FlowUs本地部署:数据自主权与定制化服务的完美融合|FlowUs息流企业级解决方案本地私有化
    在当今数字化时代,企业对数据的控制和安全性要求越来越高,同时,用户对软件的使用习惯也趋向多样化。针对这些需求,FlowUs作为一款多功能的协作平台,提供了灵活的解决方案。FlowUs本地部署对于有本地化需求的客户,FlowUs支持企业私有化部署服务。这意味着企业可以根据自己的需求,在本......
  • M1 Mac上运行旧版本的Node.js解决方案
    在M1Mac上运行旧版本的Node.js确实可能会遇到兼容性问题,因为某些旧版本的Node.js并不直接支持ARM架构。但是可以使用Rosetta2解决使用Rosetta2:M1Mac提供了Rosetta2,这是一种转换层,可以允许在ARM架构上运行为Intelx86架构编译的软件。通过在终端使用arch-x86_64前缀......
  • 脏读:数据一致性问题及解决方案
    目录前言一、脏读的定义二、脏读的原因三、解决脏读的方案四、Demo讲解前言        在多线程或分布式系统中,当多个线程或进程同时访问和修改共享资源时,可能会出现数据不一致的情况。其中一个经典的问题就是脏读。本文将详细介绍脏读的概念、原因和解决方案,帮......