29

応答データは取得できますが、カスタム HTTP ヘッダー データを取得できません。

はい、これはクロスドメイン リクエストです。JavascriptでAjaxリクエストを行っています。XMLHttpRequest と jQuery $.ajax でこれを試しました。サーバー設定を完了しました。データを送信するときにこれらを設定しました:

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET

必要な応答データを取得します。しかし、完全な HTTP ヘッダー応答を取得できません。

PHP では、テキスト レスポンスを送信する前に次のように設定します。したがって、getAllResponseHeaders() で取得する必要があると思います。

header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('My-Own-Test: nodatahere');

しかし、ここに私が得たものがあります。

Content-Type: text/plain; charset=x-user-defined
Cache-Control: must-revalidate, post-check=0, pre-check=0
Expires: 0

がありませんMy-Own-Test。参考までに、ここに私のJavascriptがあります:

var formData = new FormData();
formData.append('username', 'my_username');
formData.append('book_id', 'test password');
var xhr = new XMLHttpRequest();
xhr.open('POST', 'https://mydomain.com/proc.php', true);
xhr.overrideMimeType("text/plain; charset=x-user-defined");
xhr.onload = function(e) { 
    console.log(this.getAllResponseHeaders());
};
xhr.send(formData);

jQueryでも試してみました...同じ結果です。

var data_to_send = {
    username: 'my_username',
    password: 'test_password'
};
var ajaxObj;
ajaxObj = $.ajax({
    url: "https://mydomain.com/proc.php",
    data: data_to_send,
    type: "POST", 
    beforeSend: function ( xhr ) {
        xhr.overrideMimeType("text/plain; charset=x-user-defined");
    }
})
.done(function ( data ) {
    console.log( ajaxObj.getAllResponseHeaders()  );
});

それでも...運が悪い。

しかし、Firebug または Chrome の開発者ツールを調べてみると、これらのツールがContent-LengthContent-EncodingVaryX-Powered-BySet-CookieServerそしてもちろんMy-Own-Test.

4

1 に答える 1

45

正しい SO の質問を教えてくれたjblに感謝します。分かりました...

では、OK... 答えです。独自の HTTP ヘッダー情報を設定し、クロスドメイン Ajax などを使用して取得したい場合は、応答テキストを送信する前に、サーバー側で設定する必要がある追加の HTTP ヘッダーを次に示します。

header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Methods: POST, GET");      
header('Custom-Header: Own-Data');
header('Access-Control-Expose-Headers: Custom-Header');

上記の例では PHP を使用しています。ただし、設定に使用するものは何でも、独自の言語を使用してください。

私がこの質問をしたとき、私はそれ以外のすべてを持っていましたAccess-Control-Expose-Headers. それを入れた後、私の Javascript Ajax は HTTP Header Custom-Header の内容を読むことができます。

于 2013-02-23T16:54:57.877 に答える