93

ヘッダー設定が機能しない理由が.htaccessわかりません。

私の.htaccessファイルの内容:

Header set Access-Control-Allow-Origin *
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
Header always set Access-Control-Allow-Headers "*"
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

しかし、 を削除Headerして追加するとindex.php、すべて正常に動作します。

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: PUT, GET, POST, DELETE, OPTIONS");
header("Access-Control-Allow-Headers: *");

私は何が欠けていますか?

4

10 に答える 10

136

これはうまくいくはずです:

Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
于 2012-07-27T16:19:45.147 に答える
22

記録のために、私はまったく同じ問題に遭遇していましたが、答えはどれもうまくいきませんでした.

ヘッダー チェッカー ツールを使用しました: http://www.webconfs.com/http-header-check.php

自分の IP ( http://192.0.2.1/upload) でテストしていたところ、次のような結果が返ってきました。

HTTP/1.1 301 Moved Permanently => 
Date => Sat, 10 Jan 2015 04:03:35 GMT
Server => Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1
Location => http://192.0.2.1/upload/
Content-Length => 380
Connection => close
Content-Type => text/html; charset=iso-8859-1

リダイレクトが発生しましたが、AJAX 要求はリダイレクトを受け入れません/従いません。

ドメインの末尾にスラッシュがないことが判明しました( http://192.0.2.1/upload / )

最後にスラッシュを付けて再度テストしたところ、以下のようになりました。スクリプトにもスラッシュを追加し、動作するようになりました。

HTTP/1.1 200 OK => 
Date => Sat, 10 Jan 2015 04:03:53 GMT
Server => Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1
X-Powered-By => PHP/5.3.8
Access-Control-Allow-Origin => *
Access-Control-Allow-Methods => PUT, GET, POST, DELETE, OPTIONS
Access-Control-Allow-Headers => *
Content-Length => 1435
Connection => close
Content-Type => text/html

このツールを使用して、ヘッダーが適切かどうかをテストし、何が起こっているかをトラブルシューティングします。

于 2015-01-10T04:36:25.240 に答える
11

GoDaddy で共有ホスティングを利用しています。この質問への回答も必要でした。いろいろ調べたところ、それが可能であることがわかりました。

.htaccess ファイルを作成し、アクション ページと同じフォルダーに配置しました。.htaccess ファイルの内容は次のとおりです。

Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"

これが私のajax呼び出しです:

    $.ajax({
        url: 'http://www.mydomain.com/myactionpagefolder/gbactionpage.php',  //server script to process data
        type: 'POST',
        xhr: function() {  // custom xhr
            myXhr = $.ajaxSettings.xhr();
            if(myXhr.upload){ // check if upload property exists
                myXhr.upload.addEventListener('progress',progressHandlingFunction, false); // for handling the progress of the upload
            }
            return myXhr;
        },
        //Ajax events
        beforeSend: beforeSendHandler,
        success: completeHandler,
        error: errorHandler,
        // Form data
        data: formData,
        //Options to tell JQuery not to process data or worry about content-type
        cache: false,
        contentType: false,
        processData: false
    });

参考までに、この記事を参照してください。

.htaccess のヘッダー セット Access-Control-Allow-Origin が機能しない

于 2013-05-02T15:54:21.237 に答える
7

Apache モジュール ヘッダー a2enmod ヘッダーを有効にしたところ、問題は解決しました。

于 2015-12-10T04:32:49.287 に答える
3

ヘッダーチェッカー サイトhttp://www.webconfs.com/http-header-check.phpへのリンクに対する Miro の回答に +1 を付けました。使用するたびに不快な広告が表示されますが、Access-Control-Allow-Origin ヘッダーの存在を確認するには非常に便利です。

Web ページの JavaScript から .json ファイルを読み込んでいます。.htaccess ファイルに以下を追加すると、IE 11 (バージョン 11.447.14393.0) で Web ページを表示する際の問題が修正されることがわかりました。

<FilesMatch "\.(json)$">
  <IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
  </IfModule>
</FilesMatch>

また、/etc/httpd.conf (Apache の構成ファイル) に以下を追加しました。

AllowOverride All

ヘッダー チェッカー サイトは、Access-Control-Allow-Origin ヘッダーが現在送信されていることを確認しました (ありがとう、Miro!)。

ただし、Firefox 50.0.2、Opera 41.0.2353.69、および Edge 38.14393.0.0 はすべて、Access-Control-Allow-Origin ヘッダーがなくてもファイルをフェッチします。(注:私が使用していた2つのドメインは両方とも同じサーバーで同じIPv4アドレスでホストされているため、IPアドレスをチェックしている可能性があります。)

ただし、Chrome 54.0.2840.99 m (64 ビット) は Access-Control-Allow-Origin ヘッダーを無視し、とにかく失敗し、誤って報告します:

要求されたリソースに「Access-Control-Allow-Origin」ヘッダーがありません。したがって、オリジン ' {mydomain} ' へのアクセスは許可されていません。

これはある種の「最初」でなければならないと思います。IE は正常に動作しています。Chrome、Firefox、Opera、Edge はすべてバグがあります。クロムは最悪です。いつもと真逆じゃない?

于 2016-12-14T00:32:01.650 に答える