2017-06-03 8 views
0

クライアントbroswerでAjaxリクエストを使用してrssフィードにアクセスしようとしています。NodeJs要求されたリソースに 'Access-Control-Allow-Origin'ヘッダーがありません

$.ajax({ 
type: 'GET', 
url: 'http://feeds.bbci.co.uk/news/business/rss.xml?edition=uk', 
crossDomain: true, 
dataType: 'xml', 
success: function(responseData, textStatus, jqXHR) { 
    console.log(responseData) 
}, 
error: function (responseData, textStatus, errorThrown) { 
    alert('failed.'); 
} 
}); 

これは私に「Access-Control-Allow-Origin」エラーを与えています。

私はcorsパッケージをインストールしてサーバ上で有効にする必要がありますが、何か不足していますか?

server.jsファイル

var express = require('express'); 
var basicAuth = require('express-basic-auth') 
var bodyParser = require('body-parser') 
var cors = require('cors'); 
var app = express(); 

app.use(cors()); 

app.get('/', function (req, res) { 
// res.send('Hello World'); 
    res.sendFile(__dirname + '/views/index.html'); 
}) 

var routes = require('./routes'); 
app.use('/api', routes); 


var server = app.listen(8081, function() { 
    var host = server.address().address 
    var port = server.address().port 

    console.log("App listening at http://%s:%s", host, port) 
}) 

編集*フルエラー のXMLHttpRequestがhttp://feeds.bbci.co.uk/news/business/rss.xml?edition=ukをロードすることはできません。要求されたリソースに「Access-Control-Allow-Origin」ヘッダーが存在しません。 Origin 'http://localhost:8081'はアクセスできません。

+2

待機中 - 適切なCORSヘッダーが見つからないhttp://feeds.bbci.co.ukを照会しています。 CORSヘッダーを含めるようにBBCサーバーを再構成する必要があります。 –

+0

はい私はbbcウェブドメインであり、私のノードjsサーバではありません。エラーはローカルホストだと言いますが、なぜ私の終わりかもしれないと混乱していますか? 要求されたリソースに 'Access-Control-Allow-Origin'ヘッダーが存在しません。 Origin 'http:// localhost:8081' – user2202098

+0

'origin'ヘッダはクライアントからBBCサーバに送られます。ただし、要求されたリソースはBBCサーバーであり、必要なCORSヘッダーで応答しません。 –

答えて

3

http://feeds.bbci.co.uk/news/business/rss.xml?edition=ukAccess-Control-Allow-Originレスポンスヘッダーを送信しないため、代理でリクエストする必要があります。 https://cors-anywhere.herokuapp.com/http://feeds.bbci.co.uk/… URLがhttps://cors-anywhere.herokuapp.comに行くための要求、そしてhttp://feeds.bbci.co.uk/…の上で要求を送信し、オープン/パブリックCORSプロキシを引き起こします

url: 'https://cors-anywhere.herokuapp.com/http://feeds.bbci.co.uk/news/business/rss.xml?edition=uk', 

:あなたのフロントエンドでurlの値を変更することによって、このようなJavaScriptコードがあることを行います実際にリクエストしたいURL。

そして、そのプロキシが応答を受け取ったら、応答を受け取ってAccess-Control-Allow-Originレスポンスヘッダーを追加し、レスポンスとして要求元のフロントエンドコードに渡します。

Access-Control-Allow-Originレスポンスヘッダとレスポンスは、ブラウザが見るので、ブラウザは今、あなたを見せているエラーメッセージが消えると、ブラウザが応答をアクセスするためのJavaScriptコードは、あなたのフロントエンドを可能にするものであること。

またはhttps://github.com/Rob--W/cors-anywhere/などのコードを使用して、独自のプロキシを設定します。

http://feeds.bbci.co.uk/…自身がAccess-Control-Allow-Originレスポンスヘッダーを送信しないため、ブラウザはフロントエンドJavaScriptコードがそのサーバーのクロスオリジンからの応答にアクセスすることを拒否します。

https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORSです。

+0

https://cors-anywhere.herokuapp.comのようなプロキシを使用する利点は、自分のWebサーバー経由でルーティングですか?私の考えは、私のサーバーではなくクライアントからのリクエストで、余分なデータ処理を節約することでした。 – user2202098

+1

https://cors-anywhere.herokuapp.com/のような公開プロキシを使用する唯一の利点は、バックエンドで何かを設定する代わりに、リクエストしているURLをプロキシのURLに置き換えることができます。もちろん、独自のプロキシを作成したり、独自のバックエンドに処理を書き込んだりするのは問題ありません。 – sideshowbarker

関連する問題