特定 API 的 CORS 错误 - 其余工作正常

Posted

技术标签:

【中文标题】特定 API 的 CORS 错误 - 其余工作正常【英文标题】:CORS Error for a specific API- rest work fine 【发布时间】:2016-09-12 23:40:09 【问题描述】:

我不断收到 CORS 错误

Request header field Accept-Encoding is not allowed by Access-Control-Allow-Headers

只有在我访问我的一个 API 的实时/生产服务器时才会发生这种情况。

可以访问所有其他 API 而不会出现任何 CORS 错误。

工作 API(无 CORS 错误):

    qset = (
        Dummyproduct.objects
        .order_by('-updated',)
        .values('storelogo', 'storeimage', 'productname', 'productimage', 'productprice',)
    )

    return Response(qset)

损坏的 API(CORS 错误):

    qset = (
        'description': 'Total Products' , 'stats':Product.objects.count(), 'icon':'face', 'color':'red','percent':89, ,
        'description': 'Total Swipes' , 'stats':Variation.objects.count(), 'icon':'person', 'color':'greed', 'percent':40,,
        'description': 'Total Returns' , 'stats':User.objects.count(), 'icon':'refresh', 'color':'red', 'percent':62,,
        'description': 'Total Purchases' , 'stats':User.objects.count(), 'icon':'money', 'color':'green', 'percent':32,
    )

    return Response(qset)

服务器(Django):

类 CorsMiddleware(对象):

def process_response(self, request, response):
    response['Access-Control-Allow-Origin'] = '*'
    response['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS, PUT'
    # response['Content-Type'] = 'application/json'
    response['Accept'] = 'application/json'
    return response

应用程序(AngularJS):

function ($httpProvider) 
    $httpProvider.defaults.headers.common = ;
    $httpProvider.defaults.headers.post = ;
    $httpProvider.defaults.headers.put = ;
    $httpProvider.defaults.headers.patch = ;
    $httpProvider.defaults.headers.get = ;

实际的 API 具有以下标头(Chrome>网络工具):

Accept:application/json
Access-Control-Allow-Methods:POST, GET, OPTIONS, PUT
Access-Control-Allow-Origin:*
Allow:GET, HEAD, OPTIONS
Content-Type:application/json;q=0.8
Date:Tue, 17 May 2016 04:02:04 GMT
Server:WSGIServer/0.1 Python/2.7.10
X-Frame-Options:SAMEORIGIN

【问题讨论】:

【参考方案1】:

解决了这个问题。非常简单——我需要一个斜杠。奇怪的是在本地使用页面 - 我没有 CORS 错误。很容易知道。

/mypage 而不是/mypage/

【讨论】:

【参考方案2】:

您需要将Access-Control-Request-Headers 的值设置为Accept-Encoding 来解决此问题。检查this。

【讨论】:

以上是关于特定 API 的 CORS 错误 - 其余工作正常的主要内容,如果未能解决你的问题,请参考以下文章

如果我使用 XMLhttprequest 调用 API,它可以正常工作。但是当我使用 angularjs (1.5.6) 时,我得到了 CORS 错误

仅在访问媒体文件时出现 Cors Header 错误,应用程序的其余部分工作正常(DRF、pythonanywhere、React)

如果我使用XMLhttprequest调用API,它可以正常工作。但是当我使用angularjs(1.5.6)时,我得到了CORS错误

CORS 策略阻止访问 Mailchimp API

使用 POST API 时出现多个 CORS 错误

是否有特定的 asp.net 核心配置让 CORS 与多个 API 一起工作