当前位置:网站首页>解决跨域问题的方法 --- 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}')
})
边栏推荐
猜你喜欢

WEB自动化之多窗口操作、切换frame、弹窗处理

华为Mux VLAN 二层流量隔离

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

【软件测试】概念篇
![[Inter-process communication]: pipe communication/named/unnamed](/img/8c/d330cdb5d447e50b4c6058e34752dd.png)
[Inter-process communication]: pipe communication/named/unnamed

Apache ShardingSphere 5.1.2 发布|全新驱动 API + 云原生部署,打造高性能数据网关...

abstract和接口的基础知识

CPU缓存一致性协议MESI

解决启动filebeat时遇到Exiting: error unpacking config data: more than one namespace configured accessing错误

小知识点系列:数组与多维数组
随机推荐
【软件测试】基础篇
LAMP环境 源码编译安装(Apache 2.4.52 +mysql 8.0.28+php 8.1.3)
JVM常量池详解
【软件测试】自动化测试selenium3
【路由器与交换机的作用与特点 】
JMM&synchronized&volatile详解
小知识点系列-基于H2数据库单元测试
支付系列文章:PCI合规能力建设
Template series-union set
Feign Client 超时时间配置不生效
项目管理模块-项目权限功能开发
对象头和synchronized的升级
H3C 交换机配置端口组、DHCP、DHCP中继、管理用户
【软件测试】性能测试理论
Oauth2.0 资源服务器搭建
网络运维系列:远程服务器登录、配置与管理
filebeat的配置
Nvm,Nrm使用教程
webrtc 有关 SDP 部分的解析流程分析
Xshell 使用删除键乱码问题