请求头字段Access-Control-Allow-Headers被Access-Control-Allow-Headers禁止。

18 浏览
0 Comments

请求头字段Access-Control-Allow-Headers被Access-Control-Allow-Headers禁止。

我正在尝试通过POST请求将文件发送到我的服务器,但当发送请求时会导致以下错误:

请求头字段Content-Type未被Access-Control-Allow-Headers允许。

所以我谷歌了这个错误,并添加了头部:

$http.post($rootScope.URL, {params: arguments}, {headers: {
    "Access-Control-Allow-Origin" : "*",
    "Access-Control-Allow-Methods" : "GET,POST,PUT,DELETE,OPTIONS",
    "Access-Control-Allow-Headers": "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With"
}

然后我得到了以下错误:

请求头字段Access-Control-Allow-Origin未被Access-Control-Allow-Headers允许

所以我谷歌了一下,发现唯一相似的问题被提供了一些回答,然后被关闭了。我该添加/删除哪些头部呢?

admin 更改状态以发布 2023年5月20日
0
0 Comments

服务器(接收POST请求的)需要在响应中包含Access-Control-Allow-Headers头部等。在客户端请求中添加这些头部没有效果。因此你应该从POST请求的头中删除"Access-Control-Allow-..."。

这是因为决定是否接受跨源请求(以及允许哪些请求头等)的是服务器,而不是客户端自己决定哪些服务器应该允许CORS。

请求者(web浏览器)可以通过发送“OPTIONS”请求(而不是您预期的“POST”或“GET”请求)来“预检”服务器的同源策略。如果对“OPTIONS”请求的响应包含允许使用您请求的头部、源或方法的“Access-Control-Allow- ...”头部,则请求者/浏览器将发送您的“POST”或“GET”请求。

(不常见的注意点:)Access-Control-Allow-...的值是"",而不是列出特定的源、头、或方法。但是,我用过的一个旧的Android WebView客户端没有尊重""通配符,需要在响应的Access-Control-Allow-Headers头部中列出特定的头。

0
0 Comments

我也遇到了同样的问题。在jQuery文档中,我找到:

对于跨域请求,将内容类型设置为除 application/x-www-form-urlencodedmultipart/form-datatext/plain 之外的任何内容,都会触发浏览器向服务器发送一个预检 OPTIONS 请求。

因此,虽然服务器允许跨域请求,但不允许 Access-Control-Allow-Headers,它将抛出错误。默认情况下,Angular的内容类型是 application/json,它会尝试发送一个 OPTIONS 请求。尝试覆盖Angular的默认头文件或在服务器端允许 Access-Control-Allow-Headers。这是一个Angular示例:

$http.post(url, data, {
    headers : {
        'Content-Type' : 'application/x-www-form-urlencoded; charset=UTF-8'
    }
});

0