后端没有配置跨域,但是接口可以通过浏览器地址栏输入直接访问,我在前端项目中用 axios 访问请求地址会报跨域的错误。为什么浏览器直接访问接口不会报跨域的问题呢?
1
molvqingtai 2022-03-16 10:54:04 +08:00 via Android 1
浏览器地址没有跨域限制
|
2
HyperLuo 2022-03-16 10:56:13 +08:00
报的 504 跨域是吧 我刚开始工作也经常遇到 应该和代理有关系
|
3
hronro 2022-03-16 10:57:05 +08:00
建议你先去搞清楚什么叫跨域
|
4
IceBay 2022-03-16 10:57:21 +08:00 2
因为浏览器为了安全限制了。自己主动访问是不会受限的。
|
5
kera0a 2022-03-16 10:57:59 +08:00
跨 “域” 啊
|
6
misdake 2022-03-16 10:58:24 +08:00
跨域的跨,是指从一个到另一个。没有来源,就无所谓跨
|
7
moreant 2022-03-16 11:02:28 +08:00 2
axios 也是基于 ajax 的吧。
最直接的体现就是 浏览器地址直接访问在网络中会分类在 “文档”,axios 访问会分类在“Fetch/XHR” https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS |
8
gydi 2022-03-16 11:40:46 +08:00
简单来说,你在域 a 访问了域 b 的东西,叫跨域。你在前端访问接口,首先你的前端页面是域 a 的资源,然后你去访问域 b ,就跨了。直接在浏览器地址栏里输入接口,这个新的 tab 里,只涉及一个域,就是接口那个域,并没有跨别的。
|
9
yaphets666 2022-03-16 11:56:17 +08:00 via iPhone
确实,如同 7 楼所说的话,文档作为静态资源是不受跨域限制的,XMLRequest 是受限制的
|
10
0o0o0o0 2022-03-16 12:02:04 +08:00 1
[ url 协议、域名、端口 ] 组成一个域。
在 js 中发送请求后,浏览器会首先判断是否在当前的域中,如果是当前的域,那么直接发送请求,如果不是,则发送跨域请求(跨域请求又分为简单请求和非简单请求,简单请求比如 get 就是直接在原来的请求头部添加一个 Origin 参数,值是当前的域。非跨域请求则会先发送一个预检查,再做之后的处理。) 服务器收到请求后首先查看是否有 Origin ,如果没有说明不是跨域,直接处理就好,如果有就得看看允不允许这个域。 也就是对于简单跨域请求 js 发出跨域请求 -> 浏览器添加跨域信息 -> 服务器识别跨域信息,并判断是否允许跨域。 而对于浏览器地址栏、html 中没有设置 crossorigin 的 img 标签,浏览器是不会加上跨域信息的,服务器也就不会认为这是一个跨域请求。 ps:这只是简单的情况。 |
11
muzuiget 2022-03-16 13:46:02 +08:00
直接访问接口就不算跨“域”了啊。
|
12
est 2022-03-16 13:46:25 +08:00
这就是理解了跨域这个行为,但是不明白为什么要设定 域 这个概念。
简单的说,如果 A 网站发起一个请求可以拿到 B 网站的返回,那上网不就等于裸奔? |