浏览器跨域问题

文章目录

  • 什么是跨域
  • 跨域的原理
  • 跨域出现的场景
  • 跨域的解决

什么是跨域

违背同源策略就是跨域。
同源策略: 网页的url 和 该网页请求的url 的协议、域名、端口必须保持一致。
协议、域名、端口必须保持一致.
同源策略存在的原因: 保护用户隐私和防范网络攻击(https://editor.csdn.net/md?not_checkout=1&spm=1011.2415.3001.6217&articleId=132763789)
即如果网页请求的url 和 网页的url 的协议、域名、端口任意一项不同就是跨域。

跨域的原理

跨域是请求发出去了,服务器接收并返回了结果,只是浏览器没有接收响应结果。
在这里插入图片描述

跨域出现的场景

  • html中的跨域:图像加载(img的src,background的url)、脚本引用(script的src)。但是通过这些标签访问的资源虽然即使是跨域资源,但浏览器仍然会允许资源的加载和显示。—— jsonp的原理
  • windows跨域:window.open(”跳转的地址“),当跳转的地址和项目的地址不满足同源策略的时候可能会出现跨域问题。
  • js中的跨域:XML请求(XMLHttpRequest),XMLHttpRequest是一种常见的通过 JavaScript 发起跨域请求的方式。浏览器会基于同源策略对XMLHttpRequest发起的跨域请求进行限制。 —— 最常见的形式

跨域的解决

分上面三种情况分别解决

  1. html中的跨域:html中的跨域浏览器并不会限制,所以不用处理
  2. windows跨域:
  • windows跳转出现的跨域问题可以使用rel="noopener noreferrer" 属性进行解决
window.open("https://www.example.com", "_blank", "rel=noopener,noreferrer");

这个属性指示浏览器不要在打开的新窗口中传递引用到原始页面,从而限制了对原始页面的访问,从而不会出现跨域问题。

  • 使用服务器中间页:创建一个位于自己域名下的服务器中间页,该中间页作为跳转页,用于将用户重定向到目标页面。
  • CORS方式(下面说)
  1. js中的跨域:一般说的就是XML跨域(ajax跨域)
  • jsonp方式解决——利用script标签的跨域不限制性
    前端需要定义函数,而且后端需要调用该函数
    jsonp只能解决GET请求跨域,所以jsonp请求很少用
  • CORS方式解决
    CORS通过设置响应头来实现跨域请求,由后端人员添加响应头
response.setHeader('Access-Control-Allow-Origin','*');

浏览器一看到后端携带的响应头就不拦截数据了,就可以实现跨域请求。
造成的问题是任何人都可以向该后端要数据,是不安全的。
(可以通过使用浏览器的开发者工具来查看HTTP响应头部中是否包含Access-Control-Allow-Origin字段来判断该资源是否设置了Access-Control-Allow-Origin共跨域使用)

jsonp和CORS方法的使用详见:https://blog.csdn.net/mantou_riji/article/details/124767753?ydreferer=aHR0cHM6Ly9tcC5jc2RuLm5ldC9tcF9ibG9nL21hbmFnZS9hcnRpY2xlP3NwbT0xMDAxLjIxMDEuMzAwMS41NDQ4

  • 最后一种解决方法就是代理服务器。
    代理服务器的原理:
    设置一个代理服务器,它的协议名、主机名、端口号和前端页面的一模一样,这样前端访问该代理服务器就没有跨域问题了。
    当该代理服务器收到前端的请求,再向其他服务器发送该请求,获取数据,之后将数据返回给前端。
    (服务器之间不是通过ajax请求发送信息自然也没有跨域这个问题了)
    在这里插入图片描述
    代理服务器的实现:
    • nginx实现代理服务器: niginx配置代理转发的文件,当用户访问这个网址的时候就将代理进行转发
    • node实现代理服务器:。。。
    • 如果是vue项目直接配置vue.config.js
      配置代理服务器需要对vue.config.js做如下配置:
module.exports = {devServer: {// 这里配置的是向哪台服务器发送请求// (代理服务器的地址不用管他会自动配置)proxy: '协议名://主机名:端口号'}
}

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

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

相关文章

用C语言实现牛顿摆控制台动画

题目 用C语言实现牛顿摆动画,模拟小球的运动,如图所示 拆解 通过控制台API定位输出小球运动的只是2边小球,中间小球不运动,只需要固定位置输出左边小球上升下降时,X、Y轴增量一致。右边小球上升下降时,X、…

IDEA中debug调试模拟时显示不全(不显示null)的解决

IDEA中debug调试模拟时显示不全(不显示null)的解决 1、在IDEA中找到File(文件)->Settings(设置) 2、依次找到以下内容进行设置(原版、汉化版): 打开Build, Executio…

分页功能实现

大家好 , 我是苏麟 , 今天聊一聊分页功能 . Page分页构造器是mybatisplus包中的一个分页类 . Page分页 引入依赖 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.1</ver…

SpringMVC之CRUD------增删改查

目录 前言 配置文件 pom.xml文件 web.xml文件 spring-context.xml spring-mvc.xml spring-MyBatis.xml jdbc.properties数据库配置文件 generatorConfig.xml log4j2日志文件 后台 PageBaen.java PageTag.java 切面类 biz层 定义一个接口 再写一个实现类 …

[Spring] @Configuration注解原理

文章目录 1.Configuration注解介绍1.1 容器注入ConfigurationClassPostProcessor后置处理器1.2 ConfigurationClassPostProcessor介绍 2.ConfigurationClassPostProcessor解析2.1 Parse12.2 Parse22.3 Parse32.4 Parse42.5 Parse5 3.ConfigurationClassParser解析4.Configurati…

形态图像处理

形态图像处理 预备知识 反射、平移结构元 腐蚀和膨胀 腐蚀 将 B 平移&#xff0c;当其原点位于 z 时&#xff0c;其包含在 A 中&#xff0c;则 z 为一个有效的位置&#xff0c;所有有效的z构成了腐蚀之后的结果腐蚀缩小或细化了二值图像中的物体可以将腐蚀看作形态学滤波操…

[docker]笔记-portainer的使用

1、安装完成后输入ip加端口号打开网页&#xff0c;并再相应位置输入初始密码&#xff0c;初始密码自行设置。 2、进入主页后可以看到如下图标&#xff1a; 3、选择docker环境&#xff0c;即可展示目前docker信息 可以看到目前有1个容器&#xff0c;3个卷和4个镜像&#xff0c…

2023高教杯数学建模1:ABC题目+初步想法

2023 ABC题目初步想法 写在最前面A题&#xff1a;定日镜场的优化设计问题1&#xff1a;建模将其抽象为数学公式问题2&#xff1a;固定部分参数&#xff0c;约束条件下的局部最优化问题可尝试方法 问题3&#xff1a;约束条件下的局部最优化问题附录&#xff1a;相关计算公式参考…

56、springboot ------ RESTful服务及RESTful接口设计

★ RESTful服务 RESTful服务是“前后端分离”架构中的主要功能&#xff1a; 后端应用对外暴露RESTful服务&#xff0c;前端应用则通过RESTful服务与后端应用交互。后端应用 RESTful接口 <------------------> 前端★ 基于JSON的RESTful服务 使用RestController注解…

什么是正向代理和反向代理

一、什么是正向代理 正向代理&#xff08;Forward Proxy&#xff09;是一种代理服务器&#xff0c;它位于客户端和服务端之间&#xff0c;代表客户端向其他服务器发送请求。一般使用的场景就是&#xff0c;当客户端无法直接访问某些资源时&#xff0c;可以通过正向代理来访问。…

【Java 基础篇】Java 异常处理指南:解密异常处理的关键技巧

异常是 Java 编程中不可避免的一部分。无论你是刚刚入门 Java 编程&#xff0c;还是已经有一定经验&#xff0c;了解异常处理都是非常重要的。本篇博客将向你介绍 Java 中异常的基础知识&#xff0c;帮助你理解什么是异常、为什么需要异常处理以及如何在代码中处理异常。 什么…

js中如何判断一个对象是否为空对象?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用 Object.keys()⭐ 使用 for...in 循环⭐ 使用 JSON.stringify()⭐ 使用 ES6 的 Object.getOwnPropertyNames()⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带…