2017-10-06 8 views
1

私は企業環境で働いており、解決できない問題が見つかりました。EventSource変更プロトコル

URLパラメータをHTTPからHTTPSに変更することは、EventSourceと関係があります。このエラーを投げて、ブラウザで結果

const url = 'http://localhost:8080'; // <-- using HTTP not HTTPS 
new window.EventSource(url); 

:私はHTTPSを使用して、ウェブサイト上で開発しています

GET https://localhost:8080 net::ERR_TUNNEL_CONNECTION_FAILED

ので、多分これは同じプロトコルを使用しています仕様です。誰でもこの問題を経験したか、それを解決する方法を知っていますか?それは仕様ですよう

---更新---

が見えます。疑問が残っている

Mixed Content: The page at 'https://...' was loaded over HTTPS, but requested an insecure EventSource endpoint 'http://localhost...'. This request has been blocked; the content must be served over HTTPS.

、どのように私はこの問題を回避ん

:別のHTTPSサイト上でこれをしようとすると、私はこれを得ましたか。

答えて

0

イベントソースはhttpとhttpsの間で変更されません。 Chrome用のHTTPS Everywhereプラグインなどを使用していますか?

同じ起源ポリシーにぶつかっていると思います。つまり、SSE接続は基本的に同じホスト名とドメイン、同じスキーム(つまりhttpまたはhttpsの両方)と同じポートを意味する同じ起点でなければなりません。

CORSを使用すると、この問題を回避できます。あなたはこのヘッダを返送する必要があり、あなたSSEスクリプトの上部には:

Access-Control-Allow-Origin: * 

これは誰にも言って、どこからでも、データ・ストリームを接続して取得することが許可されています。それはサーバースクリプト上で行われなければなりません。クライアントからそれを行う方法はありません。 (設計上、同一起源のポリシーの全ポイントは、他人のコンテンツを使用している人を許可なく停止させ、自分自身のように見せることです)。 HTML5 SSE、O'Reilly)を使用して、許可元を細かく制御し、Cookieや基本認証とどのようにやり取りするかを説明します。

ところで、私はChromeが自己署名入りのhttps証明書で動作しないことに気付きました。正直言っても、それがまだ当てはまるかどうかはわかりませんが、httpsとlocalhostを使用するときには注意が必要かもしれません。

関連する問題