因为是新搭建的框架,所有组件也是用的标准组件,但在跟前端对接的时候,前端反馈说请求跨域了
我第一反应是配置文件没生效,谁改了配置文件
gateway:
# 全局跨域配置
globalcors:
cors-configurations:
'[/**]':
#allowedOrigins:
# - "http://localhost:3333" #允许所有的域
allowedOriginPatterns:
- '*' #跨域处理 允许所有的域
allowCredentials: true # 是否允许携带cookie
allowedMethods: # 支持的方法
- "GET"
- "POST"
- "DELETE"
- "PUT"
- "OPTIONS"
allowedHeaders:
- "*" # 允许在请求中携带的头信息
发现配置文件没问题,最近也没有人改配置相关的,然后我写了一个页面测试一下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="http://apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js"></script>
</head>
<body>
<input type="button" value="点击确认" onclick="checkOn()">
<script>
function checkOn() {
$.get('http://localhost:8000/api-user/user/get/1', function (data) {
alert(data)
});
}
</script>
</body>
</html>
请求正常,能正常访问
然后告诉前端我这边测试正常的,不存在跨域问题
前端说不行他那还是跨域,甩个403异常截图,仔细看了下发现是个OPTIONS请求
打开postman用OPTIONS请求试了下,还真的提示跨域,然后各种百度跨域问题,发现全部都不行
后面同事发现有一个配置加上去就好了
add-to-simple-url-handler-mapping: true
gateway:
# 全局跨域配置
globalcors:
add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题
cors-configurations:
'[/**]':
#allowedOrigins:
# - "http://localhost:3333" #允许所有的域
allowedOriginPatterns:
- '*' #跨域处理 允许所有的域
allowCredentials: true # 是否允许携带cookie
allowedMethods: # 支持的方法
- "GET"
- "POST"
- "DELETE"
- "PUT"
- "OPTIONS"
allowedHeaders:
- "*" # 允许在请求中携带的头信息
可以发现这个配置似乎与跨域没有关系,但是加上这个后真的就可以了