浏览器同源策略、跨域、跨域请求,服务器处理没、跨域解决方案

目录

    • 什么是同源策略
    • 什么是跨域
      • 发生跨域时,服务器有没有接到请求并处理响应:(两种情况)
    • 如何解决跨域

什么是同源策略

概念:
同源策略是浏览器的一种安全机制,用于防止恶意网站对用户的敏感数据进行未经授权的访问。它限制了从一个源加载的脚本对另一个源的资源进行访问。 简单来说,同源策略规定只有当两个页面的协议、域名和端口都相同时,它们才属于同一个源,允许相互访问资源

好处:

  1. 保护用户数据安全,不同源的脚本无法访问另一个源的Cookie、LocalStorage、SessionStorage
  2. 不同源的脚本无法读取或操作另一个源的Dom
  3. 跨源的XMLHttpRequest或Fetch请求会被浏览器阻止,除非目标服务器允许(使用CORS)

什么是跨域

当一个网页试图访问不同来源的资源(如API、图片、脚本、数据等),就会发生跨域,常说的跨域指的是ajax调用接口时的跨域,浏览器会根据同源策略来判断来源是否一致,如果不一致就认为是跨域请求。如果服务器没有做一些配置,那么跨域请求会失败。

发生跨域时,服务器有没有接到请求并处理响应:(两种情况)

  1. 简单请求:
    1. 使用的方法是get、post时
    2. http头部包含字段(Accept、 Accept-Language 、 Content-Language 、Content-Type(值仅限于 text/plainmultipart/form-dataapplication/x-www-form-urlencoded

服务器会收到请求并处理该请求返回响应,如果服务器并没有设置跨域的响应头(如Access-Control-Allow-Origin),浏览器会阻止前端代码访问响应数据,但服务器已经执行了请求逻辑

  1. 复杂请求:
    1. put、delete等方法
    2. 包含自定义的请求头(如 AuthorizationX-Custom-Header) 、Content-Type 的值是非简单值(如 application/json

预检请求机制,在发送复杂请求之前,浏览器会自动发起一个OPTIONS预检请求。如果预检请求通过,浏览器会发送实际请求,如果预检失败,浏览器会直接阻止请求发送。

如何解决跨域

  1. 我们项目使用的是代理服务器解决跨域问题,跨域问题是存在于浏览器和服务器之间,服务器和服务器之间是不存在跨域问题的。
  • 开发环境通过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;
}
  1. 使用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。
  1. 使用JSONP(仅支持get请求)

通过 <script> 标签加载数据,因为 <script> 不受同源策略限制。服务器返回的是 JavaScript 代码。

  1. 使用WebSocket

WebSocket 不受同源策略限制,可以用于双向跨域通信。需要服务器验证 Origin 确保安全。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/61941.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

D87【python 接口自动化学习】- pytest基础用法

day87 pytest运行参数 -m -k 学习日期&#xff1a;20241203 学习目标&#xff1a;pytest基础用法 -- pytest运行参数-m -k 学习笔记&#xff1a; 常用运行参数 pytest运行参数-m -k pytest -m 执行特定的测试用例&#xff0c;markers最好使用英文 [pytest] testpaths./te…

【嘟嘟早教卡】 小程序源码分享带后台管理

【嘟嘟早教卡】是专门为 3-6 岁婴幼儿童学习普通话、英语研发的早教启蒙认知识字的小程序 小程序由 Taro 及 Tailwind CSS 构建而成&#xff0c;后台管理使用 Laravel 及 Tailwind CSS 想法源于小时候玩的认知卡片&#xff0c;基本大部分家庭都买过认知卡片&#xff0c;我按照…

数据分析学习

数据分析的定义 数据分析是通过对收集到的数据进行清理、转换、建模、分析和解释&#xff0c;从中提取有用的信息和洞察&#xff0c;以帮助做出更好的决策。数据分析可以应用于各种领域&#xff0c;比如商业、金融、医疗、市场营销等&#xff0c;目的是通过数据来发现模式、趋…

Python几种常用数据结构(重制版)

一、列表 [List] 定义&#xff1a;有序可重复的数据集合。示例&#xff1a;my_list [element1, element2, element3]增加元素方法&#xff1a; append()&#xff1a;在列表末尾增加单个元素&#xff08;列表特有方法&#xff09;&#xff0c;例如 my_list.append(element)。e…

黑马微服务开发与实战学习笔记_MybatisPlus_P1介绍与快速入门

系列博客目录 文章目录 系列博客目录MybatisPlus介绍快速入门Part1:入门案例Part1.1:MyBatis项目Part1.2:实现MP Part2:常见注解Part2.1:约定Part2.2:常见注解 Part3:常见配置MyBatisPlus使用的基本流程是什么? MybatisPlus介绍 在Mybatis上加了Plus&#xff0c;表示对Mybati…

虚幻引擎---材质篇

一、基础知识 虚幻引擎中的材质&#xff08;Materials&#xff09; 定义了场景中对象的表面属性&#xff0c;包括颜色、金属度、粗糙度、透明度等等&#xff1b;可以在材质编辑器中可视化地创建和编辑材质&#xff1b;虚幻引擎的渲染管线的着色器是用高级着色语言&#xff08;…

爬虫专栏第一篇:深入探索爬虫世界:基础原理、类型特点与规范要点全解析

本专栏会对爬虫进行从0开始的讲解&#xff0c;每一步都十分的细致&#xff0c;如果你感兴趣希望多多点赞收藏关注支持 简介&#xff1a;文章对爬虫展开多方面剖析。起始于爬虫的基本概念&#xff0c;即依特定规则在网络抓取信息的程序或脚本&#xff0c;在搜索引擎信息提取上作…

vue 项目实现阻止浏览器记住密码

​在各个浏览器中&#xff0c;登录输入密码一般都会弹出是否记住密码的功能&#xff0c;如果记住之后&#xff0c;会在各个密码框自动填充记住的密码&#xff0c;这无疑是一种不安全的操作&#xff0c;所以要实现禁用阻止浏览器记住密码的行为 查阅资料&#xff0c;也得到很多…

Y20030028 JAVA+SSM+MYSQL+LW+基于JAVA的考研监督互助系统的设计与实现 源代码 配置 文档

基于JAVA的考研监督互助系统 1.项目描述2. 课题开发背景及意义3.项目功能4.界面展示5.源码获取 1.项目描述 随着高等教育的普及和就业竞争的加剧&#xff0c;越来越多的学生选择继续深造&#xff0c;参加研究生入学考试。考研人数的不断增加&#xff0c;使得考研过程中的学习监…

【AI系统】推理流程全景

推理流程全景 本文介绍神经网络模型在部署态中的两种方式&#xff1a;云侧部署和边缘侧部署。其中&#xff0c;云侧部署适用于云服务器等具备强大计算能力和存储空间的环境&#xff0c;可以实现高吞吐量和集中的数据管理&#xff0c;但可能面临高成本、网络延迟和数据隐私等挑…

9.13[debug]

这个错误表明 Git 尝试通过 HTTPS 协议连接到 Gitee 上的仓库时&#xff0c;实际上却尝试连接到了本地的 127.0.0.1&#xff08;即 localhost&#xff09;的 7890 端口&#xff0c;这通常是因为 HTTP 代理配置错误或全局 Git 配置中的代理设置不正确 如果这些命令返回了代理设…

Linux-GPIO应用编程

本章介绍应用层如何控制 GPIO&#xff0c;譬如控制 GPIO 输出高电平、或输出低电平。 只要是用到GPIO的外设&#xff0c;都有可能用得到这些操作方法。 照理说&#xff0c;GPIO的操作应该是由驱动层去做的&#xff0c;使用寄存器操作或者GPIO子系统之类的框架。 但是&#xff0…

【Linux】用户操作命令

声明&#xff1a;以下内容均学习自《Linux就该这么学》一书 1、管理员root Linux系统的管理员之所以是root&#xff0c;并不是因为它的名字叫root&#xff0c;而是因为该用户的身份号码UID&#xff08;User IDentification&#xff09;的数值是0。UID相当于身份证号码&#x…

Altium Designer学习笔记 28 扇孔处理

基于Altium Designer 23学习版&#xff0c;四层板智能小车PCB 更多AD学习笔记&#xff1a;Altium Designer学习笔记 1-5 工程创建_元件库创建Altium Designer学习笔记 6-10 异性元件库创建_原理图绘制Altium Designer学习笔记 11-15 原理图的封装 编译 检查 _PCB封装库的创建Al…

XiYan-SQL:⼀种多⽣成器集成的Text-to-SQL框架

发布于:2024 年 12 月 03 日 星期二 北京 #NL2SQL #阿里巴巴 #Text-to-SQL 文提出了一种用于自然语言到 SQL 转换的多生成器集成框架 ——XiYan-SQL,旨在应对大型语言模型在 NL2SQL 任务中的挑战。该框架融合提示工程与监督微调(SFT)方法,利用 SFT 的可控性与上下文学习(…

插入算法介绍(c基础)

介绍一下希尔排序法(c基础)-CSDN博客 一、插入算法概述 定义 插入算法是一种常见的排序算法&#xff0c;它的基本思想是通过构建有序序列&#xff0c;对于未排序数据&#xff0c;在已排序序列中从后向前扫描&#xff0c;找到相应位置并插入。适用场景 插入算法适用于数据量较小…

qtcanpool 知 08:Docking

文章目录 前言口味改造后语 前言 很久以前&#xff0c;作者用 Qt 仿照前端 UI 设计了一个 ministack&#xff08;https://gitee.com/icanpool/qtcanpool/blob/release-1.x/src/libs/qcanpool/ministack.h&#xff09; 控件&#xff0c;这个控件可以折叠。部分用户体验后&#…

嵌入式C编程:宏定义与typedef的深入对比与应用

目录 一、宏定义&#xff08;Macro Definition&#xff09; 1.1. 特点与应用 1.1.1 定义常量 1.1.2 定义函数式宏 1.1.3 条件编译 1.2. 作用范围和生命周期方面 1.3. 应用注意事项 二、typedef 2.1. 特点与应用 2.1.1 简化类型声明 2.1.2 提高代码可读性 2.1.3 实现…

如何高效写论文-学习笔记【AI算法研究猿James】

视频链接&#xff1a;如何高效写论文_哔哩哔哩_bilibili 视频里面广告内容较多&#xff0c;为便于复习回顾&#xff0c;现对学习内容进行记录。 目录 1、写论文总体认知 1.1、写论文到底有多重要? 1.2、写论文难在哪儿? 2、从审稿人角度看论文写作 2.1、审稿人在意的是…

使用 EasyExcel 实现高效的 Excel 读写操作

在日常开发中&#xff0c;Excel 文件的读写操作是一个常见的需求。EasyExcel 是阿里巴巴开源的一个高性能、易用的 Excel 读写库&#xff0c;可以大幅提高处理 Excel 文件的效率。它通过事件驱动模型优化了大数据量 Excel 的读写性能&#xff0c;非常适合处理大文件或高并发场景…