衣带渐宽终不悔,为伊消得人憔悴。愿,这份爱在你我之间没有 “跨域”

2022-10-28 18:42:02 浏览数 (1)

“当对一个目标有着强烈的持续的渴望时,苦苦思索体悟,就可能在事先“清晰地看见”那个崭新的结果。相反,如果事先没有清晰的意象,就不会有崭新的成果出现” ——出自《稻盛和夫给年轻人的忠告》

前言

相信无论是前端还是后端在开发的时候,都会遇到这样的一个问题就是:跨域跨域可以说是成长路上必经的一个“坑”。但是我们不应该对它嗤之以鼻,因为它在时时保护着我们服务器的安全。

概念

到底什么是跨域?

代码语言:javascript复制
当我们发起一个请求时,请求中URL的协议、域名、端口三者之间任意一个与当前页面URL不同时就出现跨域现象。

解释一下:

一个请求链接如下:

http://www.xxxx.com。那么它的

  • 协议是http://
  • 域名是www.xxxx.com
  • 端口是80(默认端口可以省略)

它的同源的情况如下:

  • http://www.xxxx.com/index.html(同源)
  • https://www.xxxx.com(不同源,协议不一样)
  • http://www.yyyy.com(不同源,域名不一样)
  • http://www.xxxx.com:8080(不同源,端口不一样)

为什么要有跨域?

我们在开发web应用的时候,一般都是基于浏览器。当代浏览器都遵循同源政策。

同源政策的目的,是为了保证用户信息的安全,防止恶意的网站窃取数据。

在这一政策下,受影响的有:

  • Cookie、LocalStorage、IndexDB不能获取
  • DOM 无法获得
  • Ajax 无法正常请求

所以我们平时遇到的AJAX 无法发送只是其中一个情况而已

那么问题来了,小伙伴肯定有疑问,为什么我平时用Postman 或者 其它第三方的测试接口的工具没有发生跨域的情况呢,这是因为它们没有遵循同源政策,所以不会有跨域的情况。

没有必要对跨域嗤之以鼻,如果没有它的存在,各个网站之间的Cookie或者其它敏感的信息相互传递,肯定是非常不安全的。所以我们应该正确对待他。

如何解决跨域?

下面我们重点介绍如何在 AJAX 下解决跨域情况,这是我们平时遇到最多的问题。

其实有三种办法可以解决 AJAX下的跨域情况:

  • JSONP
  • WebSocket
  • CORS

这里呢我们只介绍 CORS 这种情况, 这也是我唯一推荐给大家的一种方式。

在CORS这种情况下,前端几乎不用配置任何东西,当然这要麻烦后端的大佬了,相信大家对下面的配置肯定不陌生。无论是直接复制别人的还是从网上百度的,应该都见过:

代码语言:javascript复制
Access-Control-Allow-Methods: ……
Access-Control-Allow-Headers: ……
Access-Control-Allow-Credentials: ……
Access-Control-Max-Age: ……

没错,就是这几个请求头。

服务器需要在浏览器预检时候,告诉浏览器,同意你的请求,这时浏览器才会发起真正的请求。

这也是很多小伙伴说,为什么我的后端代码没有执行,没有打印任何信息呢,就是因为这几个头字段没有配置正确,从而浏览器不会继续发起真正的请求。

总结

今天先给大家介绍这么多。详细的信息,大家可以参考【阮一峰】大佬的文章,介绍的非常详细。相信大家在读完之后,一定会有所收获,从此对跨域不再害怕甚至是痛恨了。

0 人点赞