
后端没有配置跨域,但是接口可以通过浏览器地址栏输入直接访问,我在前端项目中用 axios 访问请求地址会报跨域的错误。为什么浏览器直接访问接口不会报跨域的问题呢?
1 molvqingtai 2022-03-16 10:54:04 +08:00 via Android 浏览器地址没有跨域限制 |
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 因为浏览器为了安全限制了。自己主动访问是不会受限的。 |
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 axios 也是基于 ajax 的吧。 最直接的体现就是 浏览器地址直接访问在网络中会分类在 “文档”,axios 访问会分类在“Fetch/XHR” https://developer.mozilla.org/zh-CN/docs/We/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 [ 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 网站的返回,那上网不就等于裸奔? |