Ajax跨域问题

news/2024/11/17 6:21:09/

ajax跨域问题

  • ajax跨域问题
    • 什么是跨域?
    • 为什么不允许跨域?
    • 跨域解决方案
      • 1、CORS
      • 2、express自带的中间件cors
      • 3、原生jsonp
      • 4、使用vscode的Live Server插件

ajax跨域问题

什么是跨域?

在Ajax发请求时,需要显示的信息一直显示不出来,打开控制台发现出现以下错误信息:
Access to XMLHttpRequest at ‘http://localhost:8000/users’ from origin ‘http://127.0.0.1:5500’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.
显示是由于 http://localhost:5500 向另外一个服务器地址 http://127.0.0.1:8000 发送请求的时候,由于协议名称域名端口中的某一项不一致造成的访问接口失败,也就是跨域
跨域是产生于浏览器的"同源策略",所谓同源策略是指:协议域名端口,只有以上三点都一样的情况下才允许访问相同的cookie、localStorage和发送Ajax请求,以上一点不同都会出现跨域问题

为什么不允许跨域?

浏览器跨域限制是出于安全性考虑。同源策略的实施可以防止恶意脚本通过跨域请求获取用户的敏感数据。如果浏览器允许跨域请求,那么恶意网站就可以伪装成其他网站,并窃取用户数据,导致安全风险。如果跨域可以请求的话,很多的服务器都会受到额外的攻击。禁止跨域是浏览器的行为,是浏览器为了网站的安全性,进行从当前的服务,访问其它服务器的地址,浏览器认为这是存在风险的,因此默认会组织跨域。

跨域解决方案

1、CORS

CORS :全称cross origin resource share (资源共享)
工作原理: 服务器在返回响应报文的时候,在响应头中设置一个允许的header
response.setHeader("Access-Control-Allow-Origin", "*");
注意:别打错了。。。最好复制过去,我就是因为control打多了一个 l 找了半天的错误。。。
例:

//1、引入express
const express = require("express");//2、创建应用对象
const app = express();//3、创建路由规则
//request是对请求报文的封装
//response是对响应报文的封装
//GET请求
app.get("/server", (request, response) => {//设置响应头 设置允许跨域response.setHeader("Access-Control-Allow-Origin", "*");//设置响应response.send("HELLO AJAX");
});
//4、监听端口启动服务
app.listen(8000, () => {console.log("服务已经启动,8000端口监听中");
});

2、express自带的中间件cors

安装一个包cors,并配置这个cors即可,它也是express的中间件;
它的作用是自动给每一个response设置默认请求头
这样就不用我们自己每一个接口都要设置一次了
安装命令 npm install cors
在服务端配置:

  var cors = require("cors");app.use(cors());

3、原生jsonp

JSONP(JSON with Padding)是一种利用<script>标签不受同源策略限制的特性进行跨域请求的方法。通过动态创建<script>标签,将请求的数据作为回调函数的参数返回到页面中。但是,JSONP只支持GET请求,且存在安全性和可维护性的问题。
script/img 等标签的src属性请求时不存在跨域问题的,但是只支持GET请求,因为get请求参数直接在url后面拼接,而post请求参数是放在请求体中

4、使用vscode的Live Server插件

最简单的方法!!!
在扩展里搜索Live Server并下载,直接在需要发送请求的页面右键点击Open whit Live Server即可
请添加图片描述
注:若使用Live Server还是不成功,在vscode里打开设置–>Live Server>Settings:Proxy,把enable改为true

目前只发现以上方法,持续更新中。。。


http://www.ppmy.cn/news/1014552.html

相关文章

数据库基础-Mongodb数据库复制操作

Mongodb数据库复制操作 关闭mongodb的服务,如下图 创建以下文件夹 现在我们开启三个服务,端口号为9927做为主节点,9928做为从节点,9929做为仲裁节点 仲裁节点的作用是协调leader选举&#xff0c;监测系统运行状态&#xff0c;提供节点互相通讯的数据信息。 开启主服务: …

高忆管理:券商板块探底回升,大市值券商企稳,中信建投涨超5%

近日活泼的券商板块8日盘中大幅回落&#xff0c;哈投股份一度跌停&#xff0c;后探底上升。大市值券商企稳&#xff0c;截至发稿&#xff0c;中金公司触及涨停&#xff0c;中信建投涨超5%。 首创证券一度大跌近9%&#xff0c;此前接连三日涨停&#xff0c;公司昨日晚间公告称&a…

润和软件人才评定报名系统正式上线,培养openEuler专业生态人才

8月3日&#xff0c;江苏润和软件股份有限公司&#xff08;以下简称“润和软件”&#xff09;自主研发的人才评定报名系统正式上线运行&#xff0c;欢迎大家咨询报名&#xff01; 2022年10月&#xff0c;润和软件申请并通过了openEuler开源社区理事会评审&#xff0c;成为openE…

【零基础??天速成 Java】Day2 - 初识面向对象

目录 前言 1. 可变参数的使用 2. 构造器 3. 包 1、包的创建 2、包的使用 3、包的命名规范 4、常用的包 5. 访问修饰符 6. 继承 7. super 关键字 8. 方法重写 Override 写在最后&#xff1a; 前言 我的 java 基础学习&#xff0c;跟的是韩顺平的 java 课程~ 本篇…

APP外包开发的Flutter框架

Flutter 是一种流行的开源UI框架&#xff0c;由谷歌开发&#xff0c;用于构建跨平台的移动应用程序。它使用一套统一的代码库&#xff0c;可以在多个平台上&#xff08;如Android、iOS、Web、桌面等&#xff09;保持一致的外观和行为。今天和大家分享一些基于 Flutter 开发的常…

stm32项目(5)——基于stm32的工地噪声扬尘检测系统

目录 1.功能设计 2.硬件方案 1.单片机选择 2.声音传感器 3.PM2.5传感器 4.显示器 3.程序设计 4.课题意义 1.功能设计 本次系统实现的功能如下所示&#xff1a; 采用声音传感器检测环境噪音&#xff0c;采用PM2.5传感器检测环境灰尘浓度。若噪声超过阈值或者PM2.5超过阈…

validation注解释义(2023.08.08更新)

AssertTrue 被注解的元素必须为True DecimalMax(value) 被注解的元素必须为一个数字&#xff0c;其值必须小于等于指定的最小值 Decimalmin(Value) 被注解的元素必须为一个数字&#xff0c;其值必须大于等于指定的最小值 Digits(integer&#xff0c;fraction) 被注解的元素必…

SpringBoot整合MongoDB连接池(含源码)

&#x1f4a1;版本依赖 jdk 17 SpringBoot 3.1.0 Mongo 6.0.8 mybatis-plus 2.0.2 &#x1f4a1;环境准备 &#x1f335;MongoDB安装 安装教程请查看&#xff1a;一文搞定(linuxwindowsdocker)安装MongoDB &#x1f335;导入依赖 <parent><groupId>org.sp…