当前位置:网站首页>解决跨域问题的方法 --- 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}')
})
边栏推荐
猜你喜欢
随机推荐
个人成长系列:业务、技术学习书单
为什么 RTP 的视频的采样率是 90kHz ?
JVM常量池详解
velocity模板页面四则运算
华为Vlan创建及原理简单说明
Homebrew的简单介绍
HCIE学习记录——OSI参考模型
Apache ShardingSphere 5.1.1 正式发布
Mysql-Explain与索引详解
【TCP 和 UDP 基本原理】
抽象队列同步器AQS应用Lock详解
网络运维系列:二级域名启用与配置
Oauth2.0 authentication server adds verification code login method
CDN的加速原理是什么?
test2
makefile——library
Mysql删库恢复数据
WebRTC 中有关 Media Stream & Track & Channel 之间的关系
Doubly linked list (normal iterators and const iterators)
【Solidity智能合约基础】-- 基础运算与底层位运算