관리 메뉴

기억하기 프로젝트

[웹 최적화] HTTP의 이해 본문

개발이야기/Web Programming

[웹 최적화] HTTP의 이해

sy89 2014. 9. 21. 16:10

HTTP : 브라우저와 서버가 인터넷상에서 서로 통신하는 방법, 또는 클라이언트와 서버간 요청과 응답으로 구성되는 프로토콜을 말한다.

브라우저는 지정된 URL로 HTTP요청을 보내고, 서버는 해당 URL에 해당되는 응답을 다시 돌려보내게 된다. 

 여기서 요청시에 타입이 존재하는데, GET, POST, HEAD...등의 타입이 있고, 대표적으로 GET요청이 가장 일반적이고 많이 사용된다.

GET타입의 요청은 헤더 안에 URL을 포함시키게 되고, HTTP응답에는 상태코드, 헤더, 본문(body)를 포함하게 된다.

 

*압축

 서버와 브라우저 둘 다 압축을 지원한다면, 이를 이용하여 응답크기를 줄일 수 있다.

브라우저는 Accept-Encoding: , 서버는 Content-Encoding 헤더를 통하여 압축 여부를 알려준다.

 

*조건부 GET요청

  브라우저의 캐시에는 해당 브라우저의 구성요소에 대한 복사본이 존재하는데, 이 구성요소가 유효하지 않을 경우 조건부 GET요청을 보낸다.

캐시안의 구성요소가 유효하다면, 브라우저는 캐시로부터 구성요소를 복사해서 사용하는데 이 때 응답속도가 빨라지고 사용자는 빠른 페이지 환경을 느낄 수 있게 된다.

 

구성요소의 유효성 검사는 최종 수정날짜로 판단하는데, 브라우저는 if-modified-since헤더를 통해 서버로 최종 수정날짜를 보내고, (이때, 브라우저는 서버에, '나에게 최종수정날짜가 ---인 리소스가 있는데, 이것을 사용해도 됩니까?' 하는 메시지를 보내는 것이라고 함) 구성요소가 보내온 날짜로부터 수정되지 않았다면, 서버는 "304 Not Modified" 라는 상태 코드를 반환하게 된다.

 

*만료기한

 조건부 GET요청과 304 응답코드로 브라우저는 더욱 빠른 페이지를 로드할 수 있게 도와주지만, 구성요소의 유효성을 반환하기 위해서는 여전히 서버/클라이언트간의 요청/응답이 필요하다.

 헤더 만료기한(Expires)은 이러한 작업을 생략할 수 있고, 브라우저는 캐시의 구성요소가 유효한지를 바로 알 수 있게 된다. 구성요소의 기한이 만료되지 않는동안 브라우저는 캐시되어있던 구성요소를 사용하고 HTTP요청을 피한다.

 

*Connection: Keep-Alive

 초기의 HTTP에는, HTTP요청이 있을 때 마다 새로운 소켓연결이 맺어졌었다. 이는 하나의 웹 페이지에서 같은 서버로의 요청을 여러번 하게 되므로 효율성 면에서 떨어진다. 

 지속성 있는 연결(persistant connection)은 이렇게 같은 서버에 여러개의 소켓연결을 맺는 비효율 문제를 해결하기 위해 (HTTP/1.0의 Keep-Alive로도 알려짐) 나온 것이다.

여기서

지속성 있는 연결 ; 하나의 연결 안에 여러개의 요청을 보내는 것.

 

HTTP/1.1에서 정의된 파이프라인 방식을 이용하면, 지속성 있는 연결보다 더 좋은 성능을 보여준다.

이는 응답의 기다림 없이 하나의 소켓연결을 이용해 여러 개의 요청을 보낼 수 있다.

(하지만 이 파이프라인 방식은 인터넷익스플로러 7.0이하 버전에서는 지원되지 않고, 파이어폭스2 버전부터는 이 기능이 기본적으로 꺼져있음) 

 

 

"웹 사이트 최적화 기법 - UI 개발자를 위한 필수 지침서, steve souders저 " 내용 요약

2013/09/01 17:45 작성-