>백엔드 개발 >Golang >Go 미들웨어에서 충돌하는 서버 헤더를 어떻게 재정의할 수 있나요?

Go 미들웨어에서 충돌하는 서버 헤더를 어떻게 재정의할 수 있나요?

DDD
DDD원래의
2024-11-26 19:43:11158검색

How Can I Override Conflicting Server Headers in Go Middleware?

Go 미들웨어에서 서버 헤더 재정의

배경

Go에서는 미들웨어를 사용할 수 있습니다. HTTP 요청과 응답을 처리하고 수정합니다. 그러나 HTTP 헤더를 제어하기 위해 서버 미들웨어를 추가할 때 다른 핸들러도 서버 헤더를 설정하면 응답에 여러 서버 헤더가 존재하는 문제가 발생할 수 있습니다.

가능한 해결 방법

  • 사용자 정의 ResponseWriter 래퍼: 사용자 정의 ResponseWriter 래퍼를 정의할 수 있습니다. 모든 헤더가 작성되기 직전에 서버 헤더를 설정합니다. 이는 추가 간접 계층을 도입하지만 기존 서버 헤더를 효과적으로 재정의합니다.
type serverWriter struct {
    w           http.ResponseWriter
    name        string
    wroteHeader bool
}

func (s serverWriter) WriteHeader(code int) {
    if s.wroteHeader == false {
        s.w.Header().Set("Server", s.name)
        s.wroteHeader = true
    }
    s.w.WriteHeader(code)
}

func Server(h http.Handler, serverName string) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        sw := serverWriter{
            w:           w,
            name:        serverName,
            wroteHeader: false,
        }
        h.ServeHTTP(sw, r)
    })
}
  • 미들웨어 역순: 미들웨어의 순서를 역순으로 배치하여 서버 미들웨어는 서버에서 최종 결정을 내릴 수 있도록 마지막에 존재합니다. header.
  • 가장 내부 미들웨어: 또는 서버 미들웨어를 가장 내부 미들웨어로 만들어 외부 핸들러가 설정한 다른 헤더를 가로채고 재정의할 수 있도록 합니다.

추가 참고사항

  • 커스텀 ResponseWriter 래퍼 접근 방식은 새로운 유형을 도입하므로 약간 더 많은 코드 유지 관리가 필요합니다.
  • 서버 미들웨어를 가장 안쪽으로 바꾸거나 만들면 미들웨어 체인의 의도된 흐름이 바뀔 수 있습니다.
  • 선호되는 솔루션은 상황에 따라 다릅니다. 귀하의 신청서의 특정 요구 사항과 복잡성에 대해 알아보세요.

위 내용은 Go 미들웨어에서 충돌하는 서버 헤더를 어떻게 재정의할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.