2016-09-27 3 views
-1

ブラウザのプロキシアプリケーションを作成しています。標準ライブラリのみを使用する必要があります。これまでのところ、私はそのサーバーを作成することができました。クライアントからWebページにアクセスしようとすると、私は、以下の情報を得る:Javaスタンドアロンプ​​ロキシプログラム

CONNECT gmail.com:443 HTTP/1.1 のUser-Agent:Mozillaの/ 5.0 Firefoxの/ 49.0 プロキシ接続:キープアライブ 接続:キープアライブ ホスト:gmail.com:443

私の質問は次のとおりです。要求を処理するために使用するものは何ですか?ファイルのダウンロードを処理するには?

答えて

1

最初のコンセプトを試してみることです適切な成功/失敗の応答。アップストリーム接続が成功した場合は、両方向で同時にバイトをコピーするだけです。エンドポイントは、すべてのSSLの問題、アップロード、ダウンロードなどを処理します。プレイする役割はありません。

-1

次のようにプロキシの一般的な動作は次のとおりです。

  1. 必要がサーバーとpassitからの応答を取得した場合、すべてのリダイレクトを解決し、実際のサーバへのリクエストを行い、ブラウザ
  2. からのリクエストを受信クライアント

へに私は、キャッシングなど、リクエスト/レスポンスヘッダーを変更する合併症に

を取得しておりません210

上記のとおり、gmail.com referにSSL接続しています。

ブラウザは実際に正しいリクエストを送信しています。この場合、ハンドシェイクを実装し、HTTPSオフロードSSLを使用してブラウザに送信し、ブラウザとのネゴシエートSSLを介して応答をブラウザに送信する必要があります。上流の接続を作成し、リターン:

提案が、これは生産グレーダシステムでない場合は、HTTPSではなくHTTPを使用して、CONNECTコマンドは、要求されたものを行うことを得れば

+0

これは正しくありません。あなたの[リンク](http://stackoverflow.com/questions/11697943/when-should-one-use-connect-and-get-http-methods-at)に記載されているとおりではありません。 -http-proxy-server)を使用します。 – EJP

+0

リンクは参考情報であり、CONNECTリクエストに関する詳細 – Ironluca

+0

リンクで正しく「SSL(HTTPS)」と表示され、2つのリモートエンドポイントのみがリクエストを認識し、プロキシはそれらを解読できません。したがって、CONNECTを使用してそのトンネルを開くだけで、2つのエンドポイント(ウェブサーバーとクライアント)が互いに直接話すことができます。これは、あなたの答えと矛盾します:特に、あなたの側でSSLをオフロードすることに関する部分。 – EJP

関連する問題