ConnectionResetError: [Errno 104] Connection reset by peer

1763 ワード

環境
ubuntu 20.04 python 3.6 django 2.2
私がネットで探した原因はいくつかあります.
  • サーバの同時接続数がそのベアラ量を超え、サーバはその一部の接続を閉じる.実際の接続サーバの同時クライアント数がサーバのベアラ量を超えていないことが分かった場合、ウイルスや木馬に感染し、ネットワークトラフィックの異常を引き起こす可能性があります.netstat-anを使用して、ネットワーク接続状況を表示できます.
  • クライアントはブラウザをオフにし、サーバはクライアントにデータを送信しています.
  • ブラウザ側がStopを押した.この2つの状況は、一般的にサーバに影響しません.ただし、異常情報を特に処理しないと、サーバのログファイルに重複して異常が発生し、サーバのログファイルが大きすぎてサーバの実行に影響を与える可能性があります.異常を引き起こす部分に対してtry...catchを使用して異常をキャプチャし、e.printStackTrace()の使用を避けるために、プロンプト情報を出力しないか、または1つだけ出力することができます.すべての異常情報を出力します.
  • ファイアウォールの問題;ネットワーク接続がファイアウォールを通過する場合、ファイアウォールは一般的にタイムアウトするメカニズムがあり、ネットワーク接続が長時間データを転送しない場合、このTCPのセッションを閉じ、閉じた後に読み書きすると異常になります.ファイアウォールを閉じて問題が解決した場合は、ファイアウォールを再構成するか、自分でプログラムを作成してTCPの長い接続を実現する必要があります.TCPのロングコネクションを実現するには,自分でハートビートプロトコルを定義し,一定時間ごとにハートビートプロトコルを送信し,双方がコネクションを維持する必要がある.

  • その中で解決する方法
    異常を投げ出す方法で頻繁なリクエストエラーが発生した場合は、sleepでしばらく休眠してみてください.
    私の質問
    リクエストヘッダに追加された長さが本物のファイルの長さより小さい場合、この問題が発生します.
    response['Content-Type'] = file_type
    response['Content-Disposition'] = 'inline;filename=%s' % the_file_name
    #     
    response['content-length'] = size
    

    解決策sizeを修正し、この値を実際のファイルサイズと一致させるように変更すればいいです.