【问题标题】:allow-control-allow-origin : * present in response, but it still shows errorallow-control-allow-origin : * 出现在响应中,但仍然显示错误
【发布时间】:2023-03-20 19:53:01
【问题描述】:

allow-control-allow-origin : * 标头存在于 API 响应中,但浏览器仍显示错误。网络 403 错误。

这是来自 API 的示例响应标头:

Access-Control-Allow-Headers: Origin,X-Requested-With,X-CSRF-Token,Content-Type
Access-Control-Allow-Methods: GET,POST,PUT,DELETE
Access-Control-Allow-Origin: *
Cache-Control: no-cache="set-cookie"
Connection: keep-alive
Content-Length: 870
Content-Type: text/plain;charset=UTF-8
Date: Sat, 28 Nov 2015 17:56:46 GMT
Server: Apache-Coyote/1.1
Set-Cookie: AWSELB=6B492DE10EE

Firebug 中的错误:

"NetworkError: 403 Forbidden - https://xyz.....s"

 Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://xyz..... (Reason: CORS header 'Access-Control-Allow-Origin' missing).

请求 - AngularJS

var config = {
                headers: {
                    "Accept": "application/json",
                    "Content-Type": "application/json",
                    "Apikey": "*************" 
                }
            }

            $http.post(URL, data, config)
            .success(function (data, status, headers, config) {
               //function
            })

【问题讨论】:

  • 和我给出的一样...不是示例响应..它是来自服务器的实际响应头。
  • 这是来自服务器的响应。它是普通的 API 服务器,我们无法更改服务器中的任何内容。有没有可能在客户端做代码?请指教。
  • 我已添加请求..请检查

标签: jquery angularjs http http-headers cors


【解决方案1】:

确保您的服务器支持 OPTIONS 动词并在客户端使用它时返回正确的 CORS 标头 - 这称为飞行前请求。看一下客户端和服务器here之间完整的CORS交换示例。

所以第一步是客户端使用OPTIONS HTTP 动词发送飞行前请求:

OPTIONS /canvas/73/source HTTP/1.1
Host: jsbin.com
Access-Control-Request-Method: GET
Origin: http://jsconsole.com
Access-Control-Request-Headers: x-requested-with

现在您的服务器应该使用正确的 CORS 标头进行响应:

HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: X-Requested-With

就是这样,你已经建立了握手,现在可以随意获取/发布你想要的任何东西:

GET /canvas/73/source HTTP/1.1
Host: jsbin.com
x-requested-with: XMLHttpRequest

您将获得成功响应:

HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Content-Length: 977

...

你也可以看看this example

【讨论】:

  • 我没有说 CORS 标头应该添加到 GET 和 POST 请求中,而是添加到 OPTIONS 请求中。
猜你喜欢
  • 1970-01-01
  • 2013-05-22
  • 1970-01-01
  • 2012-01-19
  • 2017-06-15
  • 2019-04-16
  • 2022-01-13
  • 2016-08-30
  • 2015-02-03
相关资源
最近更新 更多