CORS 预检响应未成功

Posted

技术标签:

【中文标题】CORS 预检响应未成功【英文标题】:CORS preflight response did not succeed 【发布时间】:2020-09-05 15:27:11 【问题描述】:

从 axios 获取 API 时出现以下错误

跨域请求被阻止:同源策略不允许读取 https://...bla bla.... 的远程资源(原因:CORS 预检 响应没有成功)

跨域请求被阻止:同源策略不允许读取 https://...blabla 的远程资源.....(原因:CORS 请求 没有成功)

我认为第二个错误是因为第一个错误。这里主要是修复第一个错误。

actions.js

export const getMetadata = srNumber => 
    return (dispatch) => 
        dispatch(getMetadataRequest())
        axios.get(`$BASE_URL/some path/$srNumber`, 
            headers: 
                'X-JWT-Assertion': ASSERTION,
                'Access-Control-Allow-Origin': '*',
                'Access-Control-Allow-Methods': '*',
                'Access-Control-Allow-Credentials': 'true',
                'Access-Control-Allow-Headers': 'Content-Type, Authorization'
            
        )
            .then(response => 
                const data = response.data
                console.log("GET METADATA", data)
                dispatch(getMetedataSuccess(data))
            )
            .catch(error => 
                const errorMessage = error.message
                console.error("GET METADATA", errorMessage)
                dispatch(getMetadataFailure(errorMessage))
            )
    

【问题讨论】:

您在 https:// ....bla 的服务器应该允许您的应用程序的主机:端口组合允许请求。参考这个enable-cors.org/server.html 我为同一台服务器获取了三个 api。他们两个在工作。仅此一项是行不通的 在服务器端启用cors,而不是客户端...... 参考这个以便更好地理解html5rocks.com/en/tutorials/cors/#toc-cors-server-flowchart @deluxan 失败的 api 的响应可能会发生一些变化。你能再检查一遍吗? 【参考方案1】:

试试这个:

const options = 
  method: 'GET',
  headers: 
               // add header which is required for the call, please dont add response headers 
           
   url: `$BASE_URL/some path/$srNumber`,
;

export const getMetadata = srNumber => 
    return (dispatch) => 
        dispatch(getMetadataRequest())
        axios(options)
            .then(response => 
                const data = response.data
                console.log("GET METADATA", data)
                dispatch(getMetedataSuccess(data))
            )
            .catch(error => 
                const errorMessage = error.message
                console.error("GET METADATA", errorMessage)
                dispatch(getMetadataFailure(errorMessage))
            )
    

【讨论】:

试过了。但是没用

以上是关于CORS 预检响应未成功的主要内容,如果未能解决你的问题,请参考以下文章

为啥 CORS 错误“对预检请求的响应未通过访问控制检查”?

CORS:对预检请求的响应未通过访问控制检查

http://localhost:4200' 已被 CORS 策略阻止:对预检请求的响应未通过

已被 CORS 策略阻止:对预检请求的响应未通过

CORS 问题 - 对预检请求的响应未通过访问控制检查:

cors(cors 策略:对预检请求的响应未通过访问控制检查)角度 7 中的错误