![](/img/trans.png)
[英]Request header field Authorization is not allowed (AngularJS rest api request)
[英]'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" />
有關詳細信息,請按照以下鏈接。 謝謝。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.