
이전에 인턴 중 이미지 캐싱 관련해서 네트워크 헤더를 계속해서 들여본 적이 있다. (AWS S3에서 오는지, Cloud Front에서 전달되는지, 아니면 클라이언트 상의 캐싱에서 오는 것인지)
이때, 생각보다 HTTP헤더에 포함되어 전달되어오는 정보들이 꽤 중요하고 다양한 정보를 포함시킨다는 것을 깨달았고, 그렇기에 이에 대해서 한번 제대로 정리해보자고 한다.
HTTP 요청과 응답에서 추가적인 정보를 전달하는 역할을 한다.Content-Type, Accept, Authorization, Cache-Control, ETag 등이 있다.Key-value로 저장된다. 그렇기에 :로 key와 value가 구분이 된다.
Cache-Control: no-cache
no-cache: 캐시된 리소스를 사용하기 전에 원 서버에 유효성을 확인하도록 동작한다.
no-store: 요청 및 응답 데이터를 저장하지 않는다.
public: 모든 캐시에서 저장할 수 있음을 뜻한다.
private: 특정 사용자에 대한 응답을 캐시한다. (브라우저 같은 특정 사용자 환경에만 저장)
주로 응답 헤더에서 사용이 되지만, "클라이언트 - 중개 서버 - 서버"의 구조에서 원 서버에서 데이터를 사용하려고 한다면, 이 헤더를 추가해야한다.
Connection: keep-alive
DAte: Tue, 15 Nov 1994 08:12:31 GMT
Accept: text/html
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Cookie: name=value; name2=value2
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3
Get 요청의 ETag가 12345였다가, 다음 Get 요청에서 응답이 바뀌면 ETag는 12345가 아닌 다른 값이 만들어진다.ETag: "686897696a7c876b7e"
Location: http://www.example.com/newpage.html
Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1
Access-Control-Allow-Origin: https://www.example.com
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Credentials: true
Content-Type: text/html; charset=UTF-8
Content-Length는 필요한 정보이다.Content-Length: 348
Content-Location: /index.htm
처음 개발을 할 때에는 사실, HTTP에 대해서도 잘 모르기도 했고 응답이 오는 각 헤더 데이터에 대해서 별 신경을 안쓰고 있었다. 하지만 개발을 하면 할 수록 HTTP 헤더가 중요한 사실을 느끼고 있으며, 헤더를 통해서 통신이 원할해짐은 물론 헤더를 잘 이용한다면 어플리케이션의 성능과 보안을 개선하는데에 큰 도움이 될 것이라고 생각이 든다.