首页 > 其他分享 >如何解决跨域问题?

如何解决跨域问题?

时间:2024-11-04 17:46:28浏览次数:3  
标签:浏览器 跨域 如何 jsp 同源 解决 http com

目录

如何解决跨域问题?首先我们需要知道什么是跨域,跨域指的是浏览器不能执行其它网站的脚本,它是由浏览器的同源策略造成的,是浏览器对JavaScript 施加的安全限制。

回到顶部

1、同源策略

  根据百度百科 同源策略它是由 Netscape 提出的一个安全策略,它是浏览器最核心也是最基本的安全功能,如果缺少同源策略,则浏览器的正常功能可能都会受到影响,现在所有支持JavaScript的浏览器都会使用这个策略。

  所谓同源指的是:

  协议、域名、端口号都相同,只要有一个不相同,那么都是非同源。

  img

  浏览器在执行脚本的时候,都会检查这个脚本属于哪个页面,即检查是否同源,只有同源的脚本才会被执行;而非同源的脚本在请求数据的时候,浏览器会报一个异常,提示拒绝访问。

  ①、http://www.123.com/index.html 调用 http://www.123.com/welcome.jsp 协议、域名、端口号都相同,同源。

  ②、https://www.123.com/index.html 调用 http://www.123.com/welcome.jsp 协议不同,非同源。

  ③、http://www.123.com:8080/index.html 调用 http://www.123.com:8081/welcome.jsp 端口不同,非同源。

  ④、http://www.123.com/index.html 调用 http://www.456.com/welcome.jsp 域名不同,非同源。

  ⑤、http://localhost:8080/index.html 调用 http://127.0.0.1:8080/welcom.jsp 虽然localhost等同于 127.0.0.1 但是也是非同源的。

  同源策略限制的情况:

  1、Cookie、LocalStorage 和 IndexDB 无法读取

  2、DOM 和 Js对象无法获得

  3、AJAX 请求不能发送

  注意:对于像 img、iframe、script 等标签的 src 属性是特例,它们是可以访问非同源网站的资源的。

回到顶部

2、跨域实例演示

  img

  我们创建了两个 web 项目JavaWeb01 和 JavaWeb02 分别部署在tomcat1和Tomcat2上上,这两个 Tomcat 的端口号设置是不一样的,一个是 8080,一个是8081,所以这两个项目构成了非同源。那么我们从客户端(浏览器)输入访问部署在 Tomcat2 上的项目 JavaWeb2,然后在该项目中通过 ajax 去请求部署在 Tomcat1 上的项目数据,能够访问的到呢?

  ①、在 JavaWeb02 项目中,有一个 jsp 文件,我们通过在浏览器访问该 JSP 文件去获取 JavaWeb01 项目中的数据

img View Code

  通过ajax 访问

  url:"http://localhost:8080/JavaWeb01/getPassWordByUserNameServlet?userName=Tom"

  去获取 JavaWeb01 项目中的数据。

  ②、在 JavaWeb01 项目中,创建一个 getPassWordByUserNameServlet 请求的 Servlet

img View Code

  ③、在浏览器中输入 http://localhost:8081/JavaWeb02/index.jsp 链接,去调用该页面的 ajax 函数

  img

  浏览器给我们返回了一个错误,这就是浏览器同源策略导致的跨域访问会报错。那么该如何解决呢?

回到顶部

3、跨域解决办法

①、response 添加 header

  我们在 Servlet 请求返回时添加如下代码:

1 //*表示支持所有网站访问,也可以额外配置相应网站
2 resp.setHeader("Access-Control-Allow-Origin", "*");

  请求结果如下:

   img

②、JSONP 方式

  首先我们要修改 index.jsp 页面的 ajax 请求:

[复制代码](javascript:void(0)

标签:浏览器,跨域,如何,jsp,同源,解决,http,com
From: https://www.cnblogs.com/javaxubo/p/18525896

相关文章

  • 解决 Unexpectedlexicaldeclarationincaseblock的问题
    亲测可用,若有疑问请私信使用新版的es-lint的时候扫描旧的项目,发现报了Unexpectedlexicaldeclarationincaseblock(no-case-declarations)这么一个错误提示当时很奇怪,就去查了一下文档,发现中文文档中解释比较简单该规则禁止词法声明(let、const、function和class)出......
  • Kafka 消息丢失如何处理?
    今天给大家分享一个在面试中经常遇到的问题:Kafka消息丢失该如何处理?这个问题啊,看似简单,其实里面藏着很多“套路”。来,咱们先讲一个面试的“真实”案例。面试官问:“Kafka消息丢失如何处理?”小明一听,反问:“你是怎么发现消息丢失了?”面试官顿时一愣,沉默了片刻后,可能......
  • 如何区分CRM系统与ERP系统的功能和目的?
    在现代企业的管理中,CRM(客户关系管理)和ERP(企业资源计划)系统被广泛应用于提升企业的运营效率和竞争力。然而,尽管这两种系统都是企业管理的关键工具,但它们在功能、作用和目的上存在显著的差异。了解CRM和ERP系统的区别,能够帮助企业更合理地选择和使用这些工具,最大化其带来的价值。......
  • 华为云开源时序数据库openGemini:使用列存引擎解决时序高基数问题
    本文来源:《华为云DTSE》第五期开源专刊,作者:向宇,华为云数据库高级研发工程师、黄飞腾,博士,openGemini存储引擎架构师在时序数据场景中,大部分的解决方案是以时间线为粒度对时序数据进行管理,这类解决方案在时间线数量不断增长的情形下,面临着诸多困难,包括内存膨胀、读写性能下降等,华为......
  • 解决 Unexpected lexical declaration in case block 的问题
    亲测可用,若有疑问请私信使用新版的es-lint的时候扫描旧的项目,发现报了Unexpectedlexicaldeclarationincaseblock(no-case-declarations)这么一个错误提示当时很奇怪,就去查了一下文档,发现中文文档中解释比较简单该规则禁止词法声明(let、const、function和class)出......
  • @DS注解方式springboot多数据源配置及失效场景解决
    1.使用教程导入依赖<!--多数据源--> <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>3.5.0</version> </dependency>123456配置数据源......
  • 如何区分CRM系统与ERP系统的功能和目的?
    在现代企业的管理中,CRM(客户关系管理)和ERP(企业资源计划)系统被广泛应用于提升企业的运营效率和竞争力。然而,尽管这两种系统都是企业管理的关键工具,但它们在功能、作用和目的上存在显著的差异。了解CRM和ERP系统的区别,能够帮助企业更合理地选择和使用这些工具,最大化其带来的价值。本文......