🌈赏金任务 - 什么是跨域?如何解决跨域问题?

赏金任务每周更新,请持续关注哦 :love_letter:

题目

  • 什么是跨域?如何解决跨域问题?

参与方式

  • 本帖下方回复你的答案即可

赏金

  • 100元京东购物卡

活动时间

  • 2023年2月13日 - 2023年2月17日

本周赏金任务汇总:🌈 赏金任务发布 2023-02-13

本问题参与赏金活动,详情点击 :rainbow: 赏金活动上线啦 丨做赏金任务挑战千元奖金 查看活动介绍

1.跨域


2.如何解决
在cookie中加了一个token

什么是跨域?如何解决跨域问题?
1.域:浏览器不能执行其他网站的脚本
2.跨域:浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同都是跨域,它是由浏览器的同源策略造成的,是浏览器施加的安全限制
3.解决方式:
方法一.通过Nginx反向代理来满足浏览器的同宗策略实现跨域,下图是一个nginx启用COSR的参考配置

方法二.Jsonp是前端解决跨域最实用的方法
原理:在全局定义一个函数,将函数名以get传参的方式写入script标签的src属性当中,后端返回函数名以及参数,全局定义的函数就会自动调用,形参会接收后端传过来的参数
方法三.CORS,Cross-Origin Resource Sharing跨域资源共享,通过服务器设置一系列响应头来实现跨域,而客户端不需要做什么额外的事情

什么是跨域?

1.CORS全称Cross-Origin Resource Sharing,意为跨域资源共享。当一个资源去访问另一个不同域名或者同域名不同端口的资源时,就会发出跨域请求。如果此时另一个资源不允许其进行跨域资源访问,那么访问就会遇到跨域问题。
2.跨域是指浏览器不能执行来自其它网站的脚本,是由浏览器的同源策略造成的,是浏览器对JavaScript 施加的安全限制。(需要注意的是,跨域并不是请求发不出去,请求能发出去,服务端能收到请求并正常返回结果,只是结果被浏览器拦截了)

引出同源策略

1.之所以会出现跨域现象,是因为受到了同源策略的限制,同源策略要求源相同才能正常进行通信,即协议、域名、端口号都完全一致。
2.同源的存在,又可以保护用户隐私信息,防止身份伪造等。

同源策略限制内容

  • Cookie、LocalStorage等存储性内容
  • DOM 节点
  • AJAX 请求不能发送

如何解决跨域问题?

  1. 使用JSONP:前端技术使用 jQuery的ajax解决方案,服务端使用JSON.toJSONString。

  2. 使用CORS:在响应头上添加Access-Control-Allow-Origin属性,指定同源策略的地址。同源策略默认地址是网页的本身。只要浏览器检测到响应头带上了CORS,并且允许的源包括了本网站,那么就不会拦截对应的请求响应。(对比jsonp,优点在于功能更加强大支持各种HTTP Method,缺点是兼容性不如JSONP)

    前端:支持原生ajax、jQuery ajax、vue、axios
    服务端:支持Java、Nodejs、Python、PHP等
    
  3. 指定的页面设置document.domain属性:指定的页面就可以共享Cookie。

  4. Nginx反向代理:配置nginx(修改nginx目录下的nginx.conf),在这个服务器上配置多个前缀来转发http/https请求到多个真实的服务器即可。这样,这个服务器上所有url都是相同的域名、协议和端口。这样对于浏览器来说,这些url都是同源的,就不会有跨域限制了。

2 个赞

跨域是指浏览器安全策略的限制,用于防止用户从浏览器向另一个域(如新网站)发出请求。跨域通常导致网页无法加载对应网站的资源,比如图片,视频,CSS或者JavaScript文件等。

跨域问题的解决方案有:

  • 通过 JSONP 技术来实现
  • 通过代理服务器解决跨域问题
  • 突破浏览器的同源策略,通过修改document.domain来解决跨域问题
  • 开发者可以使用 HTML5 中提供的 window.postMessage() 方法来实现跨源通信
  • 通过CORS(跨域资源共享)技术来实现跨域

1、跨域(Cross-Origin)是指在Web开发中,由于浏览器同源策略的限制,当一个页面发起的请求的协议、域名、端口号中有任何一个不同于当前页面的协议、域名、端口号时,就会发生跨域。

2、例如,在www.example.com网站中,使用JavaScript发起一个请求到www.test.com时,由于它们的协议、域名、端口号不同,就会发生跨域问题。因为浏览器的同源策略禁止了跨域请求。
在Web开发中,可以通过以下方法解决跨域问题:

  • 使用JSONP:JSONP是一种常用的跨域解决方案,它利用了script标签不受同源策略限制的特性,可以实现跨域请求。具体来说,服务器端需要将数据包装在一个指定的回调函数中返回,客户端通过创建一个script标签,将回调函数的名称作为请求参数传递给服务器,服务器返回的数据会被自动执行。
  • 使用CORS:CORS(Cross-Origin Resource Sharing)是HTML5规范中提出的一种跨域解决方案。它通过在服务端设置响应头中的Access-Control-Allow-Origin字段,允许某个域名的请求访问资源。因此,客户端只需要在请求头中添加Origin字段,表示请求的来源域名即可。
  • 使用代理:由于代理服务器是不存在跨域限制的,因此可以通过将请求发送到代理服务器,再由代理服务器向目标服务器发起请求,从而绕过跨域问题。
  • 使用iframe:通过在同一个域名下的iframe中加载目标页面,然后在iframe中使用window.postMessage方法将数据传递给主页面,从而实现跨域通信。

总之,在实际开发中,可以根据具体的情况选择不同的跨域解决方案。

总结的不错,解释了跨域以及同源策略的概念,以及为什么会有这些限制,限制了哪些内容。并对提出了几点关键的解决方案。格式也不错,易于阅读。

其他同学回答的也都很不错,关键点都写出来了。要是前因后果再描述的完整一点,格式再优化一下就更好了。