HTTP 란?



HTTP는 HyperText Transfer Protocol의 약자로, www(World Wide Web)에서 쓰이는 핵심 통신 프로토콜이다.


거의 모든 웹 애플리케이션에서 사용되고 있으며, 메시지 기반 모델로서 클라이언트가 요청 메시지(Request)를 보내면 서버에서 응답 메시지(Response)를 보내는 형태로 이루어져 있다.




즉, 사용자가 웹 페이지의 링크를 클릭했을 때 브라우저(클라이언트)는 HTTP의 형태로 메시지를 작성하여 웹 서버에 전송한다.


웹 서버에서는 받은 메시지에 대하여 HTTP의 응답 형태로 메시지를 작성 해 브라우저에 보내면, 브라우저는 이를 해석 해 화면에 보여주게 된다.



HTTP 구조


HTTP는 Header와 빈 공백, Body로 나누어 지며, Header에는 주소 정보 등이, Body에는 메시지 정보가 포함된다.


아래에서 HTTP Request와 HTTP Response에 대하여 자세하게 설명한다.


1. HTTP Request



위의 사진은 현재 블로그(4rgos.tistory.com)로 접속을 요청할 때의 HTTP Header이다.


한줄 씩 설명하면 다음과 같다.


GET / HTTP/1.1 - HTTP 전송 방법, 기본 페이지(/)와 프로토콜 버전. 일반적으로 웹서버로부터 자료를 가져오는 기능을 하는 GET 방식을 많이 사용한다. GET 방식의 경우, 별도의 메시지 Body를 사용하지 않는다. 따라서 Body 부분에는 공백이 존재한다.


Host : 4rgos.tistory.com - 요청한 서버의 Host.


Proxy-Connection: keep-alive - HTTP 1.1부터 지원하는 기능. 서버와 클라이언트가 서로 연결이 되어있는 상태에서 지정된 시간동안 서로 패킷의 교환이 없더라도 패킷 교환을 대기하는 구조이다. 즉, 지정된 시간 내에 패킷 교환이 이루어진다면 계속해서 연결된 상태를 유지한다. 이 경우, 웹 프록시 툴을 통해 Request 메시지를 전송 해 Proxy-Connection 이라고 표시되었지만, 브라우저가 웹서버에 직접 요청하는 경우 Connection이라고 표시된다.


Upgrade-Insecure-Requests : 1 - HTTPS : 1과 동일한 표현. HTTP 메시지 전송 시 보안을 적용한다.


User-Agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64) ~ - 사용자의 웹 브라우저 종류나 기타 클라이언트의 소프트웨어 정보를 보여준다. 위의 예시에선 클라이언트가 윈도우 10 64비트 환경에서 크롬 브라우저를 사용했다는 것을 알 수 있다.


Accept : text/html,application/xhtml+xml, ~ - 웹 서버로부터 수신되는 데이터 중 웹 브라우저가 처리할 수 있는 데이터 타입을 의미. text/html은 text, html 형태의 문서를 처리할 수 있다는 것이고, 끝 부분에 */*은 모든 문서를 처리할 수 있다는 의미이다.


Accept-Encoding : gzip, deflate, sdch - 전송할 수 있는 인코딩


Accept-Language : ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4 - 전송할 수 있는 언어


Cookie : ~ - 클라이언트가 서버에게 추가 정보를 보낼 때 사용한다.


2. HTTP Response


다음은 위의 Request를 전송했을 때 웹 서버로부터 받은 HTTP Response의 모습이다.



HTTP/1.1 200 OK - 웹 프로토콜 버전 및 응답 코드 정보. 200 OK가 표시되면 요청이 성공적으로 이루어졌고 요청한 자료가 클라이언트에게 보내졌다는 것을 의미한다.


Date: Sun, 16 Apr 2017 07:43:13 GMT - Response를 전송 한 날짜 및 시간을 나타낸다.


Server : Apache - 웹 서버로 사용하고 있는 소프트웨어의 이름을 나타낸다.


X-UA-Compatible: IE-Edge - 호환성과 관련하여 사용중인 IE 브라우저의 최신 버전의 엔진을 사용해야 한다는 의미이다.


Expires: Thu, 19 Nov 1981 08:52:00 GMT - 예전에 응답한 내용이 만기 시 캐시에 저장되지 못하게 지시한다.


Cache-Control: ~ / Pragma: ~ - 두 Header 모드 브라우저로 하여금 요청 시 캐시된 문서를 사용하지 말고 매 번 서버로부터 새로운 문서를 다시 전송받아 사용하도록 하는 Header이다.


P3P: CP='ALL DSP COR MON LAW OUR LEG DEL' - 사용자들이 허용하는 정보만 웹 사이트가 수집할 수 있도록 하는 도구. 클라이언트에게 웹 사이트의 프라이버시 보호 정책을 전달한다. 세 개의 문자로 구성된 토큰을 사용한다. (참고 : https://www.w3.org/TR/P3P11/#compact_policies)


Access-Control-Allow-Origin: http://4rgos.tistory.com - 서버 리소스에 대한 접근을 제한하는 Header이다. 이 예시의 경우 리소스에 대한 접근을 http://4rgos.or.kr에게만 허용한다. 만약 * 일 경우에는 모든 도메인으로부터의 접근이 가능하다.


Set-Cookie: visited= ~ - 클라이언트에게 쿠키 정보를 알려준다. 이 경우, visited라는 쿠키가 생성 되었으며 이 값을 클라이언트에게 알려주기 위해 사용되었다.


Vary: Accept-Encoding - 응답에 영향을 줄 수 있는 헤더의 목록을 클라이언트에게 알려준다.


Content-Length: 117851 - Body의 길이를 나타낸다.


Content-Type: text/html; charset=utf-8 - body에 적혀있는 것이 어떤 종류의 문서인지를 나타낸다. 이 경우, Body에는 text/html 형태의 문서가 적혀있다.


공백 - Header와 Body를 구분짓는 공백이다.


<!DOCTYPE html> ~ - 서버가 클라이언트에게 전송하는 메시지의 본문(Body)이다.



Created by ccoma

'WEB > Web' 카테고리의 다른 글

페이지 이동 Loction.href  (0) 2017.11.20
base64  (0) 2017.11.06
자바스크립트 용어  (0) 2017.10.28
아스키 코드(ASCII)  (0) 2017.10.16
javascript indexOf 함수와 lastindexOf 함수  (0) 2017.09.25

+ Recent posts