Search
Duplicate
📒

[Network Study] xx.x HTTP 헤더 전송 방식, 콘텐츠 협상

상태
완료
수업
Network Study
주제
HTTP
4 more properties
참고

HTTP 헤더 - 전송방식

HTTP 메시지 - 단순전송

NOTE
Content-Length 설정 ( 데이터 전체를 한 번에 보낼 떄 사용 )

HTTP 메시지 - 압축전송

NOTE
Conten-Encoding 설정 ( 전송 데이터를 압축해서 보냄 → 압축방식은 다양 )

HTTP 메시지 - 분할전송

NOTE
Transfer-Encoding:chunked 설정 대용량 데이터를 클라이언트에 보낼 때, 요청이 모두 처리되기 전까지 총 크기를 알 수 없을 때 사용함

HTTP 메시지 - 범위전송

NOTE
Range 설정해서 요청 → Content-Range 설정해서 응답 어떠한 이유로 중간에 재요청해야할 때, 범위를 지정하여 사용
서버로부터 데이터를 절반 정도 받은 상태에서 끊겼을 때 처음부터 다시 받을 필요 x 이후부분부터 받음

콘텐츠 협상(Contents Negotiation)

NOTE
클라이언트가 선호하는 표현(Represention) 요청!
협상 헤더는 요청시에만 사용한다!
클라이언트 별로 선호하는 표현을 서버에서 처리해서 줄 수 있음

Accept-Language(언어 지원)

NOTE
Accept-Language 적용전 ⇒ 나는 한국인이야 영어 몰라..
Accept-Language 적용후 ⇒ 응애 나 한국인 한국어 좋아
Accept-Language: ko(한국어 선호)로 접속 요청을 보내면, 서버는 기본 영어 외에 한국어를 지원하므로 한국어(ko)로 브라우저에 응답
Accept-Language 요청에 맞는 언어가 없음 → 하지만 독일어아닌 영어 원함

협상과 우선순위

NOTE
<Quality Values(q)> 클수록 높은 우선순위 (값의 범위 0~1, 생략하면 1)
한국어 : 0.9, 영어 : 0.8
해당 서버가 한국어를 지원하지 않으므로 2순위인 영어(en)으로 브라우저에 응답
구체적인 것이 더 우선순위가 높다 우선순위 text/plain;format=flowed > text/plain > text/* > /
클라이언트에서 요청한 text/html;level의 우선순위가 가장 높고 서버가 해당 미디어 타입을 지원하므로 text/html;level 미디어 타입으로 응답

질문 정리

Q. 범위 전송에서 클라이언트가 어느 지점부터 다시 데이터를 이어받아야하는지 어떻게 알 수 있나요?

예를 들어, 파일은 다운받을 때는 2가지 과정을 거친다
임시 저장소에 저장한 이후 다운로드가 완료되면
최종 디렉토리로 옮긴다(사용자가 다운받기로 지정한 경로)

Q. 브라우저에서 Accept-Language: ko 로 서버에 요청을 하면, 서버에서 우선순위에 따라 어떠한 언어로 응답을 해야한다. 이러한 로직을 개발자가 작성해야하나요?

대부분의 웹 프레임워크나 웹 기술들이 해당 기능을 우선순위별로 뽑을 수 있게 해준다
자바는 HttpServletRequest 객체의 request.getLocals()를 호출하면 우선순위대로 반환해준다.

Q. Accept-Language에 값을 넣어 클라이언트가 요청을 보내 서버가 우선순위를 고려하여 어떠한 언어로 응답을 보낸다. 이 과정에서 여러 언어로 작성된 HTML을 응답해주는건가요?

HTML 뼈대는 그대로 두고 텍스트에 해당하는 부분만 Accept-Language 에 따라 변경해준다.
스프링의 경우 헤더의 Accept-Language 값을 읽어 사용자에게 적절한 언어로 제공한다.