技术标签: node.js nestjs typescript 后端
目录
跨域(Cross-Origin)指的是在浏览器中,当一个网页的 JavaScript 代码向不同源(协议、域名或端口)的服务器发送请求时,就会发生跨域。例如,如果一个网页在域名为"example.com"的服务器上运行,它的 JavaScript 代码尝试向"api.example2.com"这个不同的域名发送请求,那么就会发生跨域请求。
浏览器实施同源策略(Same-Origin Policy)来限制跨域请求。同源策略要求网页的 JavaScript 只能访问与其来源相同的资源,也就是协议、域名和端口都必须相同。这是为了保障用户的安全性,防止恶意网站获取用户的敏感数据或执行未授权的操作。
跨域可以出现在以下情况下:
跨域请求通常是被浏览器阻止的,除非服务器在响应中设置了 CORS(跨域资源共享)头部,或者使用其他跨域解决方案,如 JSONP、代理服务器、WebSocket 等。
在开发 Web 应用程序时,需要注意跨域问题,并根据需要采取适当的措施,以确保跨域请求的安全性和合法性。
同源安全策略(Same-Origin Policy)是浏览器中一种基本的安全机制,用于保护用户的信息安全和防止恶意网站的攻击。同源安全策略定义了浏览器如何限制跨域请求以及访问跨域资源的规则。
同源安全策略要求在保护用户隐私和安全的前提下,只有当以下三个条件满足时,才允许不受限制地进行跨域资源访问:
http://example.com
http://www.example.com
同源安全策略的限制适用于许多跨域请求方式,包括通过XMLHttpRequest对象发送的Ajax请求、动态创建的、<script>或<link>标签携带的资源请求等。
如果需要进行跨域请求或访问跨域资源,可以通过以下方式来解决同源安全策略的限制:
总之,同源安全策略是浏览器的一项重要安全机制,用于限制跨域请求和资源访问,确保用户的隐私和安全。开发者需要在遇到跨域问题时,根据具体情况选择适当的解决方案来绕过同源安全策略的限制。
在nestjs底层中使用了Express的Cors包,用法类似,只需在main.ts中加入一行代码
它可以根据请求(动态)异步定义配置对象,例如
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.enableCors({
origin: true,
methods: 'GET,PUT,POST',
allowedHeaders: 'Content-Type,Authorization',
exposedHeaders: 'Content-Range,X-Content-Range',
credentials: true,
maxAge: 3600,
});
await app.listen(3000);
}
bootstrap();
还可以在app上面配置,它可以接受三种类型的参数,Boolean,Options配置项,回调函数,用法很简单,具体配置项看Cors官方文档 ExpressJS / CORS
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule, { cors: true });
await app.listen(3000);
}
bootstrap();
创建一个中间件类,例如CorsMiddleware
import { Injectable, NestMiddleware } from '@nestjs/common';
@Injectable()
export class CorsMiddleware implements NestMiddleware {
use(req: any, res: any, next: () => void) {
// 在这里配置跨域相关的逻辑
const allowedOrigins = ['http://example1.com', 'http://example2.com']; // 允许的源
const requestOrigin = req.header('Origin');
if (allowedOrigins.includes(requestOrigin)) {
res.setHeader('Access-Control-Allow-Origin', requestOrigin);
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
}
next();
}
}
在特定模块中使用
import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { CorsMiddleware } from './cors.middleware';
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer
.apply(CorsMiddleware)
.forRoutes('*'); // 设置需要应用中间件的路由路径,此处为所有路由
}
}
这样,当应用程序接收到请求时,中间件将会被调用进行跨域的处理操作,配置的回调函数将被执行,并且会添加适当的 CORS 头部到响应中。请根据自己的需求进行相应的配置和处理逻辑。
跨域问题是最常见的问题了,现在前端,后端,ng都能解决,而nest底层为我们提供了对应的方法供我们使用,大大简化了开发中遇到的问题。希望能够帮助到大家
文章浏览阅读2.2k次。除非一个参数被标记为 CLI ONLY,否则该参数也被x265_param_parse() 支持。CLI使用getopt 函数来解释命令行参数,长短版本的参数都可以使用,长参数在不引起歧义的情况下可以截断成短参数。API用户必须把完整的参数名传递给 x265_param_parse()。Preset和tune 有特殊的含义,API用户需要在调用x265_param_parse()设置其他参数之前使..._x265参数
文章浏览阅读307次。而今天分享的这份阿里内网“M9级全彩高并发编程手册”,让大家不仅能够学到深度、专业的编程知识,还能感受到阿里专注地提高编程技能的态度,始终如一地贡献、分享Java专业知识与经验的精神,以及持续学习、持续成长的进取精神,文末附高清电子版。看干货获取方式扫描下方公众号【java1234】回复:9966,可获取下载链接????????????????长按上方二维码2 秒回复「9966」即可如果不会领取,或者需要其他java..._m9级全彩高并发编程手册
文章浏览阅读1.3k次。1. 例题一<?phpshow_source(__FILE__);function areyouok($greeting){ return preg_match('/$Merry.*Christmas/is',$greeting);}$greeting=@$_REQUEST['greeting'];if(!areyouok($greeting)){ if(strpos($greeting,'Merry Christmas')!==false){ echo_regmatch 绕过
文章浏览阅读493次。焦距是视野的范围的区间,焦距越小,视野越大,画面所容纳的东西越多,同时单个主题的占比就会越小。焦距的单位是mm(毫米)。其他分类镜头上的f值来表示光圈,光圈越大,f值越小。恒定光圈镜头优于浮动光圈镜头,恒定光圈越大,镜头等级越高。变焦镜头还包括外变焦镜头(拧动变焦环的时候,镜头长短有变化)和内变焦镜头(镜头长短没有变化)利用手机完全可以学好摄影,拍出好看的照片,如下是苹果手机摄影获奖作品。_摄影学习博客
文章浏览阅读454次。1.配置urlfrom django.urls import pathimport xadminfrom django.urls import includeurlpatterns = [ path('xadmin/', xadmin.site.urls), path('ueditor/', include('DjangoUeditor.urls')),]2.注册..._mxshop\extra_apps\xadmin
文章浏览阅读273次。在使用CAS的时候,对Cookies、session、jsession 这三者是什么不是很了解。翻阅资料和实践后终于明白这三者的概念和它们的用处。一、http我们知道网页的传输大部分基于http协议。HTTP协议的主要特点可概括如下:1.支持客户/服务器模式。2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类..._jsession session
文章浏览阅读1.1k次,点赞16次,收藏23次。2024年10个最佳人工智能视频生成器、10个最佳人工智能转录软件和服务、10个最佳人工智能语音生成器、10个最佳文本转语音生成器,优缺点对比分析及附访问地址可打开直接使用。_脚本自动生成视频 软件
文章浏览阅读846次。今天来记录一下之前遇到的问题,当时有个需求是点击柱状图的图例,显示不同的堆叠图,并且其中有一条虚线来显示当前高亮的堆叠图的数据平均值,页面功能效果实现代码如下 myChart.on('legendselectchanged', barfunction) function barfunction(obj) { let selectedItem = [] // 当前选中的高亮名 let totalArr = [] // 分母 let unitP_echarts 图例 selected动态赋值
文章浏览阅读1.1w次,点赞6次,收藏31次。1. el-table整个容器的样式 标签的style中设置<el-table style = "样式"></el-table>2. el-table表头的样式修改<el-table :header-cell-style = "函数名称"></el-table>header-cell-style绑定的函数返回的是表头的样式函数在method..._element ui table column行内style
文章浏览阅读5.2k次。启动HDFS时dataNode一直没有启动我们执行hdfs启动命令后,再输入 jps 命令查看启动进程,发现没有DataNode进程hadoop namenode -formatsbin/start-dfs.sh原因当我们使用 hadoop namenode -format 格式化namenode时,会在namenode数据文件夹(这个文件夹为自己配置文件中dfs.nam..._org.apache.hadoop.ipc.rpc
文章浏览阅读7.1k次。[root@centos6-1 ~]# cat infile aaa -1aaa -2aaa -3aaa 28aaa -22bbb -2bbb -4bbb -6ccc -2ccc -3ccc -8ccc -10ddd -2ddd -4ddd -12[root@centos6-1 ~]# [root@centos6-1 ~]# [ro_awk绝对值函数
文章浏览阅读356次。ScrollView嵌套多行的EditText时,EditText内容滑动不了。et.setOnTouchListener((view, motionEvent) -> { if ((view.getId() == R.id.et && canVerticalScroll(et))) { view.getParent().requestDisallowInterceptTouchEvent(true); if (motionEvent.getAction() == _android edittext scrollview滑动冲突