当前位置:网站首页>解决跨域问题的方法 --- CORS
解决跨域问题的方法 --- CORS
2022-08-02 14:17:00 【z_小张同学】
解决跨域的方式有很多种,本篇主要介绍 CORS :
CORS 全称是"跨域资源共享"(Cross-origin resource sharing)。
CORS需要浏览器和服务器同时支持。但是目前基本上浏览器都支持,所以我们只要保证服务器端服务器实现了 CORS 接口,就可以跨源通信。
在数据包的头部配置Access-Control-Allow-Origin字段以后,数据包发送给浏览器后,
浏览器就会根据这里配置的白名单 "放行" 允许白名单的服务器对应的网页来用ajax跨域访问 。
CORS解决跨域问题,就是在服务器端给响应添加头信息。
Access-Control-Allow-Origin 允许请求的域
Access-Control-Allow-Methods 允许请求的方法
Access-Control-Allow-Headers 预检请求后,告知发送请求需要有的头部
Access-Control-Allow-Credentials 表示是否允许发送cookie,默认false;
Access-Control-Max-Age 本次预检的有效期,单位:秒;
router.js文件夹:
var fs=require("fs")
var url=require("url")
var querysting=require("querystring")
var mime=require("mime")
let urls={}
var http=require("http")
let router=function(req,res){
//这个函数每次用户访问时运行
let pathname=url.parse(req.url).pathname
fs.readFile(router.basepath+pathname,(err,data)=>{
if(!err){
res.setHeader("content-Type",mime.getType(pathname))
res.end(data)
}else{
if(!urls[pathname]){res.end("404 not found-mymvc")}
else{urls[pathname](req,res)}
}
})
}
router.static=function(path){
this.basepath=path
}
router.get=function(url,cb){
urls[url]=cb
}
router.basepath=__dirname+"/public"
http.createServer(router).listen(8081)
module.exports=router;test1文件夹中的index.js文件:
var router = require("./router.js")
router.get("/ajax1",function(req,res) {
res.end('{"name":"xiaozhang","age":21}')
})
test2文件夹中public文件夹中的index.html文件:
<button onclick="fn()">跨域ajax请求</button>
<script>
function fn() {
var xhr = new XMLHttpRequest() || new ActiveXObject("Microsoft.XMLHTTP")
xhr.open("GET","http://192.168.0.114:8081/ajax1",true)
xhr.send()
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
console.log(xhr.responseText);
}
}
}
</script>未设置CORS时,会报跨域错误:

在test1的index.js文件中设置CORS后就可以访问到数据:
var router = require("./router.js")
router.get("/ajax1",function(req,res) {
res.setHeader("Access-Control-Allow-Origin","http://192.168.0.114:8082")
res.end('{"name":"xiaozhang","age":21}')
})
边栏推荐
猜你喜欢

【IP基本原理-ARP原理】

一分钟之内搭建自己的直播服务器?

网络运维系列:远程服务器登录、配置与管理

Scala的安装和IDEA的使用(初入茅庐)

CDH (computational Diffie-Hellman) problem and its differences with discrete logarithm and DDH problems

Vert.x web 接收请求时反序列化对象 Failed to decode 如何解决?

【软件测试】selenium自动化测试1

CPU缓存一致性协议MESI

JVM常量池详解

虚拟机使用的是此版本 VMware Workstation 不支持的硬件版本。模块“Upgrade”启动失败。未能启动虚拟机。
随机推荐
JVM常量池详解
Scala的模式匹配与样例类
IDEA如何进行远程Debug
CDH(computational Diffie-Hellman)问题以及与离散对数、DDH问题的区别
smart_rtmpd 的 NAT 映射方式使用说明
关于机组的部分知识点随笔
【网络设备远程登陆配置SSH/Telnet 】
搭建Spark开发环境
adb常用命令
Apache ShardingSphere 5.1.2 发布|全新驱动 API + 云原生部署,打造高性能数据网关...
The relationship between base classes and derived classes [inheritance] / polymorphism and virtual functions / [inheritance and polymorphism] abstract classes and simple factories
一分钟之内搭建自己的直播服务器?
【软件测试】测试基础讲解
网络运维系列:Ubnt ER-X初始化和开启硬件NAT
smart rtmpd web 接口说明
【TCP 和 UDP 基本原理】
MYSQL5.7详细安装步骤
Template Series - Dichotomous
ssm整合
abstract和接口的基础知识