2017-03-20 1 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 multitimes를 호출해도 서버가 제대로 작동하지 않습니다.

+2

가능한 여러 개의 [Go에서 다중 응답. 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)에서 클라이언트는 두 번째 응답 헤더를받지 않습니다. – flyer

+0

@flyer : 물론 한 번 이상 두 번 이상 응답 할 수 없기 때문입니다. 서버가 코드의 문제점을 경고하여 수정할 수 있습니다. – JimB

+0

대단히 감사합니다. D – flyer

2

나쁜 결과는 실제 결과가 예상 한 것과 거의 다를 것입니다. 전화 번호가 WriteHeader(200)이고 전화 번호가 50 인 경우 전화 번호가 ResponseWriter 인 경우 WriteHeader(404)으로 전화하면 응답 코드는 무엇입니까? 404 또는 200?

WriteHeader는 후속 호출을 무시하고 200을 얻는 대신에 당신은 아마 예상대로 404 때, 당신은 단지 서버 로그를 살펴보고 당신이 무엇을 알 수 있도록 해당 메시지를 로그인하여 그것에 대해 알려줍니다. 그 메시지는 당신을 도울 것입니다.

관련 문제