HTTP経由でService Workerをテストするためのオプション


93

Service Workerをテストしたいのですが、仮想ホストがセットアップされていて、localhostでhttpsを有効にできないようです。

ローカルホストでService Workerを登録しようとするたびに、Service Virtual Workerをテストするためにローカル仮想ホストのURLをホワイトリストに登録するにはどうすればよいですか?Chromeでは、Service Workerを有効にするにはhttpsが必要であると述べています。どうすれば、少なくともローカルテストでこの制限を回避できますか。

回答:


136

一般に、Service Workerを使用するには、HTTPSを介してページとService Workerスクリプトの両方を提供する必要があります。理論的根拠は、強力な新機能のために安全なオリジン優先するで説明されています

ローカル開発を容易にするために設けられているHTTPS要件には例外があります。を介してhttp://localhost[:port]、またはを介してページとService Workerスクリプトにアクセスする場合http://127.x.y.z[:port]、それ以上のアクションなしでService Workerを有効にする必要があります。

Chromeの最近のバージョンでは、この回答で説明されているようにchrome://flags/#unsafely-treat-insecure-origin-as-secure介したローカル開発中にこの要件を回避できます

Firefox devtools.serviceWorkers.testing.enabled設定を介して同様の機能を提供します

この機能は、他の方法では実行できないテストを容易にすることのみを目的としていることに注意してください。サイトの製品版を提供する場合は、常にHTTPSの使用を計画する必要があります。実際のユーザーにこれらのフラグを有効にする手順を実行するよう依頼しないでください。


ジェフはすぐにそれを試してくれてありがとう。間違いなく私はテストのためだけにこれを使用しています。私は理想的な方法を知りません。しかし、必死の時間は必死の措置を要求します... !!私の苦労して稼いだ4ポイントを返してくれませんか... !! 質問が適切ではないと感じた場合は削除し、間違った行動を助長します
Aman Satija

1
ローカルホストでService Workerを使用していますが、サーバーからsw.jsファイルをフェッチしようとすると、net :: ERR_INSECURE_RESPONSE、
sp1rs

1
ありがとう!本体を更新して読みましたdevtools.serviceWorkers.testing.enabled
Jeff Posnick 2017年

5
上記を見つけるのに苦労した人のために-FFを開く-開発ツール-歯車の設定-詳細設定-sw over httpを有効にします。次に、urlまたはtoolsのabout:debugging#workers-web dev-ツールバーのservice workerに移動できます。ワーカーを起動してください!
Sten Muchow 2017年

@StenMuchowの答えは、クロムMacとWindowsで私のために働いている
モハメド・フセイン

51

プログレッシブウェブアプリの実際の動作テストのために、プラグインされたモバイルデバイスのサービスワーカーデバッグする場合、ssl chromeの起動オプションは役に立たず、証明書を購入する必要はありません。

@ chris-ruppelはプロキシソフトウェアのインストールについて述べましたが、実際にはポート転送を使用する簡単な方法があります

Chromeを使用してデバイスに接続してデバッグすると仮定します。

  • ではクローム開発ツール「リモートデバイス」オープン「設定」と追加「ポート転送」ルールを。
  • localhostセットアップがlocalhost:80で実行されている場合、
  • 「デバイスポート8080」というルールを追加するだけです(1024以上の特権のないポートを使用できます)。
  • およびローカルアドレス "localhost:80"(またはmytestserver.sometestdomainwithoutssl.company:8181など)

その後モバイルデバイスURL " http:// localhost:8080 "を呼び出すと、実際のPC /テストサーバーの "localhost:80"が応答します。モバイルで実行されているローカルマシンのように、Service Workerと完全に連携します。

モバイルデバイスで非特権ポートを使用することを覚えている限り、複数のポート転送と異なるターゲットドメインでも機能します。スクリーンショットを見る: モバイルで呼び出されたときにPCを呼び出す構成済みポートのスクリーンショットを参照してください

この情報のソースは、Googleリモートデバイスのドキュメントです:https : //developers.google.com/web/tools/chrome-devtools/remote-debugging/local-server (2017年4月の時点では、これを読むのはあまり明確ではありませんそれから簡単な答え)


