浏览器同源策略、跨域、跨域请求,服务器处理没、跨域解决方案
目录
- 什么是同源策略
- 什么是跨域
- 发生跨域时,服务器有没有接到请求并处理响应:(两种情况)
- 如何解决跨域
什么是同源策略
概念:
同源策略是浏览器的一种安全机制,用于防止恶意网站对用户的敏感数据进行未经授权的访问。它限制了从一个源加载的脚本对另一个源的资源进行访问。 简单来说,同源策略规定只有当两个页面的协议、域名和端口都相同时,它们才属于同一个源,允许相互访问资源。
好处:
- 保护用户数据安全,不同源的脚本无法访问另一个源的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后台也没有提示出任何的异常堆栈,后来经过在后端一点一点的单点测试,终于发…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
