Access-Control-Allow-オリジンのanglejsをPHPに


Answers

あなたはクロスドメインPOSTを行っているので、AngularはPOSTを行う前にAccess Originヘッダーをチェックするための飛行前のOPTIONS要求を出しています。 ブラウザの[NET]タブでこれが確認されます。 サーバーがOPTIONS要求にうまく応答していないため、AngularはPOSTを拒否します。

POSTMANを使用してサーバーにPOSTするとすべてOKですか?

私はAngularが飛行前のリクエストをしないように設定することができると信じています。

または、OPTIONS要求に正しく応答するように、特にOPTIONS要求に応じて正しいAccess Originヘッダーを返すように、サーバーを構成します。 (OPTIONSは、サーバーにこれらのヘッダーが設定されているかどうかを調べようとしています。

うまくいけば、この情報はあなたを正しい方向に向けるでしょう。

Question

私のシナリオは、2つのウェブサーバーとローカルの1つのリモートから構成されています。

ローカルWebサーバー(Apache)は、リモートWebサーバー(Lighttpd)にajaxリクエストを作成するWebアプリケーションを処理します。

Ajaxリクエストは、anglejs $ httpを使用します。

var req = {
    method: 'POST',
    url: 'http://url/myphp.php',
    headers: {
        'Authorization': 'Basic ' + btoa('username:password'),
        'Content-Type': 'application/x-www-form-urlencoded'
    },
    xhrFields: {
       withCredentials: true
    },
    crossDomain: true,
    data: xmlString
}

$http(req).then(function () {
    console.log("OK!");
});

リモートPHPスクリプトです:

<?php
    echo "You have CORS!";
?>

残念ながら私は

401 Unhauthorized
XMLHttpRequest cannot load http://url/myphp.php. Response to    preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8888' is therefore not allowed access. The response had HTTP status code 401.

リモートWebサーバーには、.htpasswd認証モードが有効で、CORS要求が構成されています。

lighttpd.confに従ってください

setenv.add-response-header = ( "Access-Control-Allow-Origin" => "*" )