有望に見えますが、うまくいきませんでした。ポート転送を設定した後、Android 5.0.2のlocalhostにアクセスしようとすると、「このサイトにアクセスできません」とだけ表示されます。
ジャクソン

ローカルホストでhttpsは必要ありませんか?SWは問題なく動作しますか?
マチャド

2
それは受け入れられる答えであるはずです、それはうまく機能しています
Miquel

速くて簡単!スマートフォンでUSBデバッグを有効にして受け入れることを忘れずに、USB経由でPCに接続してください。ありがとう!
Marcos R

ただし、httpの場合のみ、https経由でリソースをリクエストすると、それらはキャッシュされません。
Legends、

24

実際のデバイスでデバッグおよびテストしたいことがよくあります。私が思いついた1つの方法は、ローカル開発中にCharles Proxyを介して電話のネットワークトラフィックをルーティングすることです。すべてのChrome固有のソリューションとは異なり、これは携帯電話のどのブラウザでも機能します。

  1. 私のラップトップでチャールズを実行します(サービスワーカーと一緒に私のウェブサイトにもサービスを提供します)。Charlesが実行されたら、ステップ2のIP /ポートをメモします。
  2. ラップトップをプロキシとして使用するようにモバイルデバイスを構成します。
    • Androidの場合は、[設定] > [ネットワークの変更] > [ 詳細設定] > [ プロキシ]で WiFiを押し続けます。使用マニュアル IP /ポートを設定します。
    • iOSの場合は、(i)アイコン> [ HTTPプロキシ]セクションをクリックします。[ 手動]を選択し、IP /ポートを設定します。
  3. 訪問localhost私のモバイルデバイス上で今サービス労働者が登録してテストすることができます。

4
私もその問題に直面しています。モバイルをテストすることは、プロキシなしではまったく不可能です。この投稿にはもっと投票が必要です。
Phyo Arkar Lwin 2016

1
@ chris-ruppel実際には、Chrome Dev Toolsの内蔵リモートデバイスのポート転送を使用して、追加のプロキシソフトウェアなしでこれを行う方法があります。このスレッドに詳細な回答を追加しました。
ChristopherLörken17年

「モバイルをテストすることはまったく不可能です。」しかし、それは小さな見落としです。サービスワーカーを指定した人々を称賛しましょう...
ジャクソン

クリスは「1.私のラップトップでチャールズを実行する」について詳しく説明できますか?Charlesプロキシをインストールできます。彼は自分のコンピューターのlocalhost:8080でサーバーを実行しています。じゃあ何?「IP /ポートに注意してください」とも言います。どこ?
ジャクソン

