无法向 Spring 资源服务器发送 POST 请求

Posted

技术标签:

【中文标题】无法向 Spring 资源服务器发送 POST 请求【英文标题】:Cannot send POST request to Spring Resource server 【发布时间】:2020-02-16 21:47:11 【问题描述】:

我有一个 Spring Boot ResourceServer 和一个 React 客户端应用程序。我正在尝试将POST 请求发送到服务器端点之一(顺便说一句,它具有@CrossOrigin 注释),但是,我在控制台中收到此错误:

从 'http://localhost:8080/api/search' 访问 XMLHttpRequest 来源“http://localhost:3000”已被 CORS 策略阻止: 对预检请求的响应未通过访问控制检查:它 没有 HTTP ok 状态。

预检请求返回401 Http状态,不知道为什么。

预检请求的响应标头如下所示:

Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: content-type
Access-Control-Allow-Methods: POST
Access-Control-Allow-Origin: http://localhost:3000
Allow: GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Content-Length: 0
Date: Sun, 20 Oct 2019 17:23:54 GMT
Expires: 0
Pragma: no-cache
Vary: Origin, Access-Control-Request-Method, Access-Control-Request-Headers
WWW-Authenticate: Basic realm="Realm"
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block

我的预检请求标头如下所示:

Access-Control-Request-Headers: content-type
Access-Control-Request-Method: POST
Origin: http://localhost:3000
Referer: http://localhost:3000/movie-search
Sec-Fetch-Mode: no-cors
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/76.0.3809.87 Safari/537.36

我正在使用 Axios 发送请求(如果重要的话)。有人知道这里发生了什么吗?

【问题讨论】:

401 错误响应似乎您没有正确应用身份验证机制。您的请求应包含如下所示的授权标头:Authorization: Bearer <token> 【参考方案1】:

糟糕...我的 HTTPSecurity 配置如下所示:

http
    .authorizeRequests()
    .antMatchers(HTTPMethod.POST, "/api/search").permitAll()
    .anyRequest().authenticated()
    .and().httpBasic()

而不是这个:

http
    .authorizeRequests()
    .antMatchers("/api/search").permitAll()
    .anyRequest().authenticated()
    .and().httpBasic()

【讨论】:

以上是关于无法向 Spring 资源服务器发送 POST 请求的主要内容,如果未能解决你的问题,请参考以下文章

向服务器发送 POST 请求,服务器的响应为空,Angular - Spring-boot

无法将http post请求发送到spring boot

AJAX get() 和 post() 方法

JS——AJAX

无法使用 axios 向 Flask 应用程序发送 POST 请求

POST与PUT