본문 바로가기

개인공부

HTTP 란?

반응형

HTTP (Hyper Text Transfer Protocol)

클라이언트가 브라우저를 통해서 어떠한 서비스를 url을 통하거나 다른 것을 통해서 요청(request)을 하면 서버에서는 해당 요청사항에 맞는 결과를 찾아서 사용자에게 응답(response)하는 형태로 동작한다.

 

HTTP 특징

 - HTTP 메세지는 HTTP 서버와 HTTP 클라이언트에 의해 해석이 된다.

 - TCP/IP를 이용하는 응용 프로토콜이다.

 - HTTP는 연결 상태를 유지하지 않는 비연결성 프로토콜이다.

 - HTTP는 연결을 유지하지 않는 프로토콜이기 때문에 요청/응답 방식으로 동작한다.

요청 (Request)

클라이언트가 서버에게 연락하는 것

GET,POST,PUT,DELETE가 있다.

 

크롬에게 개발자모드를 이용하면 다음과 같은 헤더를 볼 수 있습니다.

GET https://www.naver.com HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...
Upgrade-Insecure-Requests: 1

위와 같은 정보가 담긴 메시지를 HTTP 메시지라고 합니다.

HTTP 메시지는 시작줄, 헤더, 본문 으로 구성됩니다.

 

첫 줄은 GET 요청으로 https://www.naver.com 주소로 요청하는 것입니다. HTTP/1.1 는 HTTP버전입니다.

 

두 번째 줄부터는 헤더입니다. 요청에 대한 정보를 담고 있습니다.

 

헤더다음은 본문이 시작됩니다. 본문의 요청을 할 때 함께 보낼 데이터를 담는 부분입니다.

응답 (Response)

HTTP/1.1 200 OK
Connection: keep-alive
Content-Encoding: gzip
Content-Length: 35653
Content-Type: text/html;

요청과 마찬가지로 시작줄, 헤더, 본문으로 구성되어 있습니다.

 

첫 줄은 버전 상태코드입니다.(200은 통신 성공)

 

두 번째 줄은 응답에 대한 헤더입니다. 마지막으로 헫더다음이 본문으로 구성됩니다.

(보통 응답에는 HTML 이 담겨있다. 이 HTML을 브라우저가 해석해서 클라이언트가 볼 수 있다.)

헤더의 종류

공통헤더

 - 요청과 응답에 모두 사용되는 헤더

 

Date

HTTP 메시지가 만들어진 시간입니다. 자동적으로 만들어집니다.

ex) Date: Sun, 13 Jan 2020 12 :34:21 GMT

 

Connection

일반적으로 HTTP/1.1을 사용하며 Connection은 기본적으로 Keep-alive로 되어있다.(별 의미는 없다고함...)

ex) Connection: keep-alive

 

Content-Length

요청과 응답 메시지의 본문 크기를 바이트 단위로 표시해준다. 메시지 크기에 따라 자동으로 만들어진다.

ex) Content-Length: 88052 (byte 단위!)

 

Cash-control

여기서 말하는 캐시는 개인 캐시를 뜻합니다.(로컬에 저장되는 캐시)

보통 캐싱은 GET 요청에만 합니다. 일반적으로 200(가져오기 성공), 301(다른 주소로 이동 후 가져옴), 404(가져올게 없음) 상태 코드로 온 응답을 캐싱할 수 있습니다.

 

아무것도 캐싱하기 싫을 때

Cashe-Control : no-store

모든 캐시를 쓰기 전에 서버에 이 캐시 사용해도 되는지 물어보고 사용하는 옵션

Cashe-Control :no-cache

만료된 캐시만 서버에 확인을 받도록 하는 옵션

Cache-Control : must-revalidate

특정 사용자 환경에만 저장 (public : 공유 캐시, 중개서버 , private : 브라우저같은 특정 사용자 환경에만 저장)

Cache-Control : public || private

max-age로 캐시 유효시간을 줄 수 있습니다.

Cache-Control : public, max-age=3600

Content-Type 

컨텐츠의 타입(MIME)과 문자열 인코딩(UTF-8등등)을 명시할 수 있다.
ex)Content-Type: text/html; charset=utf-8
(서버로 데이터를 보낼 때는 text/html 대신 www-url-form-encoded, multipart/form-data등이 content-Type이 된다)

Content-Language 

사용자의 언어.

ex)Content-Language=kr

 

 

반응형

'개인공부' 카테고리의 다른 글

템플릿 엔진(Template Engine)이란 ?  (0) 2020.10.03
HTML  (0) 2020.09.28
TCP ( Transmission Control Protocol)  (0) 2020.09.28
Internet Protocol(인터넷 통신규약)  (1) 2020.09.28
COMMIT , ROLLBACK  (0) 2020.09.28