2016-10-03 12 views
0

私はブラウザが最初にOPTIONSをサーバに送信することを知っています。しかし、私はAngularjs 1.5でこの問題に直面しています。私はPUTリクエストを送信しようとしており、OPTIONSを送信しています。私はすべてのURLをテストするためにアプリケーションを使用しているため、urlはPUTを使用して罰金を支払っています。

let fd = new FormData() 
let d 
for (d in $scope.uploadAutos) { 
    fd.append(d, $scope.uploadAutos[d]) 
} 

$http({ 
    method: 'PUT', 
    url: `http://sitio.api.com/vehiculo/${parseInt($routeParams.id, 10)}`, 
    data: fd, 
    headers: { 'Content-Type': 'undefined' } 
    }).then(success => { 
    console.log(success) 
    }, error => { 
    console.log(error) 
    } 
) 

このことは、これまでのところ、正常に動作します...しかし、PUTと、私はGETとPOSTリクエストをして取り組んできた道は、...うーん何かが動作していませんさ。バックエンドは上記のように、残りのAPIアプリケーションを使用して私のすべてのURLをテストするのは正しいですが、PUT URLはうまくいきます。どんな助けも素晴らしいだろう:)。ありがとう

+1

返されるOPTIONSリクエストに対する応答がOKの場合、コードはその後にPUTリクエストを正しく送信する必要があります。このOPTIONSリクエストに対するバックエンドの応答を確認できますか? –

答えて

3

2つのリクエスト、OPTIONSリクエスト、つまりフライト前のリクエストが理想的です。これは、Cross Originの要求ヘッダーを検証するためです。

これが確認されると、クライアントは実際のPOST/PUTリクエストを行うことができます。飛行前のリクエストが失敗した場合、CORSリクエストヘッダーがサーバー上で正しく設定されていないことを意味します。

次のヘッダーを設定する必要があります。私は、フライト前を探していた言葉だ

Access-Control-Allow-Origin 
Access-Control-Allow-Methods ("GET, POST, PUT, DELETE, OPTIONS") 
Access-Control-Allow-Headers 
Access-Control-Max-Age 
1

!!笑。私は物事を働かせています。最初。私の側からの情報の欠如があった。だから私は、問題は角ではなく、私のバックエンドではなく、スリムなPHPのドキュメントと私の知識の問題であることに気づいた。あなたはPUTや地図機能にDELETEを使用WHE、あなたは

Mozillaは答え

新しいHTTPに ヘッダを追加することにより、クロスオリジンリソースの共有標準の作品を持っているので、これは、OPTIONSを追加することが必要であることサーバが、ウェブブラウザを使用してその情報を読み取ることが許可されているオリジンのセットを記述できるようにします。さらに、 は、ユーザーデータに悪影響を及ぼす可能性のあるHTTP要求メソッド(特に 、GET以外のHTTPメソッド、または特定のMIMEタイプの でのPOST使用の場合)では、ブラウザで要求が "プリフライト"されることを指定していますサポートされているメソッドをHTTP OPTIONSリクエストメソッドでサーバ から要求してから メソッドで実際のリクエストを送信するサーバ からの「承認」を受けています。サーバーは、 要求で「資格情報」 (CookieとHTTP認証データを含む)を送信する必要があるかどうかをクライアントに通知することもできます。

関連する問題