HTTP의 특징인 Request와 Response 메시지의 구조와 여러 메소드를 알아보고, Stateless와 Status code에 대해 알아보자.
HyperText : 문서와 문서가 링크로 연결되어 있음
Transfer : HTML 문서 파일을 보낸다.
Protocol : 문서 파일을 주고 받는 방식과 약속
웹에서 정보를 주고 받을 수 있는 통신규약으로 TCP/IP 기반이다.
클라이언트와 서버 사이에 이루어지는 요청/응답 프로토콜이다.
주로 HTML 문서를 전송하지만, Plain text로 이루어진 JSON이나 XML 같은 형태의 정보도 주고 받을 수 있다.
웹서버는 보통 표준 포트인 80번 포트로 서비스한다.
HTTP 요청은 프론트엔드(클라이언트) 에서 백엔드(서버)에 일(데이터 처리)을 시작하게 하기 위해 보내는 메세지다.
Start Line: 요청의 첫번째 줄에 해당하고 세 부분으로 구성되어있다.
HTTP Method: 해당 요청이 의도한 액션을 정의하는 부분.
주로 GET, POST, DELETE가 많이 쓰임
Request target: 해당 request가 전송되는 목표 url
HTTP Version: 말 그대로 사용되는 HTTP 버전을 뜻한다.
주로 1.1 버전이 널리 쓰임
Start Line 예시
GET /login HTTP/1.1
GET 메소드로 login 이라는 요청 타겟에 HTTP 1.1 버전으로 요청을 보낸다.
Headers 해당 요청에 대한 추가 정보(메타 데이터)를 담고있는 부분이다.
Key: Value 형태 (JavaScript의 객체, Python의 딕셔너리)
자주 사용되는 Headers의 정보 예시
Headers: {
Host: 요청을 보내는 목표(타겟)의 주소. 즉, 요청을 보내는 웹사이트의 기본 주소.(ex. www.apple.co.kr)
User-Agent: 요청을 보내는 클라이언트의 대한 정보 (ex. chrome, firefox, safari)
Content-Type: 해당 요청이 보내는 메세지 body의 타입 (ex. application/json)
Content-Length: body 내용의 길이
Authorization: 회원의 인증/인가를 처리하기 위해 로그인 토큰을 Authroization 에 담는다
}
Body: 해당 요청의 실제 내용. 요청 메소드에 따라 Body가 없을 수도 있다.
주로 POST 메소드에서 body를 사용하고,
JSON(JavaScript Object Notation)으로 작성한다.
로그인 시 서버에 보낼 요청의 내용 예시
Body: {
"user_email": "wecode@gmail.com"
"user_password": "wecode"
}
가장 큰 차이점은 첫번째 구조 Status line 이다.
Status Line: 요청에 대한 처리상태를 클라이언트에게 알려주면서 시작한다.
HTTP Version: 요청의 HTTP버전과 동일
Staus Code 응답 상태 코드 (아래 자세한 내용)
Status Text: 응답 메세지의 상태를 간략하게 설명해주는 텍스트
Status Code 예시
HTTP/1.1 404 Not Found
HTTP 1.1 버전으로 응답하고 있는데, 프론트엔드에서 보낸 요청(ex. 로그인 시도)에 대해서
유저의 정보를 찾을 수 없기 때문에(Not Found) 404 상태 메세지를 보낸다.
HTTP/1.1 200 SUCCESS
HTTP 1.1 버전으로 응답하고 있는데, 프론트엔드에서 보낸 요청에 대해서 성공했기 때문에
200 상태 메세지를 보낸다.
Headers : 응답의 메타데이터를 담고 있다. 양식은 요청과 거의 동일
Body : 응답해줄 데이터. 요청 메소드에 따라 body가 없을 수도 있다.
양식은 요청과 거의 동일하지만, 응답에서만 사용되는 헤더의 정보들이 있다.
(ex. 요청하는 브라우저의 정보가 담긴 User-Agent 대신, Server 헤더가 사용된다.)
각 통신(요청/응답)은 독립적이기 때문에 과거의 통신 결과나 상태를 보관하지 않는다.
따라서 매번 필요한 정보를 모두 다 보내야한다.
연속된 데이터 처리를 위해 로컬&세션 스토리지, 쿠키 등이 만들어졌다.
(ex: 로그인 상태를 유지하기)
&
을 사용해 구분한다.200 : Ok (성공)
201 : Created (작성됨)
400 : Bad Request (잘못된 요청)
주로 요청의 Body에 보내는 내용이 잘못되었을 때 사용되는 코드
(데이터 타입이 틀리거나)
401 : Unauthorized (권한 없음 - 인증 실패)
403 : Forbidden (금지됨 - 인가 실패)
404 : Not Found (찾을 수 없음)
500 : internal server error (내부 서버 오류)