HTTP 프로토콜

JaeGu Jeong·2022년 11월 10일
0

개요

클라이언트는 서버에 접속하여 http규약으로 통신을 하게되는데, 핵심은 서버에게 "요청 양식"을 보내 서버가 "응답 양식을" 전송해 주길 기다린다.

request 내용

GET / HTTP/1.1
Host: localhost:80
Upgrade-Insecure-Requests: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Safari/605.1.15
Accept-Language: ko-KR,ko;q=0.9
Accept-Encoding: gzip, deflate

먼저 첫번째 줄에 메소드(GET | POST | DELETE | PUT 등등)가 온다.
이어서 공백을 기준으로 "요청대상 경로(target path)", 그리고 "http의 버전"이 온다.
두번째 줄부터는 헤더들에 대한 정보가 키,값 형식으로 "헤더블록"이 작성된다. (RFC 7230 : header field)

만약 post와 같이 데이터를 본문(body)에 담아 전송한다면 헤더블록뒤에 CRLF이 작성되고 그 밑에 body정보가 담긴다.

response 내용

HTTP/1.1 200 OK
Server: nginx
Date: Sat, 12 Nov 2022 15:51:41 GMT
Content-Type: text/html
Content-Length: 10909
Last-Modified: Sat, 15 Oct 2022 06:33:10 GMT
Connection: keep-alive
ETag: "634a5426-2a9d"
Accept-Ranges: bytes
(CRLF)
<!DOCTPE html>
<html>
	<head>...</head>
	<body>...</body>
</html>

응답메시지도 비슷하다. 첫번재 줄에 "버전", "상태코드", "상태 메시지(상태코드에 대한 해석)"순으로 작성된다.
두번째 줄부터 헤더블록이 작성이 된다.
마지막으로 CRLF가 작성되고 이어서 요청했던 내용이 작성된다.

요청 메소드

GET : safe method, 서버에서 데이터를 조회한다. (주로 서버의 html파일 요청)
POST : 데이터를 전송하는 메소드. 주로 html의 form데이터를 서버로 전송하기 위해 사용한다.
PUT : 데이터를 전송 및 수정하는 메소드.
DELETE : 데이터를 삭제하는 메소드 (200응답이 와도 서버는 실제 데이터 삭제를 보장하지 않는다).

상태코드 의미

100번대 : 정보
200번대 : 성공
300번대 : 리다이렉트
400번대 : 클라이언트 에러
500번대 : 서버에러

헤더필드 예시

Content-Type : body의 형식 (text/html, image/jpg 등등)
content-Length : body데이터의 크기
Date : 작성된 시각 (서버 기준)
Accept : 클라이언트가 받을 수 있는 형식 (text/html, image/jpg 등등)

Request 메소드 바디 유무

바디 없음 : GET
바디 있음 : POST , PUT, DELETE(필수는 아님)

Response 메소드 바디 유무

바디 없음 : PUT, DELETE(필요시 body사용 가능)
바디 있음 : GET, POST

delete 메소드 response body

상태코드가 204(내용없음)가 아닌 200이면 삭제한 데이터의 정보를 담아서 응답 할 수도 있다.

profile
BackEnd Developer

0개의 댓글