HTTP

김가람휘·2022년 2월 7일
0

CS

목록 보기
6/15

HTTP(Hypertext Transfer Protocol)

  • 컴퓨터들끼리 HTML파일을 주고받을 수 있도록 하는 소통방식 또는 약속
  • HTTP 프로토콜은 상태가 없는 stateless 프로토콜입니다.
    -> 데이터를 주고 받기 위한 각각의 데이터 요청이 서로 독립적
    -> 이전 데이터 요청과 다음 데이터 요청이 서로 관련이 없다.
  • HTTP 프로토콜로 데이터를 주고받기 위해서는 요청(Request)을 보내고 응답(Response)을 받아야 합니다.
    -> 클라이언트는 요청을 보내는 쪽을 의미하여 일반적으로 브라우저를 의미합니다. 서버란 요청을 받는 쪽을 의미하여 일반적으로 데이터를 보내주는 원격지의 컴퓨터를 의미합니다.

    URL(Uniform Resource Locators)

    • 인터넷에서 웹 페이지, 이미지, 비디오 등 리소스의 위치를 가리키는 문자열입니다.

HTTP 요청 메서드(HTTP Verbs)

  • GET : 존재하는 자원에 대한 요청
  • POST : 새로운 자원을 생성
  • PUT : 존재하는 자원에 대한 변경
  • DELETE : 존재하는 자원에 대한 삭제

Request 메세지 구조

  1. Start Line : 요청의 첫번째 줄
    • HTTP Method : 해당 요청이 의도한 액션을 정의하는 부분(GET, POST, DELETE)
    • Request target : 해당 request가 전송되는 목표 url
    • HTTP Version : 말 그대로 사용되는 HTTP 버전, 주로 1.1버전이 널리 쓰임
GET /login HTTP/1.1
# GET메소드로 login이라는 요청 타겟에 HTTP 1.1버전으로 요청을 보내겠다.
  1. Headers : 해당 요청에 대한 추가 정보(메타 데이터)를 담고 있는 부분
    • Key: Value 값으로 되어있다 (JavaScript의 객체, Python의 딕셔너리 형태라고 보면 된다)
    • Host: 요청을 보내는 목표(타겟)의 주소. 즉, 요청을 보내는 웹사이트의 기본 주소가 된다. (ex. www.apple.co.kr)
    • User-Agent: 요청을 보내는 클라이언트의 대한 정보 (ex. chrome, firefox, safari, explorer)
    • Content-Type: 해당 요청이 보내는 메세지 body의 타입 (ex. application/json)
    • Content-Length: body 내용의 길이
    • Authorization: 회원의 인증/인가를 처리하기 위해 로그인 토큰을 Authroization 에 담는다
Headers: {
    Host:  
    User-Agent: 
    Content-Type: 
    Content-Length: 
    Authorization: 
}
  1. Body : 해당 요청의 실제 내용
    • 주로 Body를 사용하는 메소드는 POST다.
    • 로그인 시에 서버에 보낼 요청의 내용
Body: {
    "user_email": "jun.choi@gmail.com"
    "user_password": "wecode"
}

Response 메시지 구조

  1. Status Line : 응답의 상태 줄
    • 응답은 요청에 대한 처리상태를 클라이언트에게 알려주면서 내용을 시작한다
    • HTTP Version: 요청의 HTTP버전과 동일
    • Status Code: 응답 메세지의 상태 코드
    • Status Text: 응답 메세지의 상태를 간략하게 설명해주는 텍스트
HTTP/1.1 404 Not Found
# HTTP 1.1 버전으로 응답하고 있는데, 프론트엔드에서 보낸 요청(ex. 로그인 시도)에 대해서
# 유저의 정보를 찾을 수 없기 때문에(Not Found) 404 상태 메세지를 보낸다.

HTTP/1.1 200 SUCCESS
# HTTP 1.1 버전으로 응답하고 있는데, 프론트엔드에서 보낸 요청에 대해서 성공했기 때문에
# 200 상태 메세지를 보낸다.
  1. Headers : 요청의 헤더와 동일하다. 응답의 추가 정보(메타 데이터)를 담고있는 부분
    • 응답에서만 사용되는 헤더의 정보들이 있다. (ex. 요청하는 브라우저의 정보가 담긴 User-Agent 대신, Server 헤더가 사용된다.)
  2. Body : 요청의 Body와 일반적으로 동일하다.
    • 요청의 메소드에 따라 Body가 항상 존재하지 않듯이 응답도 응답의 형태에 따라 데이터를 전송할 필요가 없는 경우엔 Body가 없을 수도 있다.
    • 가장 많이 사용되는 Body 의 데이터 타입은 JSON(JavaScript Object Notation) 이다.
Body: {
    "message": "SUCCESS"
    "token": "kldiduajsadm@9df0asmzm" (암호화된 유저의 정보)
}
# 로그인 요청에 대해 성공했을 때 응답의 내용

HTTP 상태 코드

2XX - 성공

  • 200 : GET 요청에 대한 성공
  • 201 : Created, 대게 POST 메소드의 요청에 따라 백엔드 서버에 데이터가 잘 생성 또는 수정 되었을 때에 보내는 코드
  • 204 : No Content, 성공했으나 응답 본문에 데이터가 없음
  • 205 : Reset Content, 성공했으나 클라이언트의 화면을 새로 고침하도록 권고
  • 206 : Partial Conent, 성공했으나 일부 범위의 데이터만 반환

3xx - 리다이렉션

300번대의 상태 코드는 대부분 클라이언트가 이전 주소로 데이터를 요청하여 서버에서 새 URL로 리다이렉트를 유도하는 경우입니다.

  • 301 : Moved Permanently, 요청한 자원이 새 URL에 존재
  • 303 : See Other, 요청한 자원이 임시 주소에 존재
  • 304 : Not Modified, 요청한 자원이 변경되지 않았으므로 클라이언트에서 캐싱된 자원을 사용하도록 권고. ETag와 같은 정보를 활용하여 변경 여부를 확인

4xx - 클라이언트 에러

400번대 상태 코드는 대부분 클라이언트의 코드가 잘못된 경우입니다. 유효하지 않은 자원을 요청했거나 요청이나 권한이 잘못된 경우 발생합니다. 가장 익숙한 상태 코드는 404 코드입니다. 요청한 자원이 서버에 없다는 의미입니다.

  • 400 : Bad Request, 잘못된 요청
  • 401 : Unauthorized, 권한 없이 요청. Authorization 헤더가 잘못된 경우
  • 403 : Forbidden, 서버에서 해당 자원에 대해 접근 금지
  • 405 : Method Not Allowed, 허용되지 않은 요청 메서드
  • 409 : Conflict, 최신 자원이 아닌데 업데이트하는 경우. ex) 파일 업로드 시 버전 충돌

5xx - 서버 에러

500번대 상태 코드는 서버 쪽에서 오류가 난 경우입니다.

  • 500 : Internal Server Error, 서버에서 에러가 났을 때의 Status Code
  • 501 : Not Implemented, 요청한 동작에 대해 서버가 수행할 수 없는 경우
  • 503 : Service Unavailable, 서버가 과부하 또는 유지 보수로 내려간 경우

0개의 댓글