31

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 しか受け付けません。

4

5 に答える 5

72

アンティラットの答えは完全ではありません。

サーバーが許可するヘッダーを指定する必要があります。あなたの場合Authorization

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Authorization
于 2014-07-03T14:22:15.100 に答える
2

@Manuel Bitto の回答に賛成
しましたが、Apache tomcat 5.x で動作する完全な Cors フィルターを含む別の回答を投稿したいと思います。

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 呼び出しを生成するためです。 、コードで対処する必要があります。
これが役立つことを願っています。

于 2015-07-06T06:00:50.553 に答える
1

これは、Same origin policyが原因で発生します。

リクエストが送信されるのと同じドメインから AJAX 呼び出しを行う必要があります。または、サーバー側の変更を行い、外部ドメインからのリクエストを許可します。

これを解決するには、ヘッダーで外部ドメインを許可して、 http://domain.comでヘッダーを変更する必要があります。

Access-Control-Allow-Origin: *

続きを読む

于 2012-05-11T09:37:09.840 に答える
0

問題は、www.domain.comがdomain.comとは異なると見なされていたことです。domain.comは機能しましたが、www.domain.comを使用すると、別のドメインからのリクエストを実行していることが検出されました

于 2012-05-19T01:10:09.183 に答える
0

この質問は古いことを知っています。

しかし、今日、owinを追加した後、同じcorsの問題に遭遇しました。グーグルで何度も検索し、さまざまな解決策を試した後。以下を追加してcorsの問題を解決しました

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

詳細については、以下のリンクをたどってください。ありがとう。

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

于 2016-10-17T09:58:06.883 に答える