2022. 5. 25. 16:36ㆍ개발공부/HTTP
본 글은 인프런 김영한님 강의를 정리한 글입니다. 자세한 강의내용은 강의를 통해 들어보시길 추천드립니다.
HTTP 전송에 필요한 모든 부가정보가 담긴 메시지입니다.
표현(Representation)협상(Content-Negotiation)전송일반정보특별한 정보인증쿠키
표현
DB의 바이너리 타입이나 바이트 코드의 파일형식 등을 HTTP로 통신하려면 표현 타입을 지정해줘야 합니다. 주로 JSON을 사용합니다. 이렇게 표현형식, 압축(인코딩), 언어, 길이로 이루어진 헤더의 부분을 표현이라고 합니다.
Content-Type: 미디어 타입을 말합니다.(text/HTML, JSON, png...)Content-Encoding: 표현 데이터를 압축할 경우에 사용합니다.(gzip...)Content-Language: 기반이 되는 언어를 말합니다.(ko, ko-KR, en, en-US...)Content-Length: 메시지 데이터의 길이를 나타내며, 단위는 byte 입니다. 분산전송(Transfer-Encoding)에선 사용할 수 없습니다.
협상
클라이언트가 선호하는 표현을 요청하는 부분입니다. 서버가 요청을 모두 실행시켜준다는 것은 아니지만, 협상을 통해 요청을 맞춰주는 노력을 할 수 있습니다.
Accepted Language: 원하는 언어를 전달할 수 있으며, 우선순위도 정해줄 수 있습니다.ko:0.9;en:0.8...
전송
단순전송: 일반적인 전송을 말합니다.압축전송: gzip으로 압축해서 전송하는 것을 말합니다.분할전송:Transfer-Encoding에 명시되어 전달됩니다. chunck들로 쪼개져 전송되기 때문에 content-length가 사용불가 합니다.범위전송: 데이터가 클 때, 범위를 나눠 전송하는 방식입니다.
일반정보
헤더에 담기는 일반정보입니다.
referer: 이전 페이지 요청에 대한 URI입니다. 이는 유입경로 분석 시에도 사용될 수 있습니다.user-agent: Application에 대한 정보를 알 수 있어서 통계정보로 사용할 수 있습니다.server: 중개하는 서버가 아닌 Origin 서버에 대한 내용을 응답으로부터 전달되어집니다.예시) Server: Apache/2.4.1 (Unix)
특별한 정보
Host: 필수값이며 하나의 서버(IP)가 여러 도메인을 가지고 있을 때, 호스트를 통해 연결된 도메인을 지정해줄 수 있습니다.Location: 앞서 정리한 HTTP 상태코드3xx에서 리다이렉트가 필요할 때 서버에서 응답 시 Location 헤더에 URI를 담아서 준다했는데 그 부분입니다.Allow: 허용 가능한 HTTP 메서드를 반환해줍니다.Retry-After: 서비스가 언제까지 불능 상태인지 표기해줍니다.
인증
인증방식(JWT, OAuth...)에 따라 형식은 다르지만, 헤더값 Authorization: Basic xxxxxx과 같이 전달됩니다. 만약 401 UnAuthorized 오류 상태코드가 떴다면 응답 시 헤더에 WWW-Authentication을 함께 리턴해야합니다.
쿠키
로그인 하는 경우, 유지해야하는 정보가 생기는데 그때 쿠키를 사용하면 HTTP 무상태(stateless)를 보완해줄 수 있습니다. 서버에서 set-cookie에 쿠키를 담아 보내면 클라이언트에선 쿠키 저장소에 저장해 필요할 때마다 꺼내어 사용해줄 수 있습니다.
set-cookie: 서버에서 주는 sessionid, path, secure 등으로 구성됩니다.
쿠키는 sessionKey나 OAuth의 경우 인증토큰을 쿠키로 서버에 요청할 때마다 서버가 처리를 해야하는데, 이를 보완하기 위해 웹 스토리지(LocalStorage)에 담아놓고 필요할 때마다 꺼내어 쓸 수 있는 방법이 있습니다.
하지만 쿠키는 안전하지 않기 때문에 민감정보(주민등록번호, 전화번호)는 사용하지 않아야합니다.
도메인 지정: 쿠키가 어떤 도메인에 속하는지 설정을 가능하게 합니다.경로: 경로를 포함한 하위 경로 패키지는 쿠기에 접근할 수 있습니다.보안: secure는 HTTPS만 쿠키 전송이 가능하게 막을 수 있습니다.HTTPOnly: XSS(Cross-Site-Script) 공격을 방지하기 위해 쿠키가 HTTP에만 사용가능 하고 스크립트(Javascript) 내에선 사용이 불가하도록 합니다.SameSite: 요청도메인, 설정된 도메인이 같을 때만 쿠기 전송이 가능하도록 해줍니다. XSRF(Cross-Site-Request-Forgery)를 방지할 수 있습니다.
참조: 인프런 김영한님 HTTP 강의
'개발공부 > HTTP' 카테고리의 다른 글
| [HTTP강의] HTTP 캐시 (0) | 2022.05.26 |
|---|---|
| [HTTP강의] HTTP 상태코드 (0) | 2022.05.24 |
| [HTTP강의] HTTP 메서드 (0) | 2022.05.23 |
| [HTTP강의] HTTP 특징 (0) | 2022.05.23 |
| [HTTP강의] TCP/UDP와 URI (0) | 2022.04.21 |