簡體   English   中英

'請求標題字段不允許授權'錯誤 - Tastypie

[英]'Request header field Authorization is not allowed' error - Tastypie

當我嘗試使用AJAX和Tastypie執行HTTP請求時,在為Tastypie資源使用ApiKeyAuthentication時出現以下錯誤:

XMLHttpRequest cannot load http://domain.com/api/v1/item/?format=json&username=popo&api_key=b83d21e2f8bd4952a53d0ce12a2314c0ffa031b1. Request header field Authorization is not allowed by Access-Control-Allow-Headers.

關於如何解決這個問題的任何想法?

以下是Chrome的請求標頭:

Request Headersview source

Accept:*/*
Accept-Charset:
ISO-8859-1,utf-8;q=0.7,*;q=0.3

Accept-Encoding:gzip,deflate,sdch

Accept-Language:en-US,en;q=0.8

Access-Control-Request-Headers:
origin, authorization, access-control-allow-origin, accept, access-control-allow-headers

Access-Control-Request-Method:
GET

以下是Chrome的響應標頭:

Response Headersview source

Access-Control-Allow-Headers:
Origin,Content-Type,Accept,Authorization

Access-Control-Allow-Methods:
POST,GET,OPTIONS,PUT,DELETE

Access-Control-Allow-Origin:*

Connection:keep-alive

Content-Length:0
Content-Type:
text/html; charset=utf-8

Date:Fri, 11 May 2012 21:38:35 GMT

Server:nginx

如您所見,它們都有用於授權的標頭,但授權不起作用。

這是我用來編輯響應頭的django中間件: https//gist.github.com/1164697

編輯:我發現了問題。 我試圖連接到www.domain.com,它只接受domain.com

Antyrat的答案並不完整。

您必須指定服務器允許的標頭; 在您的情況下授權

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Authorization

這是因為同源策略

您需要從請求所在的同一域進行AJAX調用。 或者進行服務器端更改,允許來自外部域的請求。

要解決此問題,您需要在http://domain.com中對標頭進行更改,方法是在標頭中添加外部域:

Access-Control-Allow-Origin: *

閱讀更多

雖然我贊成@Manuel Bitto的答案,
我想發布另一個答案,其中包含一個完整的Cors Filter,它適用於Apache tomcat 5.x:

public class CorsFilter implements Filter {

    public CorsFilter() { }

    public void init(FilterConfig fConfig) throws ServletException { }

    public void destroy() { }

    public void doFilter(

            ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        HttpServletResponse httpServletResponse = (HttpServletResponse)response;
        httpServletResponse.addHeader("Access-Control-Allow-Origin", "*");
        httpServletResponse.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, OPTIONS, DELETE");
        httpServletResponse.addHeader("Access-Control-Allow-Headers", "Authorization");

        chain.doFilter(request, response);
    }
}

我建議特別注意向“Access-Control-Allow-Methods”標題值添加OPTIONS。
這樣做的原因是,根據提供的說明這里由Mozilla,
如果您的請求(假設是POST)包含特殊標頭或內容類型(這是我的情況),那么XMLHttpRequest對象將生成一個額外的OPTIONS調用,您需要在代碼中解決該調用。
我希望這有幫助。

問題是www.domain.com被認為與domain.com不同。 domain.com工作,但當我使用www.domain.com時,它檢測到我做了來自不同域的請求

我知道這個問題比較老了。

但是今天我加入了owin后遇到了同樣的問題。 經過多次搜索谷歌和嘗試各種解決方案。 我在下面添加了解決了cors問題

<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />

有關詳細信息,請按照以下鏈接。 謝謝。

[ http://benfoster.io/blog/aspnet-webapi-cors]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM