浏览器同源策略、跨域、跨域请求,服务器处理没、跨域解决方案
目录
- 什么是同源策略
- 什么是跨域
- 发生跨域时,服务器有没有接到请求并处理响应:(两种情况)
- 如何解决跨域
什么是同源策略
概念:
同源策略是浏览器的一种安全机制,用于防止恶意网站对用户的敏感数据进行未经授权的访问。它限制了从一个源加载的脚本对另一个源的资源进行访问。 简单来说,同源策略规定只有当两个页面的协议、域名和端口都相同时,它们才属于同一个源,允许相互访问资源。
好处:
- 保护用户数据安全,不同源的脚本无法访问另一个源的Cookie、LocalStorage、SessionStorage
- 不同源的脚本无法读取或操作另一个源的Dom
- 跨源的XMLHttpRequest或Fetch请求会被浏览器阻止,除非目标服务器允许(使用CORS)
什么是跨域
当一个网页试图访问不同来源的资源(如API、图片、脚本、数据等),就会发生跨域,常说的跨域指的是ajax调用接口时的跨域,浏览器会根据同源策略来判断来源是否一致,如果不一致就认为是跨域请求。如果服务器没有做一些配置,那么跨域请求会失败。
发生跨域时,服务器有没有接到请求并处理响应:(两种情况)
- 简单请求:
- 使用的方法是get、post时
- http头部包含字段(Accept、 Accept-Language 、 Content-Language 、
Content-Type(值仅限于text/plain、multipart/form-data或application/x-www-form-urlencoded)
服务器会收到请求并处理该请求返回响应,如果服务器并没有设置跨域的响应头(如Access-Control-Allow-Origin),浏览器会阻止前端代码访问响应数据,但服务器已经执行了请求逻辑
- 复杂请求:
- put、delete等方法
- 包含自定义的请求头(如
Authorization、X-Custom-Header) 、Content-Type的值是非简单值(如application/json)
预检请求机制,在发送复杂请求之前,浏览器会自动发起一个OPTIONS预检请求。如果预检请求通过,浏览器会发送实际请求,如果预检失败,浏览器会直接阻止请求发送。
如何解决跨域
- 我们项目使用的是代理服务器解决跨域问题,跨域问题是存在于浏览器和服务器之间,服务器和服务器之间是不存在跨域问题的。
- 开发环境通过Vue配置代理服务器。在vue.config.js中添加devServer.proxy配置。将项目dev-api开头的请求转发到项目后台服务器上
module.exports = {devServer: {proxy: {// 代理 `/api` 开头的请求'/dev-api': {target: 'http://example.com', // 目标服务器地址},},},
};
- 生产环境是通过nginx配置反向代理,在nginx的conf配置文件中配置将prod-api开头的请求转发到项目后台服务器上。
location /prod-api {proxy_pass https://heimahr-t.itheima.net;
}
- 使用CORS,服务器设置特定的http响应头,告诉浏览器哪些跨域请求是被允许的。
在服务器端添加以下响应头:
Access-Control-Allow-Origin: 指定允许访问的来源(如 https://example.com 或 *)。
Access-Control-Allow-Methods: 指定允许的请求方法(如 GET, POST, PUT, DELETE)。
Access-Control-Allow-Headers: 指定允许的自定义请求头(如 Content-Type, Authorization)。
Access-Control-Allow-Credentials: 是否允许携带 Cookies。
- 使用JSONP(仅支持get请求)
通过 <script> 标签加载数据,因为 <script> 不受同源策略限制。服务器返回的是 JavaScript 代码。
- 使用WebSocket
WebSocket 不受同源策略限制,可以用于双向跨域通信。需要服务器验证 Origin 确保安全。
相关文章:
浏览器同源策略、跨域、跨域请求,服务器处理没、跨域解决方案
目录 什么是同源策略什么是跨域发生跨域时,服务器有没有接到请求并处理响应:(两种情况) 如何解决跨域 什么是同源策略 概念: 同源策略是浏览器的一种安全机制,用于防止恶意网站对用户的敏感数据进行未经授…...
flink-connector-mysql-cdc:02 mysql-cdc高级扩展
flink-connector-mysql-cdc:01 mysql-cdc基础配置代码演示02 mysql-cdc高级扩展03 mysql-cdc常见问题汇总04 mysql-cdc-kafka生产级代码分享05 flink-kafka-doris生产级代码分享06 flink-kafka-hudi生产级代码分享 flink-cdc版本:3.2.0flink版本…...
Couchbase 简介
Couchbase 是一款分布式 NoSQL 数据库,主要用于现代应用程序中高性能、高可扩展性和灵活的数据存储需求。它结合了文档存储和键值存储的特性,为开发者提供了一种高效的数据库解决方案。 Couchbase 的特点 高性能: 支持内存优先的架构&#x…...
我们来学mysql -- 事务并发之幻读(原理篇)
事务并发之幻读 题记幻读系列文章 题记 在《事务之概念》提到事务对应现实世界的状态转换,这个过程要满足4个特性这世界,真理只在大炮射程之类,通往和平的道路,非“常人”可以驾驭一个人生活按部就班,人多起来&#x…...
Ubuntu Linux 图形界面工具管理磁盘分区和文件系统(八)
本文为Ubuntu Linux操作系统- 第八弹~~ 今天接着上文的内容,讲Linux磁盘分区存储的相关知识~ 上期回顾:命令行-管理磁盘分区和文件系统 今天看酷酷的雪獒铠甲!!雪獒铠甲合体~ 文章目录 磁盘管理器GNOME Disks主要功能安装命令 磁盘…...
Eclipse IDE 各个版本的用途和区别
Eclipse官方下载地址:https://www.eclipse.org/downloads/packages/ 会出现很多个Eclipse版本,初学者可能会感觉到很迷惑,不知道下载哪个版本。 Eclipse IDE for Enterprise Java and Web Developers (544 MB) 专为 Java 和 Web 应用开发者设计 包含 Java IDE、JavaScript、…...
国产GPU中,VLLM0.5.0发布Qwen2.5-14B-Instruct-GPTQ-Int8模型,请求返回结果乱码
概述 国产GPU: DCU Z100 推理框架: vllm0.5.0 docker容器化部署 运行如下代码: python -m vllm.entrypoints.openai.api_server --model /app/models/Qwen2.5-14B-Instruct-GPTQ-Int8 --served-model-name qwen-gptq --trust-remote-code --enforce…...
在 Vue 3 中实现点击按钮后禁止浏览器前进或后退
在 Vue 3 中实现点击按钮后禁止浏览器前进或后退,我们可以通过 ref 和 watch 来管理状态,同时使用 onBeforeUnmount 来清理事件监听。 使用 Vue 3 实现: <template><div><button click"disableNavigation">点击…...
Linux:软硬链接
目录 一、概念 软链接 硬链接 二、原理 硬链接 软链接 三、使用场景 硬链接 软链接 一、概念 软链接 在当前目录下,有一个普通文件a.txt。 ln -s a.txt a_soft.link结论: 软链接是一个文件。 观察inode_id,发现软链接有着独立…...
Delphi XE 安卓Web开发 错误:net::ERR_CLEARTEXT_NOT_PERMITTED
解决方法: 1、确保已经申明权限(AndroidManifest.xml 文件) 1 <uses-permission android:name"android.permission.INTERNET" /> 2、开启 usesCleartextTraffic 1 2 <application android:usesCleartextTraffic&qu…...
深入理解malloc与vector:内存管理的对比
引言 在编程中,内存管理是一个至关重要的环节。无论是C语言中的malloc函数,还是C标准库中的vector容器,它们都在内存分配和释放上扮演着关键角色。然而,它们的设计理念和用法有着显著的不同。本文将深入探讨malloc和vector的区…...
多个输入框联合搜索
如果你有多个输入框,并希望进行联合精准搜索,可以通过组合多个输入框的值来过滤数据。在JavaScript中,常见的做法是先收集每个输入框的值,然后使用这些值过滤数据。 示例:多个输入框联合精准搜索 假设有多个输入框用…...
笔记03----NeurIPS2024 涨点!SSA:用于语义分割的语义和空间自适应像素级分类器(即插即用)
前言 文章标题:《SSA-Seg: Semantic and Spatial Adaptive Pixel-level Classiffer for Semantic Segmentation》 助力语义分割涨点!SSA:一种新颖的语义和空间自适应分类器,显著提高了基线模型的分割性能,比如SegNeXt、OCRNet和UperNet等模型…...
自定义比较函数 down 作为 sort 函数的参数实现数组元素从大到小排序
【自定义比较函数 down 作为 sort 函数的参数实现数组元素从大到小排序】 #include <bits/stdc.h> using namespace std;const int maxn1e35; int a[maxn];bool down(int u,int v) {return u>v; }int main() {int n;cin>>n;for(int i0; i<n; i) cin>>…...
在 Spring Boot 中使用 JPA(Java Persistence API)进行数据库操作
步骤 1: 添加依赖 在 pom.xml 文件中添加相关依赖: <dependencies><!-- Spring Boot Starter Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><…...
简单聊聊PLT和GOT
在 Linux 的动态链接中,PLT(Procedure Linkage Table) 和 GOT(Global Offset Table) 是动态链接机制中的两个关键组件,它们一起支持程序动态加载共享库以及在运行时解析符号地址。下面是它们的作用和原理&a…...
FaRM译文
No compromises: distributed transactions with consistency, availability, and performance Aleksandar Dragojevic, Dushyanth Narayanan, Edmund B. Nightingale, Matthew Renzelmann, Alex Shamis, Anirudh Badam, Miguel Castro Microsoft Research 目录 摘要 1. 引…...
用vue框架写一个时钟的页面
你可以使用Vue框架来创建一个简单的时钟页面。首先,你需要在HTML文件中引入Vue框架的CDN: <script src"https://cdn.jsdelivr.net/npm/vue"></script>然后,创建一个包含时钟功能的Vue实例: <div id&qu…...
HTML表单-第二部分
HTML表单 表单元素是允许用户在表单中输入内容,比如:文本域,下拉列表,单选框,复选框等等‘ 使用<from>标签创建 例如 <from> . input . </from> HTML表单-输入元素 <input>标签创建ÿ…...
PyQt5:一个逗号引发的闪退血案
【日常小计】 在开发PyQt5程序时,调用了一个写入excel表格的后端方法,但是每次打开页面点击对应的动作,窗口就会闪退,而且Python后台也没有提示出任何的异常堆栈,后来经过在后端一点一点的单点测试,终于发…...
Llama-3.2V-11B-cot实战:基于SpringBoot构建企业级智能客服原型
Llama-3.2V-11B-cot实战:基于SpringBoot构建企业级智能客服原型 最近在帮一个朋友的公司做技术选型,他们想快速搭建一个智能客服原型,既要成本可控,又要能快速集成到现有的Java技术栈里。聊了一圈,发现很多团队都卡在…...
Pi0一键部署教程:nohup后台运行+log实时监控+进程安全终止
Pi0一键部署教程:nohup后台运行log实时监控进程安全终止 本文介绍如何快速部署和运行Pi0机器人控制模型,重点讲解后台运行、日志监控和进程管理的实用技巧,让AI应用稳定运行在服务器环境中。 1. 项目简介:什么是Pi0? …...
Voyager复杂导航模式实现:底部导航、标签页和嵌套导航实战
Voyager复杂导航模式实现:底部导航、标签页和嵌套导航实战 【免费下载链接】voyager 🛸 A pragmatic navigation library for Jetpack Compose 项目地址: https://gitcode.com/gh_mirrors/voyag/voyager Voyager是一个专为Jetpack Compose设计的实…...
【JDK21虚拟线程生产就绪 checklist】:8类典型场景配置模板(WebFlux/Quarkus/Vert.x/RSocket全覆盖)
第一章:JDK21虚拟线程核心机制与生产就绪定义虚拟线程(Virtual Threads)是 JDK 21 中正式引入的里程碑特性(JEP 444),其本质是轻量级、用户态调度的 Java 线程抽象,由 JVM 在平台线程࿰…...
告别硬件烧钱!用Proteus仿真Arduino UNO做智能小车传感器方案选型
告别硬件烧钱!用Proteus仿真Arduino UNO做智能小车传感器方案选型 在创客和电子竞赛领域,智能小车一直是热门项目,但高昂的硬件成本常常让爱好者望而却步。一套完整的智能车系统可能包含多个传感器、电机驱动模块和控制器,实体采购…...
ESP-IDF嵌入式类型工具:轻量级字节与位操作库
1. 项目概述 esp_type_utils 是面向 ESP-IDF 生态的轻量级类型工具组件,专为嵌入式底层开发中高频出现的字节级数据操作与字符串格式化需求而设计。它并非 ESP-IDF 官方 SDK 的一部分,而是由开发者 Eric Gionet(K0I05)维护的开源…...
如何用一套键鼠控制多台电脑?Lan Mouse跨平台键鼠共享终极指南
如何用一套键鼠控制多台电脑?Lan Mouse跨平台键鼠共享终极指南 【免费下载链接】lan-mouse mouse & keyboard sharing via LAN 项目地址: https://gitcode.com/gh_mirrors/la/lan-mouse 你是否经常需要在多台电脑之间切换工作?Windows台式机、…...
Qwen-Turbo-BF16数据库课程设计:智能问答系统开发
Qwen-Turbo-BF16数据库课程设计:智能问答系统开发 想象一下,你正在上一门数据库课程。老师布置了一个课程设计:开发一个学生信息管理系统。你需要设计表结构,写SQL查询,还要做个简单的界面。你埋头苦干,终…...
别再硬编码了!用注解+工厂模式,5分钟为你的Java应用扩展一个新PLC协议(ModbusTCP/S7为例)
工业物联网中Java协议扩展的优雅实践:注解驱动与工厂模式深度整合 工业物联网(IIoT)平台的开发者们经常面临一个棘手问题:如何在不重构核心代码的情况下,快速接入各种PLC设备协议?想象一下这样的场景:你的系统已经稳定…...
HPKM-PINN:KAN-MLP并行混合物理信息神经网络技术 第1章 KAN基础与MLP局限的理论分析(二)
脚本 2.1.2.2:激活函数选择——Tanh 与 SwiGLU 在物理约束中的适应性 涉及内容:对比分析 Tanh 与 SwiGLU 激活函数在物理信息神经网络中的适应性,验证不同物理约束(如边界条件、守恒律)下的数值稳定性。 使用方式:运行脚本生成激活函数特性对比、物理约束满足度分析及梯…...
