0

ユーザーが入力したpopとsmtpの値を確認しようとしています。たとえば、ユーザーが入力したpopとsmtp(pop.gmail.com、smtp.gmail.com)が正しいか間違っているかを確認したいと思います。

そのために、ユーザーが入力したpopとsmtpの両方の値を取得してサーバーにリクエストを1つだけ送信します。これにより、2つのタスクが実行されます。1。特定のサーバーに接続してpopを入力したユーザーを確認します。いくつかのダミーメールID..これらすべてのタスクを完了しました..

しかし、今の私の要件は、それぞれを検証した後にユーザーに表示する必要があります。つまり、UIでは次のように表示する必要があります。

  1. POP接続を確認しました。
  2. SMTP接続がチェックされました..そのようにOK。

しかし、これらの両方のタスクを実行するためにサーバーにリクエストを1つだけ送信しました。したがって、各タスクを完了した後、サーバーから中間ステータスを取得する必要があります。したがって、クライアント側のUIで更新できるのは私だけです。しかし、それが可能かどうかはわかりません。単一のリクエストに対してサーバーから中間応答を取得するには...アイデアの友達はいますか?もしそうなら、あなたは少しのコードを思い付くことができます...

提案を期待していますか?

4

3 に答える 3

0

長いポーリング手法を確認する必要があります。部分的な応答を取得することは可能ですが、すべてのブラウザで機能するわけではありません。

于 2009-11-06T06:01:59.910 に答える
0

HTTPヘッダーのみを返すGETまたはPOSTの代わりにHEADリクエストを使用できます

于 2009-11-06T06:11:17.550 に答える
0

少し話が逸れますが、ダミーメールを送るのは「危険」です。

多くのサーバーは、存在しないローカルアドレスに送信しようとすると「注意」します。たとえば、サーバーのドメインが「whatever.com」で、たとえば aaa@whatever.com などのランダムなアドレスに送信し、「aaa」が有効なユーザーではない場合、サーバーはこれに気付きます。

サーバー、一定期間、送信者としてあなたをブロックするなどのアクションを実行する場合があります。(これは、辞書攻撃によるスパムを減らすのに役立ちます。) したがって、「テスト」は、実際のメールの配信を効果的にブロックすることになります。

逆もまた然り。テストとして、有効であることがわかっている外部アドレス (たとえば、自分の電子メール アドレス) に送信しようとしているとします。この場合、差出人アドレスは有効な内部アドレスでなければなりません。無効な内部アドレスを使用したり、さらに悪いことに内部ではないアドレスを使用した場合、サーバーはメールの配信を (せいぜい) 拒否し、最悪の場合は再び一時ブロックを設定する可能性があります。

これらの両方の状況における重要な要素は、SMTP プロトコルが非常に「緩い」ものであるにもかかわらず、SMTP サーバーが「悪い動作」を注意深く監視していることです。これは、スパム プログラムを識別する 1 つの方法であるためです。そのため、「正しくない」動作が隠されていると、(通常は限られた期間) メールの受信を恣意的に拒否する可能性があります。

ちなみに、元の質問に戻ります。どちらのテストもほぼ瞬時です。電子メール サーバーが地球の反対側にある場合でも、両方のチェックを数秒以内に実行できます。そのため、2 つのパケットを送り返したとしても、ユーザーには「一緒に到着した」ように見える可能性があります。また、ブラウザからの 1 つの要求はサーバーからの 1 つの応答しか処理できないため、2 つのパケットで応答を送信する必要があります。

つまり、最初のテストを行う - 応答の最初の部分を送信する - 2 番目のテストを行う - 応答の 2 番目の部分を送信する。

通常の HTTP パケットの場合、これは大したことではありません。最初の応答の準備ができた後、何らかのフラッシュ/送信を行い、2 番目の応答の後に再度実行します。ブラウザは、到着時に部分的なページを表示することに慣れています。

ただし、AJAX リクエストの場合は、かなり低いレベルでフレームワークに入る必要があります。私が認識しているほとんどのフレームワークでは、解析を開始する前に、着信非同期パケットが「完全」である必要があります。これは、パケットが xml などのようにフォーマットされている場合に特に当てはまり、部分的な解析はほとんどすべての場合に役に立ちません。

于 2009-11-06T06:18:18.050 に答える