HOONY_612 2021. 7. 16. 21:25
반응형

이번 장을 마지막으로 HTTP포스팅을 마치겠다. 마지막은 헤더부분에 대하여 알아보자.

헤더 부분에는 각종 부가적인 정보들이 들어간다. HTTP통신의 부가적인 정보들이 들어가있다.

주요 내용으로는 Content, Date, Connection, Cache-Control, Pragma, Trailer등이 있다.

중요한 내용을 하나씩 살펴보자.

 

1. Content(요청, 응답 둘 다 사용)

Content-Type : 표현 데이터의 형식(application/json, image/png)

Content-Encoding : 표현 데이터의 압축방식(gzip, deflate)

Content-Language : 표현 데이터의 자연언어(ko, en, en-US)

Content-Length : 표현 데이터의 길이(바이트 단위)

 

2. Accept(요청만 사용)

Accept : 클라이언트가 선호하는 미디어 타입 전달

Accept-Charset : 클라이언트가 선호하는 문자 인코딩

Accept-Encoding : 클라이언트가 선호하는 압축 인코딩

Accept-Language : 클라이언트가 선호하는 자연 언어

 

아래의 그림과 같이 원하는 언어를 서버로 보낸다. 서버가 만약 ko언어를 지원하지 않으면 우선순위를 정해서 보낸 다른 문자로 데이터를 준다.

3. Referer

이전 웹 페이지 주소.

현재 요청 된 페이지의 이전 웹 페이지 주소.

 

4. User-Agent

클라이언트의 애플리케이션 정보(웹 브라우저 정보).

 

5. Server

요청을 처리하는 ORIGINT서버의 소프트웨어 정보.

 

6. Host(요청사용)

요청한 호스트의 정보

 

7. Retry-After

유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간

 

 

인증

 

1. Authorization : 클라이언트 인증 정보를 서버에 전달

2. WWW-Authenticate : 리소스 접근 시 필요한 정보 인증 방법

 

 

쿠키

 

- 쿠키의 배경

클라이언트가 POST(/login user:홍길동)을 서버로 보내고 이 상태를 계속 유지하고 싶은데 어떻게 할까?

요청마다 정보를 보내는 것은 보안 및 개발이 힘들어짐. 그래서 클라이언트에 저장소 쿠키를 만듬.

 

- 쿠키의 사용

아래의 그림과 같이 서버에서 "set-cookie"를 이용하여 user를 쿠키 디렉토리에 저장한다.

그리고 새로운 페이지를 요청 할 경우 클라이언트는 쿠키를 조회하여 서버에게 보낸다.

- 쿠키의 내용

예) set-cookie: sessionId=abcde1234; expires=Sat, 26-Dec-2020 00:00:00 GMT; path=/; domain=.google.com; Secure

 

expires, max-age(쿠키의 생명주기), domain(쿠키 접근 도메인), Path(쿠키 접근 경로범위), Secure(쿠키 보안)

 

 

 

캐시

 

캐시는 서버에서 받는 용량이 큰 파일이나 이미지를 저장해놓는 공간이다.

이렇게 작동하고 60초 후면 어떻게 될까? 그러면 캐시에 생명주기가 다하게 된다. 이 때 효율적으로 사용 할 수 있는 방법이 검증헤더와 조건부 헤더이다.

 

그 전에 캐시쿠키는 어떻게 다른걸까? 둘 다 저장하는 건 똑같다.

쿠키는 용량이 작은 파일, 정보 등을 저장한다. 만료 기간이 다 되면 자동 삭제된다.

그러나 캐시는 용량이 큰 이미지, 파일 등을 저장한다. 만료 기간이 다 되도 재사용이 가능하다.

 

캐시에서 만료 된 것을 어떻게 가능하게 할까?

만료 후 다시 서버에 요청 할 경우 헤더에 캐시에 저장 되있던 Last-modified필드를 추가해서 요청하고 서버에서 검증하면 된다. 만약 변경되지 않았다면 304(Not Modified) 상태코드를 보내준다. 그렇게 다시 갱신된다.

 

 

 

두 번째 방법으로는 검증 헤더와 조건부 요청을 섞어서 요청한다.

If-Modified-Since 를 사용하여 수정 되었으면 200 OK와 파일을 보내고 아니면 304응답과 헤더부만 보낸다.

 

그러나 이러한 방법들은 날짜 기반이기 때문에 데이터가 같아도 시간만 다르면 다시 파일을 보내야한다.

이런 경우는 어떻게 할까?

바로 Entity-Tag를 이용한다. 캐시용 데이터에 고유한 이름을 붙인다. 데이터가 변경되면 엔티티 태그도 바뀐다.

그래서 단순하게 헤더 부분에 "aaaaaa"태그만 보내고 같은지 확인한다.

 

따라서 정리를 해보자면

 

1. 검증 헤더(Validator)

E-Tag, Last-Modified

 

2. 조건부 헤더

If-Match, If-None-Match, If-Modifed-Since.....

 

 

이렇게 HTTP의 헤더를 이용하여 클라이언트와 서버가 동작을 한다는 것을 알아봤다.

어떻게 보면 우리가 대화하듯이 이 둘도 HTTP통신으로 대화하는 느낌이 들었던 공부였다. HTTP에 대해서 깊이 알지는 못하지만 알아야 되는 필수 정보들은 어느정도 익숙해졌다. 컴퓨터는 알면 알수록 재밌고 신기한 녀석이다.

반응형