我有CORS全局配置:
@EnableWebFlux
@Configuration
public class WebFluxConfig implements WebFluxConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "POST")
.allowedHeaders("*");
}
}
当我发送选项查询时:
curl -i -X OPTIONS -H "Origin:test.com" -H "Access-Control-Request-Method: GET"
我明白了:
http://localhost:9999/my
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET,POST
Access-Control-Max-Age: 1800
content-length: 0
存在访问控制允许来源和访问控制允许方法。一切都OK。
但是如果我发送:
curl -i -H "Origin:test.com" http://localhost:9999/my
我不使用Access-Control-Allow-Methods:
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Access-Control-Allow-Origin: *
Content-Type: text/plain;charset=UTF-8
Content-Length: 2
查询curl -i -H "Origin:test.com" -H "Access-Control-Request-Method: GET" http://localhost:9999/my
返回相同。
为什么?请帮助我
[allowedMethods中的添加OPTIONS方法。
OPTIONS请求是我们在跨域资源共享(CORS)中所谓的飞行前请求。
当您在特定情况下跨不同来源发出请求时,它们是必需的。
此预检请求是某些浏览器发出的,作为一种安全措施,以确保服务器信任正在执行的请求。意味着服务器可以理解,在请求上发送的方法,源和标头可以安全地执行。
您的服务器在尝试进行跨源请求时都不应忽略,而应处理这些请求。