Go 언어의 `http.Request` 구조체는 어떤 정보를 담고 있나요?
_____A: `http.Request`는 Go 표준 라이브러리 `net/http` 패키지에서 HTTP 요청을 표현하는 구조체입니다. 서버로 들어오는 클라이언트 요청 또는 클라이언트가 보내는 요청의 모든 정보를 담고 있습니다.
Q: `http.Request` 구조체는 어떤 종류의 정보를 포함하나요?
A: 주요 정보는 다음과 같습니다.
- 요청 메서드(Method): GET, POST, PUT 등 HTTP 메서드 문자열 (`Method string`)
- 요청 URL(URL): 요청된 리소스의 전체 URL 정보 (`URL *url.URL`)
- 프로토콜 버전(Proto, ProtoMajor, ProtoMinor)
- 헤더(Header): 요청 헤더들의 모음 (`Header Header`, `type Header map[string][]string`)
- 본문(Body): 요청 본문 데이터 (`Body io.ReadCloser`)
- 호스트(Host): 요청된 호스트명 (`Host string`)
- 클라이언트 정보(RemoteAddr): 클라이언트 IP와 포트 (`RemoteAddr string`)
- 쿠키(Cookies): 요청 쿠키정보(`Cookies() []*http.Cookie`)
- 폼 데이터와 쿼리 문자열: URL 쿼리 파라미터(`URL.Query()`), 폼 데이터(`ParseForm()`, `Form`, `PostForm`)
- 요청 컨텍스트(Context): 요청 전반과 관련된 컨텍스트(`Context() context.Context`)
- TLS 상태(TLS): HTTPS 요청일 경우 TLS 연결 정보 (`TLS *tls.ConnectionState`)
- 요청의 ContentLength, TransferEncoding 등 전송 관련 메타데이터
A: `req.Body` 필드를 통해 `io.ReadCloser` 인터페이스 형태로 접근하며, 요청 본문을 읽을 수 있습니다. 읽은 후에는 반드시 `Close()` 해야 합니다.
Q: 요청 헤더는 어떻게 확인하나요?
A: `req.Header` 필드에서 원하는 헤더 키로 조회할 수 있고, 여러 값이 배열로 관리됩니다. 예: `req.Header.Get("Content-Type")`
Q: 쿼리 파라미터와 폼 데이터는 어떻게 다루나요?
A:
- 쿼리 파라미터: `req.URL.Query()`로 `url.Values` 타입을 얻어 키-값을 쉽게 조회 가능
- 폼 데이터: `req.ParseForm()` 또는 `req.ParseMultipartForm()` 호출 후 `req.Form` 또는 `req.PostForm`을 통해 접근
Q: 쿠키 정보는 어떻게 가져오나요?
A: `req.Cookies()` 메서드를 사용하거나 `req.Cookie("name")`으로 특정 쿠키를 조회할 수 있습니다.
Q: `http.Request`의 용도는 무엇인가요?
A: HTTP 서버에서 클라이언트가 보낸 요청을 처리할 때 요청 관련 각종 정보를 보유하며, 핸들러에서 클라이언트 요청 분석, 파라미터 추출, 인증, 본문 처리 등에 사용됩니다.
Q: 추가로 참고할 만한 점이 있나요?
A: 네, `http.Request`는 불변성을 기본적으로 유지하려 노력하며 멀티쓰레드 환경에서 안전하게 사용할 수 있습니다. 다만, 본문은 스트림으로 제공되므로 다중 읽기 전용 처리가 필요합니다. 또한, 요청 컨텍스트(`Context()`)를 통해 타임아웃, 취소 신호 등 요청 생명 주기를 관리할 수 있습니다.
작성자:
최민혁 [비회원]
| 작성일자: 1년 전
2024-09-19 01:50:43
조회수: 147 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 147 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.