2017-03-20 7 views
0

"http:multiple response.WriteHeader calls"の例外が見つかりましたが、私のサーバはうまく動作します。この例外はサーバーのパニックや奇妙な動作を引き起こしません。"http:multiple response.WriteHeader calls"の悪影響は何ですか?

私は多くを検索しましたが、この問題を解決する方法しか見つかりませんでした。例外の悪影響を記述する文書はありません。誰かが私がなぜ "http:multiple response.WriteHeader calls"が例外で、それが引き起こす悪影響が何であるかを知る手助けをすることができますか?前もって感謝します。

私はソースコードhereを読んだ

UPDATE:

enter image description here

WriteHeader multitimesを呼び出し、それだけでログを出力して、何もしません。 WriteHeaderを複数回呼び出しても、サーバーはうまく動作しません。

+2

[複数のresponse.WriteHeader呼び出しの可能な複製](http://stackoverflow.com/questions/26961764/multiple-response-writeheader-calls-in-go) – Zoyd

+0

@Zoyd私の質問はそれとは異なります。 "http:multiple response.WriteHeader calls"の悪影響を知りたいのですが、その理由は、なぜWriteHeaderを呼び出した後に再び 'WriteHeader'を呼び出すことが不可能であるかを説明することです。 – flyer

+0

答えは、WriteHeaderを複数回呼び出すことが意味をなさないことを示しています。したがって、それが起こった場合、それは必然的に何らかの間違いまたは意図しない振る舞いを指し示します。 – Zoyd

答えて

3

レスポンスヘッダーは、クライアントに送信される前に一度しか書き込むことができません。コードがクライアントに送信された後にレスポンスヘッダーを書き込もうとしているため、クライアントは送信しようとしている最終的な応答を見ません。

クライアントが後で改訂した不正な応答を受け取っているバグ、または正しい応答ヘッダーが書き込まれた後に間違ったコードを実行しているバグがあります。いずれにせよ、それはバグです。

+0

[ソースコード](https://golang.org/src/net/http/server.go#L1052)から、クライアントは2番目の応答ヘッダーを取得しません。 – flyer

+0

@flyer:もちろん、2回以上は本当に反応できないからです。サーバーはコードの問題について警告していますので、修正することができます。 – JimB

+0

ありがとうございます:D – flyer

2

悪い影響は、実際の結果が期待しているものとほとんど異なる可能性があることです。 10行目にWriteHeader(200)、それ以降に50行目に電話すると、同じResponseWriterWriteHeader(404)となり、応答コードはどうなるでしょうか? 404、または200

WriteHeaderは、後続の呼び出しを無視し、あなたが200代わりの404を取得しているとき、あなたはおそらく期待どおり、あなただけのサーバーのログを見て、あなたがアップ何を知っているように、そのメッセージをロギングすることで、それについて説明します。メッセージはあなたを助けるためのものです。

関連する問題