1
@ChrisRuppel私はに切り替えngrok.com:フリーは、私の地元のアプリの公開HTTPSサイトを作成し、魔法のように動作します!接続するまで、最初の実行にはしばらく時間がかかりました。私がお勧めしないのは、米国にいない場合はリージョンを切り替えることです(ngrok.com/docs#config-options、「regions」パラメーター)。
Karsten Silz

10

私の場合、pwaをテストする最も簡単な方法は、ngrokを使用することでした。 https://ngrok.com/downloadログインして、urトークンを取得して設定してください!

実行./ngrok http {your server port}するときは、上記のこのコマンドを実行した後にターミナルに表示されるhttpsを使用していることを確認してください。


https://surge.shを使用することもできますここにアクセス すると、静的なWebページをホストできます。https//surge.sh/help/securing-your-custom-domain-with-sslは、 SSL証明書の設定方法を見る


魅力のように働いた!素晴らしい推薦ありがとうございます!
Karsten Silz

これも役に立ちますが、灯台を使用したレポートの生成に問題があります
Cj Oyales

3

Jeffが最初の応答で述べたように、Service Workersをテストするためにローカルホストレベルでhttpsは必要ありません。サービスワーカーは、ローカルホストドメインにアクセスする限り、HTTPSなしで登録して正常に動作します。

ローカルホストでアプリケーションをテストし、実際にhttpsでどのように機能するかを確認したい場合、最も簡単な方法は、アプリをGitHubにアップロードすることです。パブリックドメインを無料で(そしてHTTPSで!)作成できます。

手順は次のとおりです。https//pages.github.com/


1
フォローアップの質問は、ソフトウェアの推奨事項に関するものです。localhostメソッドを使用してモバイルデバイスでテストするには、iOSおよびAndroidにどのWebサーバーが推奨されますか?
Damian Yerrick 2017年

Erlang HTTP Serverを使用していますが、どのサーバーでも機能するはずです。以前はChromeの200 HTTPサーバーを使用していましたが、これはGoogle Marketplaceからアクセスできます。
ミゲルグアルド2017年

3

localhostでWebサーバーを実行できないクライアントデバイスでService Workerをテストする場合、一般的な手法は次のとおりです。

  1. サーバーにホスト名を付けます。
  2. このホスト名に証明書を与えます。
  3. この証明書を発行したCAをIPに信頼させる。

しかし、これは言うより簡単です。Redditの2016年11月のAMAで、Let's Encryptの担当者、プライベートLANでのHTTPSは「本当に難しい質問であり、今のところ誰も満足できる答えを出していないと思います」と認めました。

コンピュータにホスト名を与える一般的な方法には、毎日またはインターネットゲートウェイアプライアンスの電源を入れ直すたびに変わるアドレスではなく、安定した内部IPアドレスを与えることです。特定のプライベートアドレス(通常は10/8または内192.168/16)を開発ワークステーションのイーサネットカードのMACアドレスに関連付ける「予約」を設定するには、ネットワーク(通常はゲートウェイ)のDHCPサーバーを構成する必要があります。これについては、ゲートウェイのマニュアルを読んでください。

開発ワークステーションに安定したIPアドレスが割り当てられたので、時間とお金のトレードオフがあります。DNSとOpenSSLの高度な使用法を学び、テストする予定のすべてのデバイスにルート証明書をインストールする場合:

  1. ネットワークで内部DNSサーバーを実行します。これは、ゲートウェイまたは開発ワークステーションにある可能性があります。
  2. 作成された一部のTLDに対して権限を持ち、他のTLDに対して再帰的になるようにDNSサーバーを構成します。
  3. 開発ワークステーションのプライベートIPアドレスに安定した名前を付けます。これにより、内部名が付けられます。
  4. DHCPサーバーを構成して、このDNSサーバーのアドレスを、リースを取得する他のデバイスに提供します。
  5. 開発ワークステーションで、OpenSSLを使用して、プライベート認証局とWebサーバーのキーペアを生成します。
  6. OpenSSLを使用して、CAのルート証明書とWebサーバーの内部名の証明書を発行します。
  7. この証明書を使用して、開発ワークステーションのWebサーバーでHTTPSを構成します。
  8. CAのルート証明書を信頼できるルート証明書としてすべてのデバイスにインストールします。
  9. すべてのデバイスで、この内部名にアクセスします。

ルート証明書を追加したり、ローカルDNSを制御したりできない場合(他のユーザーが所有しているデバイス(BYOD)でテストする場合や、メジャーな証明書など、ユーザーが信頼されたルート証明書を追加できない、よりロックダウンされたブラウザーでテストする場合などビデオゲームコンソールでは、完全修飾ドメイン名(FQDN)が必要です。

  1. DNSとAPIを提供するレジストラからドメインを購入します。これは、TLD内に直接存在するか、パブリックサフィックスリストに追加された動的DNSプロバイダーの1つから存在する可能性があります。(非PSL動的DNSプロバイダーは、Let's Encryptによって課せられたレート制限のために受け入れられません。)
  2. このドメインのゾーンファイルAで、開発ワークステーションのプライベートIPアドレスにレコードを指定します。これにより、開発ワークステーションにFQDNが提供されます。
  3. 使用脱水し、サポートしているACMEクライアントdns-01レッツ・暗号化、認証局からこのFQDNの証明書を取得するために、挑戦を。
  4. この証明書を使用して、開発ワークステーションのWebサーバーでHTTPSを構成します。
  5. すべてのデバイスで、この名前にアクセスします。

1

サービスワーカーをテストする最も簡単な方法は、無料のホスティングプロバイダーを見つけることだと思います。今日、無料のホスティングを提供する多くのサイトがあります。この無料のサーバーでアプリを簡単にホストできます。

私は主にherokunetlifyを使用しています。これは無料で使いやすいです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.