ロードバランサでも同じこと。
クライアントCとプロキシPとWebサーバSが、
C←→P←→S
と連なっている場合。
TCP/IPレベルでは、C-P間、P-S間でコネクションに断絶がありますよね。
なので、たとえばSがCからのリクエストに対するレスポンスを正常にPに返したとしても、Cがそのレスポンスを受け取れる保証はないわけでして。
プロキシPの実装次第で、たとえばレスポンスをCに返すまでSとの間のコネクションを維持して、かつCに返しきれなかったら、SにイーサレベルでACKを返さないとかいう夢のような機能が実現されていれば良いわけですが。
しかしそんなことをしたら、負荷分散もへったくれもないですな。
PはSからレスポンスを受け取ったらさっさとコネクションを切って、Cにレスポンスを返すのに専念するんじゃないですかね。そしてCに返せたかどうかはSは知る由も無いという。
ベストエフォートの世界ってそういうものでしょ?
それを
サーバのログではレスポンスで200を返しているので受け取れないのはクライアントが悪い
なんて主張をする人がいたとしたら、噴飯ものでは済まない気がします。
つくづく知らないもの勝ちって、うらやましいなぁと思います。
コメント