백엔드 개발자 -2

판도라도·2023년 8월 28일

백엔드 개발

목록 보기
2/6

이번에는 HTTP에 대해 알아보겠다.

HTTP란 ?

HTTP는 HyperText Transfer Protocol의 약자로 W3(World Wide Web)상에서 데이터를 주고 받을 때 사용되는 규칙이다.

HTTP 통신 과정

  1. 클라이언트가 서버에 연결을 요청함
  2. 서버가 연결을 수락 함
  3. 클라이언트가 웹페이지,이미지,자바스크립트 파일 등등을 요청함
  4. 서버가 데이터베이스에서 필요한 정보를 가져옴
  5. 서버가 데이터를 클라이언트에게 전송해줌

비연결형 프로토콜

HTTP에서 클라이언트가 서버에서 하나의 파일을 가지고 오는 과정을 HTTP 세션이라고 한다. 초기 프로토콜인 HTTP/1.0에서는 하나의 세션이후 연결이 끊어져서 여러개의 파일을 가져오려면 여려번의 세션이 이루어져야했다.
예를들어 페이지에 2개의 동영상이 있다면 총 3번의 세션이 이루어져야한다.(html파일 1개와 동영상 2개)

Keep Alive

파일을 가져올때마다 계속해서 서버에 연결을 해야하는 불편함을 해결하기 위해 Keep Alive라는 기술을 만들었다. 요청 데이터와 응답 데이터의 헤더에 Connection: Keep-Alive를 포함하면 한쪽에서 위 문자열을 안쓸 때까지 연결을 유지한다.

지속연결형 프로토콜

계속해서 Connection: Keep-Alive라는 문자열을 보내는 불편함을 해결하기 위해 지속연결형 방식을 표준화 하였다. (또 다른 문제점 : 프록시 서버가 중간에 있게 되면 프록시 서버는 Keep-Alive상태가 안되어 hang에 걸림)타임아웃 시간이 되거나 Connection: Close라는 문자열을 헤더에 보내기 전까지 연결을 유지하는 것이다. 타임아웃 시간은 몇 초에서 몇 십초로 이루어져있고 그 시간이면 모든 파일을 주고 받을 수 있는 시간이다.

현재에도 Kepp-Alive가 많은 브라우저에서 사용되고 있고 2015년 HTTP/2 표준이 출시 될때 지속연결기법이 포함되었다.

HTTP 요청을 서버로 보내는 방법

HTTP의 요청에는 요청 라인,헤더,본문으로 이루어져있다.

요청 라인

요청 라인은 HTTP 메서드, 주소 , HTML 버전으로 이루어져있다.

예를 들어 GET /www.naver.com HTTP/1.1 라면 www.naver.com에서 리소를 가져오고 HTTP1.1 버전으로 통신을 하기를 원한다는 내용이다.

Request Method

GET : 리소스를 요청할 때 사용
POST : 리소스의 생성을 요청할 때 사용
PUT : 리소스의 전체 수정을 요청할 때 사용
patch : 리소스의 일부분 수정을 요청할 때 사용
DELETE : 리소스의 삭제를 요청할 때 사용

헤더

헤더에는 요청에 대한 정보를 담고 있고 키와 페어형태로 이루어져있다.

예)
Host: channy.creation.net
User-Agent: curl/7.64.1
Accept: /

본문

요청을 할 때 사용할 리소스를 보냅니다.
예를 들어 PUT은 업데이트 할 리소스를 보냅니다.

HTTP 응답을 클라이언트로 보내는 방법

HTTP의 요청에는 상태 라인,응답라인,요청된 리소스롤 이루어져있다.

클라이언트에게 요청 상태를 알려주는 상태 라인

HTTP/1.1 200 OK 와 같이 이루어져있고 200이라는 숫자는 성공을 의미한다.

브라우저에 응답 처리 방법을 알려주는 응답 헤더

응답에 대한 정보를 담고 있다.

해당 경로에서 요청된 리소스 (HTML, CSS, Javascript, 이미지 파일과 같은 콘텐츠 또는 데이터)

요청한 리소스를 담고 있습니다.

예시)

HTTP/1.1 200 OK
Date: Tue, 25 May 2021 19:40:59 GMT
Server: Apache
X-Frame-Options: SAMEORIGIN
X-Powered-By: Express
Cache-Control: max-age=0, no-cache
Content-Type: text/html; charset=utf-8
Vary: Accept-Encoding
X-Mod-Pagespeed: 1.13.35.2-0
Content-Encoding: br
Keep-Alive: timeout=1, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked

<!DOCTYPE html>
<html lang="ko">
<head>
    나머지 HTML 항목

참고사이트

웹 브라우저에 URL을 입력하면 어떤 일이 생기나요? -아마존 블로그

0개의 댓글