출처 : https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/
*header-field = field-name: fieldvalue
field-name은 대소문자 구분 없다.
*http header의 용도
HTTP 전송에 필요한 모든 부가정도(메세지 바디 내용, 바디 크기, 압축, 인증, 서버 정보, 캐시 등등..)
현재는 표현(Representation)이라는 개념을 사용한다.
Representation = representation Metadata + Representation Data
표현 = 표현 메타데이터 + 표현 데이터
HTTP/1.1 200 OK
//표현 헤더
Content-Type:text/html;charset=UTF-8
Content-Length:3423
//표현 데이터
<html>
<body>...</body>
</html>
메세지 본문을 통해서 표현 데이터를 전달하고 있다.
메세지 본문 = payload(페이로드)라 부른다.
*표현은 요청이나 응답에서 전달할 실제 데이터
*표현 헤더는 표현 데이터를 해석할 수 있는 정보 제공(데이터 유형, 길이, 압축 정보...)
- Content-Type : 표현 데이터의 형식 설명
미디어 타입, 문자 인코딩
ex) Content-type: text/html;charset = utf-8;
application/json;
image/png; - Content-Encoding : 표현 데이터 인코딩
표현 데이터를 압축하기 위해 사용
데이터를 전달하는 곳에서 압축한 후 인코딩 헤더 추가
ex) Content-Encoding : gzip; - Content-Language : 표현 데이터의 자연 언어
ex)Content-Language: en - Content-Length: 표현 데이터의 길이
바이트 단위.
전송 코딩(Transfer-Encoding)을 사용하면 Content-Length를 사용하면 안됨.
(tmi. 전송 코딩의 경우 리소스 자체가 아닌 다중 노드간의 연결이므로 Content-Length를 사용해선 안됨)
*협상(Contents Negotiation)
클라이언트가 선호하는 표현 요청
- Accept : 클라이언트가 선호하는 미디어 타입 전달
- Accept-Charset : 클라이언트가 선호하는 문자 인코딩
- Accept-Encoding : 클라이언트가 선호하는 압축 인코딩
- Accept-Language : 클라이언트가 선호하는 자연 언어
* 협상과 우선순위(Quality Values (q))
0~1. 클수록 우선순위 높다. 생략하면 1.
GET/event
Accept-Langauge:ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
우선순위 : ko-KR;q=1 -> ko;q=0.9 -> en-US;q=0.8 -> en;q=0.7
구체적인 것이 우선한다.
GET/event
Accept:text/*, text/plain, text/plain;format=flowed, */*
우선순위 : 1. text/plain;format=flowed;
2. text/plain
3.text/*
4.*/*
구체적인 것을 기준으로 미디어 타입을 맞춘다.
*전송 방식 설명
- 단순 전송(Content-Length)
- 압축 전송(Content-Encoding)
- 분할 전송(Transfer-Encoding)
- 범위 전송( Range, Content-Range)
*Referer : 이전 웹페이지 주소
현재 요청된 페이지의 이전 웹 페이지 주소
Referer를 사용해서 유입 경로 분석 가능.
*Host : 요청한 호스트 정보 (도메인)
요청에서 사용, 필수!
하나의 서버가 여러 도메인을 처리해야할 때 또는 하나의 IP 주소에 여러 도메인이 적용되어 있을 때
*Location : 페이지 리다이렉션
웹 브라우저는 3XX 응답(리다이렉션)결과에 location헤더가 있으면, Location 위치로 자동 이동.
*Retry-After : 유저 에이전트가 다음 요청을 하기까지 기다려야하는 시간
503(Service Unavailable) 코드에서 사용.
*인증
- Authorization : 클라이언트 인증 정보를 서버에 전달
Authorization : Basic xxxxxxxxxxx - WWW-Authenticate : 리소스 접근시 필요한 인증 방법 정의
리소스 접근시 필요한 인증 방법 정의
*쿠키
- Set-Cookie : 서버에서 클라이언트로 쿠키 전달(응답)
- Cookie : 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청시 서버로 전달
이해)
HTTP는 무상태(Stateless) 이기 때문에, 요청과 응답을 주고 받으면 연결을 끊으므로 전의 내용을 기억하지 못한다.
그에 대한 대안으로 모든 요청에 사용자 정보를 포함해서 보내는 것도 대안이 될 수 있겠지만,
이는 보안 등의 문제가 생김.
이를 해결하기 위해 쿠키가 등장.
쿠키 정보는 항상 서버에 전송된다.
그렇다보니 네트워크 트래픽을 추가 유발하므로, 최소한의 정보만 사용하는 것이 좋다.
서버에 전송하지 않고, 웹 브라우저 내부에 데이터를 저장하고 싶다면 웹 스토리지(localStorage)를 사용하면 된다.
set-cookie: sessionId=abcde1234; expires=Sat, 26-Dec-2020 00:00:00 GMT; path=/; domain=.google.com; Secure
생명주기) Expires, max-age
Set-Cookie : expires = Sat, 26-Dec-2020 .... 만료일이 되면 쿠키 삭제
Set-Cookie : max-age= 3600(초) 0이나 음수가 되면 쿠키 삭제
세션 쿠키 : 만료 날짜를 생략하면 브라우저 종료시까지만 유지(ex. 로그인)
영속 쿠키 : 만료 날짜를 입력하면 해당 날짜까지 유지
도메인)
ex) domain = example.org
명시 : 명시한 문서 기준 도메인 + 서브 도메인 포함
domain=example.org를 지정해서 쿠키를 생성할 경우 example.org는 물론이고 하위인 dev.example.org도 쿠키접근
생략: 현재 문서 기준 도메인만 적용
example.org에서 쿠키를 생성하고 domain 지정을 생략하면
example.org 에서만 쿠키 접근가능.
경로)
ex) path = /home
이 경로를 포함한 하위 경로 페이지만 쿠키 접근
일반적으로 path=/ 루트로 지정.
보안)
*Secure
Secure를 적용하면 https에만 전송
*HttpOnly
자바스크립트에서 접근 불가. 오직 Http 전송에만 사용
*SameSite
요청 도메인과 쿠키에 설정된 도메인이 같은 경우만 쿠키 전송
'스프링 강의 필기 > HTTP 웹 지식 정리' 카테고리의 다른 글
8) HTTP 헤더2 - 캐시와 조건부 요청 (0) | 2022.07.20 |
---|---|
6) HTTP 상태코드 (0) | 2022.07.20 |
5) HTTP 메서드 활용 (0) | 2022.07.19 |
4) HTTP 메소드 (0) | 2022.07.16 |
3) HTTP 기본 (0) | 2022.07.16 |