나나나
[네트워크]HTTP 헤더 본문
HTTP란?
HTML문서와 같은 리소스를 가져올 수 있도록 해주는 프로토콜이다. 클라이언트-서버 프로토콜로 수신자 측에 의해 요청이 초기화된다.
클라이언트와 서버는 (데이터 스트림과 다르게) 개별적인 메시지 교환을 통해 통신한다.
HTTP 공통 헤더
HTTP 헤더 속 일반 헤더(General Header)에 해당하는 항목
요청과 응답 모두에서 사용 가능한 기본적이고 일반적인 헤더 항목
- Date
- HTTP 메시지를 생성한 일시(RFC 1123에서 규정)
- Connection
- 클라이언트와 서버 간 연결에 대한 옵션 설정
- 보통 http/1.1을 사용하는데 http/2에서는 아예 사라진 항목
- Connection: close
- 현재 http 메시지 직후에 TCP 접속을 끊는다는 것을 알린다.
- Connection: Keep-Alive
- 현재 TCP 커넥션을 유지한다.
- Connection: close
- Cache-Control
- 캐시 제어와 관련된 매우 중요한 헤더
- no-store : 캐시를 저장하지 않음
- no-cache : 모든 캐시를 쓰기 전에 서버에 해당 캐시를 사용해도 되는지 확인
- must-revalidate : 만료된 캐시만 서버에 확인
- public : 공유 캐시에 저장 가능
- private : 브라우저같은 특정 사용자 환경에만 저장
- max-age : 캐시의 유효시간을 명시
- 캐시 제어와 관련된 매우 중요한 헤더
- Pragma
- 캐시 제어(no-cache) HTTP/1.0에서 사용했으나 HTTP/1.1에서는 상단의 캐시컨트롤이 쓰인다.
- Content-Length
- 요청과 응답 메시지의 본문 크기를 바이트 단위로 표시한다.
- Content-Length: 52
- Content-Type
- 컨텐츠의 타입(MIME)과 문자열 인코딩(UTF-8 등)등을 명시한다.
- 예시 : Content-Type: text/html; charset=utf-8
- www-url-form-encoded
- multipart/form-data
- application/json
- Content-Language
- 사용자의 언어를 뜻한다. 요청이나 응답이 무슨 언어인지는 상관 없다. 페이지언어가 한국어라면 ko-KR이다.
- Content-Encoding
- 컨텐츠가 압축된 방식으로 응답 컨텐츠를 알고리즘을 이용해 압축해서 보내면, 브라우저가 알아서 해제해서 사용한다. 본문의 리소스에 대한 압축 방식이다.
- Content-Encoding: gzip, deflate
- Upgrade
- 프로토콜 변경시에 사용한다 ex) HTTP/2.0
HTTP 요청 헤더
Request Header의 항목
- Host
- 서버의 도메인 네임으로 요청하는 호스트에 대한 호스트명 및 포트번호로 구성된다.
- HTTP/1.1이후부터 필수 항목이 되었다.이에 따라 동일 IP주소를 갖는 단일 서버에 여러 사이트를 구축할 수 있다.
- Host 필드에 도메인명 및 호스트명 모두를 포함한 전체 URI(FQDN)지정이 필요하다.
- host: naver.com
- User-Agent
- 사용자가 어떤 클라이언트 소프트웨어(브라우저, 운영체제의 명칭 및 버전 정보)를 통해 요청을 보냈는지 알고 있다.
- From
- 클라이언트 사용자의 메일주소
- 주로 검색엔진 웹 로봇의 연락처 메일 주소를 나타낸다. 때로는, 이 연락처 메일 주소를 User-Agent 항목에 두는 경우도 있다.
- Cookie
- 서버에 의해 Set-Cookie로 클라이언트에게 설정된 쿠키 정보이다. 해당 쿠키의 정보를 이름-값 쌍으로 웹 서버에 전송한다.
- Referer
- 바로 직전에 머물렀던 웹 링크 주소
- If-Modified-Since
- 페이지가 수정되었을 경우 최신 버전의 페이지를 요청하기 위한 필드이다. 만일 요청한 파일이 필드에 지정된 시간 이후로 변경되지 않으면, 서버로부터 데이터를 전송받지 않는다.
- Authorization
- 인증 토큰(JWT/Bearer 토큰)을 서버로 보낼 때 사용하는 헤더이다. 토큰의 종류와 실제 토큰 문자를 전송한다.
- Origin
- 서버로 post 요청을 보낼 때, 요청이 어느 주소에서 시작되었는지 나타낸다. 여기서 요청을 보낸 주소와 받는 주소가 다르다면 CORS 에러가 발생한다.
- 응답 헤더의 Access-Control-Allow-Origin과 관련있다.
- HTTP 메시지 Body의 속성 또는 내용 협상용 항목
- Accept
- 클라이언트가 허용할 수 있는 파일형식을 명시한다. 자신이 원하는 미디어 타입 및 우선순위를 알린다.
- 텍스트(text/html,text/plain,…),이미지(image/jpeg,…) 등
- Ex) Accept: / 어떤 미디어 타입도 가능하다.
- Ex) Accept: image/* 모든 이미지 유형이 가능하다.
- Accept-Charset
- 클라이언트 자신이 원하는 문자 집합
- Accept-Encoding
- 클라이언트 자신이 원하는 문자 인코딩 방식
- Accept-Language
- 클라이언트 자신이 원하는 가능한 언어
- 각각이 HTTP Entity Header 항목 중에 Content-Type, Content-Type charset-xxx, Content-Encoding, Content-Language과 일대일로 대응된다.
- Accept
HTTP 응답 헤더
HTTP 응답 헤더
Response Header의 항목
- Server
- 서버 소프트웨어의 정보
- Accept-Range
- Set-Cookie
- 서버측에서 클라이언트에게 세션 쿠키 정보를 설정한다.
- Expires
- 리소스가 지정된 일시까지 캐시로써 유효함을 나타낸다. 즉, 응답 컨텐츠가 언제 만료되는지를 나타낸다.
- Cache-Control과 별개로 응답에 Expires라는 헤더를 줄 수 있다.
- 단, Cache-Control의 max-age가 있는 경우 이 헤더는 무시
- Age
- 캐시 응답, max-age 시간 내에서 얼마나 흘렀는지 초 단위로 알려준다.
- Etag
- HTTP 컨텐츠가 바뀌었는지를 검사할 수 있는 태그
- Proxy-authenticate
- 요청한 서버가 프록시 서버인 경우 유저인증을 위한 값을 명시한다.
- Allow
- 해당 엔티티에 대해 서버 측에서 지원 가능한 HTTP 메소드의 리스트를 나타낸다. 그 외의 요청은 405 Method Not Allowed를 반환한다.
- 때로는 HTTP 메소드인 OPTIONS에 대한 응답용 항목으로 사용된다.
- 참고) OPTIONS : 웹서버에서 제공 가능한 HTTP 메소드에 대한 질의
- Access-Control-Allow-Origin
- 요청을 보내는 프론트 주소와 받는 백엔드 주소가 다르면 CORS 에러가 발생한다. 서버에서 이 항목에 프론트 주소를 적어주어야 에러가 발생하지 않는다.
- 프로토콜, 서브도메인, 도메인, 포트 중 하나라도 다르면 에러가 발생한다.
- 모든 주소에 CORS 요청을 허용하면 보안이 취약해진다.
- 관련 헤더
- Access-Control-Request-Method : 실제로 보내려는 메서드
- Access-Control-Request-Headers : 실제로 보내려는 헤더
- Access-Control-Allow-Methods : 서버가 허용하는 메서드
- Access-Control-Allow-Headers : 서버가 허용하는 헤더
- Location
- 300번대 응답이나 201 Created 응답일 때 볼 수 있는 헤더로 서버의 응답이 다른 곳에 있다고 알려주면서 해당 위치(URI)를 지정한다.
- Content-Dsipositioninline
- 응답 본문을 브라우저가 어떻게 표시해야 할지 알려준다.
- inline: 웹페이지 화면에 표시
- attachment: 다운로드
- 응답 본문을 브라우저가 어떻게 표시해야 할지 알려준다.
'CS' 카테고리의 다른 글
[네트워크]HTTPS / 공개키와 대칭키 (0) | 2021.04.11 |
---|---|
[네트워크]HTTP 메소드와 멱등성 (0) | 2021.04.11 |
[네트워크] TCP (0) | 2021.04.11 |
[네트워크] TCP와 UDP (0) | 2021.04.11 |
[네트워크] OSI 7계층 (0) | 2021.04.11 |