8

私たちの Web アプリケーションには、ローカル ネットワーク上のサーバーにデータを送信し、プリンターで何かを印刷するボタンがあります。

ここまでは簡単でした。ボタンはトークンを使用して AJAX POST 要求をトリガーしhttp://printerserver/print.php、そのページは Web アプリケーションに接続してトークンを検証し、印刷するデータを取得してから印刷しました。

ただし、現在、Web アプリケーションを HTTPS 経由で配信しています (このために HTTP に戻りたくありません)。Chrome と Firefox の新しいバージョンは、HTTP アドレスにリクエストを送信しなくなりました。 CORS ヘッダーを確認するように要求します。

では、クロスプロトコル XHR の最新の代替手段は何ですか? Websocket も同じ問題に悩まされていますか? (Google 検索では、ここでの現在の状態が明らかになりませんでした。) TCP ソケットを既に使用できますか? アクションはべき等ではなく、プリロードとキャッシュに実際的な影響を与える可能性があるため、GET 要求にも切り替えたくありません。

プリンターサーバー上のアプリケーションはどのような方法でも変更できますが (NodeJS などに置き換えることができます)、ユーザーのブラウザーを変更することはできません (たとえば、プリンターサーバーの自己署名証明書を信頼するため)。

4

4 に答える 4

1
  • https webapp をホストするサーバーはプリント サーバーをリバース プロキシできますが、プリンターはユーザーに対してローカルであるため、これが機能しない場合があります。
  • プリント サーバーには正しい CORS ヘッダーが必要です。

    Access-Control-Allow-Origin: *
    

    また:

    Access-Control-Allow-Origin: https://www.example.com
    

ただし、ワイルドカードの使用には落とし穴があります

于 2014-11-06T16:44:32.623 に答える
1

印刷要求を Web サーバーのキューに保存し、印刷要求を印刷サーバーに定期的にポーリングさせることができます。

それが不可能な場合は、Web サーバー ネットワークとプリント サーバー ネットワークの間にトンネルまたは VPN をセットアップします。そうすれば、クライアントではなくサーバー側の Web サーバーから印刷要求を行うことができます。curl を使用する場合、無効な SSL 証明書などを無視するフラグがあります (印刷要求がブロックされないように、とにかくキューを導入する方が良いと思います)。

Web サーバーが、プリントサーバーがオンになっているネットワーク上の何かに ssh 接続できる場合は、次のようなことができます: ssh params user@host some curl command here

私が考えることができる3番目のオプションは、printserverが、たとえばprint.somedomain.comのようなWebサーバードメインのサブドメインにバインドできる場合、somedomain.com証明書によって信頼できるようにすることができる場合があります.IIRCを作成する必要がありますCSR (Certificate Signing Request) を printserver 証明書から取得し、somedomain.com 証明書で署名します。おそらく、これ自体はサブドメインである必要さえありませんが、ブラウザがクライアント側でそれを行うための要件である可能性があります。

于 2014-11-06T08:36:56.703 に答える
1

最も簡単な方法は、リクエストをプリント サーバーに中継するだけのルートを webapp に追加することです。したがって、AJAX POST リクエストをに送信し、それ自体が受け取ったものとまったく同じ POST コンテンツを使用して、 にhttps://myapp.com/printリクエストを送信するサーバー側コードを実行します。http://printerserver/print.php@dnozay が言ったように、これは一般にリバース プロキシと呼ばれます。はい、そうするには、プリントサーバーを再構成して、Web サーバーからの (認証された) 要求を受け入れる必要があります。

または、プリントサーバーを https に切り替えて、クライアントから直接呼び出すこともできます。

安全な (https) ページでの安全でない (http) Web ソケット接続もおそらく機能しないことに注意してください。これには正当な理由があります。一般に、安全に見えるページから安全でない接続を作成して人々を誤解させることは、悪い考えです。

于 2014-11-06T17:18:46.857 に答える
0

質問から私が理解していることから、printserver は Web アプリケーションからアクセスできないため、リバース プロキシ ソリューションはここでは機能しません。

cross-origin-policy により、ブラウザからプリントサーバーへのリクエストを制限されています。

HTTPS ページからプリントサーバーと通信したい場合は、プリントサーバーが print.php も HTTPS として公開する必要があります。

プリントサーバーの内部アドレスに解決される Web アプリケーションのサブドメインとして DNS A レコードを作成できます。

これらの手順を実行すると、printserver ページを更新して、ブラウザーが尊重する寛容な CORS ヘッダーで応答できるようになります。ブラウザーが、TLD なしで、さまざまなプロトコル スキーム (HTTPS と HTTP) や内部ドメインに対して CORS 要求を発行することさえないと思います。

于 2014-11-06T19:46:01.343 に答える