Postman Chromeを使用してサービスに[〜#〜] post [〜#〜]を実行していますExtension、そして私は期待される応答を得る。
しかし、$http
を使用して同じ[〜#〜] post [〜#〜]リクエストを実行すると、すべてが地獄に落ちます。
私は:を取得します
Request header field Engaged-Auth-Token is not allowed by Access-Control-Allow-Headers
Engaged-Auth-Token
はヘッダーです。
Postmanで機能し、Chromeでは機能しない理由がわかりません...
何か案は?
この問題は、リクエストヘッダーからAccess-Control-Allow-Headers
が欠落していることが原因です。これを修正するには、リクエストヘッダーにAccess-Control-Allow-Headers: *
を追加する必要があります
Access-Control-Allow-Headers
をhttp request header
に追加します。 $httpProvider
を使用して、アプリレベルでこれを行うことができます。このヘッダーを追加するには、アプリ構成セクションに以下の行を追加します。
var app = angular.module("app", [
"ngRoute",
"app.controllers",
"app.directives",
"app.filters"
]);
app.config([
"$routeProvider",
"$httpProvider",
function($routeProvider, $httpProvider){
$httpProvider.defaults.headers.common['Access-Control-Allow-Headers'] = '*';
}
]);
CLIENTの$ httpProviderでAccess-Control-Allow-Headersを構成しても機能しないと思います。ヘッダーはサーバー上で(応答ヘッダーとして)構成する必要があると思います。たとえば、node-expressアプリケーションでは、これはミドルウェア(たとえば)を使用して実行でき、次のようになります。
res.header('*')
または(より選択的に)必要なヘッダーのみ:
res.header('Engaged-Auth-Token, Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
バックエンドでsailsapiを使用する場合は、cors.jsを変更し、ここにファイルされたトークンを追加します
module.exports.cors = {
allRoutes: true,
Origin: '*',
credentials: true,
methods: 'GET, POST, PUT, DELETE, OPTIONS, HEAD',
headers: 'Origin, X-Requested-With, Content-Type, Accept, Engaged-Auth-Token'
};