2011-07-08 23 views

答えて

2

EventSourceは、イベントをクライアントに送信するサーバーに関するものです。私は認証のために双方向通信が必要だと思います。実際の資格情報をどうやって送るのですか?

WebSocketsはこれを達成できます。それはあなたが探しているものですか?

更新:

4esn0kで指摘したようにあなたは、クッキーを利用して、あなたが望むものを達成することができます。ブラウザーが接続を確立するための最初の要求とと​​もに、Cookieが送信されます。したがって、EventSource接続を開始する前に、Cookieのセッション識別子を設定してください。

+3

のEventSourceが接続を初期化する必要があり、オープン、それを維持するの世話をするには、いずれか、それが閉じていない場合は、それを閉じることはありませんによってサーバーによって閉じられている場合は、無期限に再確立しようとします。いずれにしても、EventSourceは接続の最初のステップを実行する必要があります。私の目的にはEventSourceが理想的ですが、リクエストする際に認証情報を送信したいと思います。 –

+1

仕様(http://dev.w3.org/html5/eventsource/)に基づいて、私が恐れているそれらの資格情報を送る方法はありません。 – Tower

+0

@Tower私は同意しない。 EventSourceは、持続的で、Content-Typeが 'text/event-stream'のHTTPリクエストです。 Cookieを他のHTTPリクエスト(すでに認証済みであると仮定)として渡すことも、クエリ文字列を使って認証情報を渡すこともできます – saml

2

クッキー(HTTPではなくAUTH)についてのご講演場合:クッキーはのEventSource接続要求をsendedではされるように

のEventSourceは、HTTPを使用しています。

のHttp AUTHはスペックからCORS + HTTP認証が

1

をサポートしていませんが、私は同じ問題への解決策を探しています、他のHTTP URLとしてサポートされる必要があります。この投稿は、hereこれを言う:

もう一つ注意すべき点は、あなたが値を 承認クエリ文字列のparamを提出しなければならないことを意味する、のEventSourceを使用するときに我々が知る限り、あなたはHTTPに ヘッダを変更することはできませんということですHTTP基本認証を使用して が挿入されます: ログインとトークンのbase64エンコードされた連結。ここで

ポストからのコードです:

// First, we create the event source object, using the right URL. 
 
var url = "https://stream.superfeedr.com/?"; 
 
url += "&hub.mode=retrieve"; 
 
url += "&hub.topic=http%3A%2F%2Fpush-pub.appspot.com%2Ffeed"; 
 
url += "&authorization=anVsaWVuOjJkNTVjNDhjMDY5MmIzZWFkMjA4NDFiMGViZDVlYzM5"; 
 

 
var source = new EventSource(url); 
 

 
// When the socket has been open, let's cleanup the UI. 
 
source.onopen = function() { 
 
    var node = document.getElementById('sse-feed'); 
 
    while (node.hasChildNodes()) { 
 
    node.removeChild(node.lastChild); 
 
    } 
 
}; 
 

 
// Superfeedr will trigger 'notification' events, which corresponds 
 
// exactly to the data sent to your subscription endpoint 
 
// (webhook or XMPP JID), with a JSON payload by default. 
 
source.addEventListener("notification", function(e) { 
 
    var notification = JSON.parse(e.data); 
 
    notification.items.sort(function(x, y) { 
 
    return x.published - y.published; 
 
    }); 
 
    notification.items.forEach(function(i) { 
 
    var node = document.getElementById('sse-feed'); 
 
    var item = document.createElement("li"); 
 
    var t = document.createTextNode([new Date(i.published * 1000), i.title, i.content].join(' ')); 
 
    item.appendChild(t); 
 
    node.insertBefore(item, node.firstChild); 
 
    // We add the element to the UI. 
 
    }); 
 
});

関連する問題