浏览器同源策略

浏览器同源策略

同源策略 :是一个重要的浏览器的安全策略 ,用于限制一个源 的文档或者它加载的脚本如何能与另一个源的资源进行交互

它能帮助阻隔恶意文档,减少可能被攻击的媒介

例如:被钓鱼网站收集信息,使用ajax发起恶意请求,传递转账信息给银行服务器

web内部的源 由 用于访问它的协议 域名 端口 组成,只有当协议 域名 端口都匹配时,两个对象才有相同的源

同源

网页加载时所在的源,和Ajax请求时的源 协议 域名 端口 全部相同即为同源

跨域

跨域: 从一个源的文档,加载另一个源的资源就产生了跨域

案例:网页所在源Ajax访问的源(协议,域名,端口) 有一个不同, 就发生了跨域访问,请求响应是失败的

javascript 复制代码
	<script>
        // 请求本机web服务提供的省份列表数据
        // http://127.0.0.1:5500/index.html  网页加载时所在的源
        // http://localhost:3000/api/province  axios请求的源
        axios({
            url:"http://localhost:3000/api/province"
        })
        .then(res=>{
            console.log(res)
        })
    </script>

跨域解决方案1--CORS

前后端分离的项目,前端和后端不在一个源,还要保证数据通信

采用CORS(跨域资源共享),一种基于HTTP头的机制,该机制通过允许服务器标示除了它自己以为的其他源,使得浏览器允许这些源访问加载自己的资源

步骤:

服务器端 :设置Access-Control-Allow-Origin 响应头字段 允许除了它自己以外的源来访问自己的资源

javascript 复制代码
1.下载cors本地软件包
2.导入cors函数
3.使用server.use() 给web服务添加插件功能
4.把cors函数调用传入给web服务 启动测试


const cors = require('cors')
server.use(cors())

前端: 正常发起Ajax请求,无需额外的操作

跨域解决方案2--同源访问

开发环境用cors,上线部署关闭cors,并采用同源访问方式

做法:让后端web服务既可以提供数据接口,也可以访问网页资源

安全,后端的接口不允许非同源来访问

复制代码
// 暴露指定的文件夹,让前端可以直接拼接路径和资源名字来访问
server.use(express.static(path.join(__dirname,'public')))
javascript 复制代码
/* 
基于express本地软件包 开发提供省份列表数据的接口
步骤:监听get请求方法  /api/province 路径  并读取province.json里省份的数据返回给请求方
*/
// 1. 下载express软件包
// 2. 导入并创建web服务对象
const fs = require('fs')
const path = require('path')
// const cors = require('cors')
const express = require('express')
const server = express()
// server.use(cors())

console.log(path.join(__dirname, 'public'))

// 暴露指定的文件夹,让前端可以直接拼接路径和资源名字来访问
server.use(express.static(path.join(__dirname, 'public')))



/* 
1.下载cors本地软件包
2.导入cors函数
3.使用server.use() 给web服务添加插件功能
4.把cors函数调用传入给web服务 启动测试

*/

// // 3. 监听请求的方法和资源路径
// server.get('/',(req,res)=>{
//     res.send("您好 欢迎使用express")
// })

// 监听get请求方法  /api/province 资源路径 
server.get('/api/province', (req, res) => {
    // 读取province.json中数据
    fs.readFile(path.join(__dirname, '/data/province.json'), (err, data) => {
        res.send(data.toString())
    })
})

// 4. 监听任意的请求方法和请求的资源路径
server.all('*', (req, res) => {
    res.status(404)
    res.send("您访问的资源路径不存在")
})

// 5. 监听端口号 启动web服务
server.listen(3000, () => {
    console.log("web服务已启动")
})
相关推荐
Direction_Wind1 小时前
抖音视频下载,直播间监控,直播间发言采集,最新加密算法
python·node.js
奶糖的次元空间15 小时前
带你用 Javascript 生成器玩转「会暂停」的函数
node.js
Hilaku1 天前
我是如何用一行 JS 代码,让你的浏览器内存瞬间崩溃的?
前端·javascript·node.js
五仁火烧1 天前
npm run build命令详解
前端·vue.js·npm·node.js
前端付豪1 天前
NodeJs 做了什么 Fundamentals Internals
前端·开源·node.js
局外人LZ1 天前
libsodium.js:web端与 Node.js 的现代加密工具集,构建前端安全加密体系
前端·javascript·node.js
寂夜了无痕1 天前
pnpm:快速、节省空间的 Node.js 包管理器
npm·node.js·pnpm
程序员爱钓鱼1 天前
Node.js 博客系统实战(一):项目需求分析
前端·后端·node.js
Jing_Rainbow2 天前
【Vue-2/Lesson62(2025-12-10)】模块化与 Node.js HTTP 服务器开发详解🧩
前端·vue.js·node.js
TE-茶叶蛋2 天前
NestJS中使用TypeORM
node.js