HTTP는 stateless
하다고 했다. 이는 HTTP 요청 시, 각각의 요청들은 서로 관련이 없음을 의미하는 것이다. 그렇다면 이런 상태가 없는 프로토콜에서는 어떻게 사용자가 로그인 되었는지를 알 수 있을까?
바로 cookie와 sessions을 이용하면 알 수 있다.
client가 server에게 로그인을 요청하면, server가 client에게 로그인에 필요한 정보를 포함한 헤더를 보내준다. 이 헤더 안에는 여러가지 정보가 있지만, 그 중 로그인에 대한 정보는 Set-cookie
안에 있다. 이렇게되면 현재 브라우저 client에만 쿠키가 있다.
🙄 cookie??
: 브라우저에서 잠시 정보(데이터)를 보관하는, 저장하는 저장소
만약 헤더에 쿠키가 포함되어있으면, 브라우저는 자동으로 쿠키에 저장한다. 이렇게 쿠키를 저장하고 있다가 다음에 request를 요청할 때 헤더에 동일한 쿠키를 넣어서 서버에게 보낸다.
쿠키 외에도 server에서 client에게 정보를 보낼 때, cache-control
에 해당 정보를 어느 기간동안 보관해야할지(캐싱해야할지)를 명시해서 보낼 수 있다. 그럼 브라우저는 자동으로 브라우저 저장소에 해당 데이터를 저장해두고, 해당 기간 내에 client가 server에 동일한 요청을 할 경우 저장된 데이터를 그대로 활용하는 것이다.
client와 server는 HTTP Header를 이용해 request 또는 response로 부가적인 정보를 전송한다. 개발자도구를 켜보면, 이렇게 헤더에 대한 정보를 볼 수 있다.
위의 사진에서 보이는 것처럼 이름:값
의 형태로 이루어져있다.
헤더 안에는 표준적인 헤더 내용들(standard)이 있고, 우리가 직접 추가(custom)해서 넣을 수도 있다. 예전에 Custom을 쓸 때에는 x-auth
이런 방식을 썼었으나, 12년도부터는 domain.key
, domain-key
이런 식으로 쓰게끔 권고되어왔다. 바로 이렇게 말이다!
🙄 그럼 만들어쓰는 게 더 좋지 않겠어?
: 아니다. standard에 따라 브라우저가 동작하는 것이니, 만들어 쓰기보다는 표준화된 것을 쓰는 것이 더 좋다.
: 요청과 응답 메시지 모두에서 사용되지만, body에서 최종적으로 전송되는 데이터(contents자체)와는 관련이 없는 헤더이다.
Date
, Cache-Control
, Connection
: HTTP 요청에서 사용되지만, 메시지의 컨텐츠와는 관련이 없는 HTTP헤더. fetch될 리소스나 client 자체에 대한 정보를 포함하는 헤더이다.
(요청에 나타나는 모든 헤더가 요청 헤더인것은 아니다. Content-Length
헤더는 entity header이지만 종종 컨텍스트와 같은 요청 헤더라고 불리기도 한다.)
: 메시지의 컨텐츠와는 관련이 없으며, 위치 또는 서버 자체에 대한 정보(이름, 버전 등)처럼 응답에 대한 부가적인 정보를 갖는 헤더이다.
(응답에 나타나는 모든 헤더가 응답 헤더인것은 아니다. Content-Length
헤더는 entity header이지만 보통 컨텍스트에서 응답 헤더로 불린다.)
: content 길이나 MIME 타입처럼 Entity body에 대한 자세한 정보를 포함하는 헤더이다. Entiy 헤더가 요청이나 응답 헤더가 아님에도 불구하고, 종종 그렇게 불리기도 한다.
: 이러한 헤더는 반드시 메시지의 최종 수신자에게 전송되어야 한다. 중간 프록시는 반드시 종단 간 헤더를 수정되지 않은 상태로 재전송해야하며 캐시는 이를 반드시 저장해야한다.
: 이러한 헤더는 단일 전송-레벨 연결에서만 의미가 있고, 프록시에의해 재전송되거나 캐시되어선 안된다. 홉간 헤더는 Connection 일반 헤더를 사용해 설정될 수도 있다.
Authorization
Proxy-Authenticate (en-US)
Proxy-Authorization (en-US)
Age
Cache-Control
Clear-Site-Date (en-US)
Expires
Last-Modified
ETag
보다 덜 정확하나 계산이 좀 더 쉬울 때가 있다.ETag
If-Match (en-US)
If-None-Match (en-US)
If-Modified-Since
If-Unmodified-Since (en-US)
Connection
Accept
Accept-Charset
Accept-Encoding
Aeecpt-Language
Cookie
Set-Cookie
헤더와 함께 서버로부터 이전에 전송됐던 저장된 HTTP 쿠키를 포함한다.Set-Cookie
Access-Control-Allow-Origin
Origin
Content-Disposition
Content-Length
Content-Type
Content-Encoding
Forwarded
Location
From
Host
Referer
User-Agent
Allow
Server