1、问题描述:

其一、在从服务器访问信息的时候,突然报错,报错的信息为:Access to XMLHttpRequest at 'http://localhost:5500/get' 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.

其二、经查询,报错的原因是 访问跨域的问题;

2、代码展示:

其一、写的服务器的代码如下,此时该服务器的名称为:‘server.js’;

const express = require('express');
const app = express();app.get("/get", (req, res) => {let r = {   // 想要传递一个 json 数据;id: 1,name: 'zs'};let data = JSON.stringify(r);   // 服务器给浏览器的一般都是字符串,因此需要先将其转成 json 字符串;res.writeHead(200, {  // 可以用 writeHead(响应头) 设置当前的状态码为:200(成功);  并将传递的内容类型发过去(如: 'Content-type': 'application/json' 表示传递内容的是 json 字符串); 'Content-type': 'application/json'})res.write(data); // 此时的显示结果为:'{"id":1,"name":"zs"}',就是想要传递的 json 数据; (即:成功);res.end();
});app.listen(5500, () => {console.log('服务器正在启动...');
})

注意:此时肯定通过 npm init -y 创建 package.json 配置文件了; 当然也下载了 npm i express 的框架了,然后才能运行上述服务器代码;

其二、写的客户端页面的代码如下,此时该页面的名称为:‘1.html’;

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><button id="btn">按钮</button><script>var btn = document.querySelector('#btn');btn.addEventListener('click', function () {// 通过 ajax 向服务器发送请求来获取信息(用 cors 来解决跨域的问题);let xhr = null;if (window.XMLHttpRequest) {xhr = new XMLHttpRequest();} else {xhr = new ActiveXObject("Microsoft.XMLHTTP");}xhr.open("get", "http://localhost:5500/get", true) // a=1&b=2xhr.send();xhr.onreadystatechange = function () {if (xhr.readyState === 4 && xhr.status === 200) {console.log(xhr.responseText);}}});</script>
</body></html>

其三、在终端运行,运行结果如下:

A、访问 server.js 这个服务器,展示结果为: (此时只要在控制台不报错,就没有问题)

B、用 ‘Live Server’ 打开客户端页面;

C、点击 ‘按钮’ 后的报错结果显示为:

3、解决办法:

通过 在服务器开启跨域资源共享 (cors) 来解决跨域的问题:

其一、服务器端的代码修改为如下所示;

const express = require('express');
const app = express();app.all("*", function (req, res) {   //此时的 '*' 指用来处理所有的请求,从而在服务器端解决跨域的问题;res.header('Access-Control-Allow-Origin', 'http://127.0.0.1:5500');   //此时表示:允许 'http://127.0.0.1:5500' 地址来访问服务器;   res.header('Access-Control-Allow-Methods', 'GET,POST,PUT');           //此时表示:允许发的请求方式,如:'GET,POST,PUT';res.header('Access-Control-Allow-Headers', 'Content-Type');           //此时表示:允许发的请求头,如:'Content-Type' 请求头的类型;req.next();   //请求回来,并进行下一步的操作;
});app.get("/get", (req, res) => {let r = {   // 想要传递一个 json 数据;id: 1,name: 'zs'};let data = JSON.stringify(r);   // 服务器给浏览器的一般都是字符串,因此需要先将其转成 json 字符串;res.writeHead(200, {  // 可以用 writeHead(响应头) 设置当前的状态码为:200(成功);  并将传递的内容类型发过去(如: 'Content-type': 'application/json' 表示传递内容的是 json 字符串); 'Content-type': 'application/json'})res.write(data); // 此时的显示结果为:'{"id":1,"name":"zs"}',就是想要传递的 json 数据; (即:成功);res.end();
});app.listen(5500, () => {console.log('服务器正在启动...');
})

注意:该操作仅在服务器端进行修改,不需要修改在客户端的代码;

其二、此时将 server.js 这个服务器重新运行,用 ‘Live Server’ 打开客户端页面并点击 ‘按钮’ 后,控制台的显示结果为:

注意:此时只要将 json 数据显示出来,就说明解决了跨域的问题;

4、小结:

其一、哪里有不对或不合适的地方,还请大佬们多多指点和交流!

其二、如果关于解决异步跨域问题的方式 cors 与 jsonp 该文章不详细,请参考如下地址文章:https://blog.csdn.net/weixin_43405300/article/details/121824577?spm=1001.2014.3001.5501

用 cors 解决:Access to XMLHttpRequest at ‘http://localhost:5500/get‘ from blocked by CORS policy 等的跨域问题相关推荐

  1. Access to XMLHttpRequest at ‘http://localhost:xxxx“

    1. 报错信息如下 进行跨域请求时报错,报错信息如下: Download the Vue Devtools extension for a better development experience: ...

  2. VUE跨域问题Access to XMLHttpRequest at ‘http://localhost

    问题描述 VUE发送请求的时候不能请求到正确数据,控制台如下 Access to XMLHttpRequest at 'http://localhost:8000/equip_fault_report ...

  3. Access to XMLHttpRequest at ‘http://localhost:8080/VXApplets/UserInfoService/login‘ from origin ‘htt

    报错信息 Access to XMLHttpRequest at 'http://localhost:8080/VXApplets/UserInfoService/login' from origin ...

  4. Access to XMLHttpRequest at ‘http://localhost:8000/v1/users/staffs/‘ from origin ‘http://loca 报错

    翻译: Access to XMLHttpRequest at 'http://localhost:8000/v1/users/staffs/'   这个跨域异步请求访问django服务器 from ...

  5. 【Access to XMLHttpRequest at ‘http://localhost:8080/test/doLogin.do?id=1414pwd=4141code=4141‘ 】

    Access to XMLHttpRequest at 'http://localhost:8080/test/doLogin.do?id=1414&pwd=4141&code=414 ...

  6. 跨域问题:Access to XMLHttpRequest at ‘http://localhost:3001/re‘ from origin ‘http://127.0.0.1:8848‘

    1.问题描述: 在本地用express构建服务器端,前端访问数据. 报错:Access to XMLHttpRequest at 'http://localhost:3001/responseData ...

  7. 解决Access to XMLHttpRequest at http:XXX from origin http:XXX has been blocked by CORS policy: No Acce

    Access to XMLHttpRequest at http:XXX from origin http:XXX has been blocked by CORS policy: No Access ...

  8. 不再担心宝塔面板MySQL密码错误问题:快速解决Access denied for user ‘root‘@‘localhost‘错误的方法分享!

    文章目录 1. bug 2. 解决方法 2.1 关闭数据库 2.2 设置MySQL在首页显示(方便操作) 2.3 修改MySQL配置 2.4 重载配置并启动 2.5 完工,试试 1. bug 宝塔面板 ...

  9. centos7.3安装mysql5.7 解决 Access denied for user 'root'@'localhost' (using password: NO)

    开始查找自带的mariadb,rpm -qa | grep mariadb 找到安装包并卸载 rpm -e mariadb安装包 卸载完之后,我们就可以开始安装mysql5.7了,在这里可以找到我们需 ...

最新文章

  1. 『转载』Debussy快速上手(Verdi相似)
  2. 基于thinkphp的省略图便捷函数
  3. TPF111视频信号放大器研究
  4. win7 设置自动关机
  5. 魔术方法php,PHP中常用的魔术方法
  6. 在Core WebApi中使用Swagger
  7. linux多点触控软件测试,测试工程师日常工作中高频Linux命令
  8. 微信小程序console.log出来的是object的问题解决方法
  9. HDU 2012 素数判断方式
  10. Imgproc.findContours函数
  11. 史上最佳GAN被超越!生成人脸动物高清大图真假难辨,DeepMind发布二代VQ-VAE
  12. 手把手教你解密MacOS平台下的Chrome密码
  13. 我与布拉德利(Todd Bradley)聊天
  14. 打造颠覆你想象中的高性能,轻量级的webform框架-----如何替换webform的垃圾控件(第一天)...
  15. 采集gpu_GPU是怎么处理游戏画面?一文看懂显卡的工作原理,原来这么简单
  16. UG模具设计从入门到精通
  17. GhostScript命令参数详解
  18. 重装系统后电脑主机前面音频输出没用暨Realtek高清晰音频管理器
  19. Problem L: 数羊————思维不严谨
  20. 光计算机pdf,神威bull;太湖之光计算机系统.PDF

热门文章

  1. make 常用命令参数
  2. 可信计算系列之一——ATMEL的TPM芯片AT97SC3204T及TSS栈
  3. JAVASE基础模块三十五( 线程 线程创建的第一种方法 以及线程的一些方法)
  4. spring boot多数据源动态切换, 多数据源事务管理
  5. Nginx代理服务详解
  6. CommonJS的模块实现原理
  7. 前端需要学习的东西好多,加油加油!
  8. proteus时钟电路仿真
  9. 对杭城非法改装店和车管所的爆光
  10. 四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)