2016-10-31 4 views
0

私のプロジェクトにはいくつかのサービスがあります。 user.service.t.js 一部のサイトにリクエストを希望します。 sites.comとサイトのコンテンツを取得します。私はそれを行う、それは以下を書いている。私はこれを行うことができますどのようにangular2のあるサイトへのリクエスト

XMLHttpRequest cannot load http://www.sites.com/. Response for preflight is invalid (redirect) 
error_handler.js:45 EXCEPTION: Response with status: 0 for URL: null. 

getSites(user) { 
    let body = JSON.stringify(user); 
    let headers = new Headers(); 
    headers.append('Content-Type', 'application/json'); 
    headers.append('Access-Control-Allow-Headers', 'Content-Type'); 
    headers.append('Access-Control-Allow-Origin', '*'); 
    headers.append('Access-Control-Allow-Credentials', "true"); 
    headers.append('Access-Control-Allow-Methods', 'GET, POST, OPTIONS'); 
    var requestoptions = new RequestOptions({ 
     method: RequestMethod.Get, 
     url: "http://www.joomag.com/", 
     headers: headers, 
     withCredentials: true 
    }) 

    return this.http.post("http://www.sites.com/", <RequestOptionsArgs> {withCredentials: true, headers: headers}) 
     .map((res: Response) => { 
     if (res) { 
      return { status: res.status, json: res.json() } 
     } 
     }); 

    } 

はしかし、私はこのエラーを取得します。

答えて

0

これらのヘッダーは、クライアントからの要求には意味がありません。サーバーの応答に追加する必要があります。サーバーからの応答に追加されていない場合、ブラウザーはこのエラーをスローします。

HttpModuleの代わりにJsonpModuleを試すことができますが、そこにwithCredentialsオプションを追加することはできません(実際に必要かどうかわかりません)。

+0

リモートサイトへのリクエストを行うためにエクスプレスサーバーを使用すると、正常に動作します。今度は、サービスang2経由で請求したいと思います。 jsonpを使うと、私にとってはうまくいきません。 –

+0

これはCORSであり、ブラウザ機能なので、サーバーからリクエストを送信すると、このようなことは起こりません。あなたが必要なヘッダーを送信するようにサーバーを設定するか、かなりの制限(カスタムヘッダーなし)を持つJSONPを使用することができます。それ以外の場合は不運です。別の方法として、独自のサーバーに要求を行い、サーバーから実際に接続したいサーバーに要求を転送することができます(CORSはブラウザーにのみ影響するため)。 –

関連する問題