본문 바로가기

NETWORK

HTTP 구조 (Request, Response, method, Status)

1. HTTP

개념

HyperText Transfer Protocol -> 하이퍼텍스트 전송 프로토콜 = HTML 전송할 때 지킬 약속
컴퓨터들은 HTTP를 지키지 않으면 통신할 수 없다!

웹에서 데이터를 안전하게 주고 받을 수 있게 하는 원천이 바로 HTTP

 

통신 방식

요청과 응답 구조 (Request Headers와 Response Headers를 가짐)
클라이언트가 요청을 보내면 서버가 응답을 보내는 구조

즉, HTTP가 없다면 클라이언트와 서버는 서로 통신을 할 수 없다!

 

** 쿠키나 세션을 사용했던 이유는 HTTP와 관련이 있다.

HTTP는 Stateless, 상태를 가지지 않는다. 이 말은 요청과 응답은 독립되어 있다는 것이다.

즉, 방금 전에 보낸 요청을 또 보내도 모른다는 것이다. 그렇다면 응답도 마찬가지겠지?

그래서 데이터 보관이나 기억이 필요할 때, 쿠키나 세션을 사용하는 것이다.
(웹 프로젝트할 때, 세션에 정보를 담아두었던 이유가 바로 이것)

 

2. HTTP Request Headers 구조

Start Line + Headers + body로 구성

1. Start Line

- HTTP Method
GET(read), POST(create), PUT(update), PATCH, DELETE, OPTIONS 등

- Request Target
해당 request가 전송되는 목표 uri

- HTTP Version
HTTP 버전. 1.0, 1.1, 2.0이 있음

 

2. Headers

- HOST

요청을 보낼 target host url -> 서버 주소를 말함. 이 요청을 어디로 보낼 거니?

- User-Agent
요청을 보내는 클라이언트의 정보 = 웹 브라우저에 대한 정보

- Accept
해당 요청이 받을 수 있는 응답 타입
모든 데이터 타입을 다 허용하는 경우에는 */* 로 지정

 

- Accept Encoding
보내는 요청의 용량이 클 때, 압축하여 서버에 보낼 수 있다.

그때 압축 가능한 방식을 알려주는 것 -> 자원을 아낄 수 있음

- Connection
요청이 끝난 후에 클라이언트와 서버가 계속해서 네트워크 연결을 유지할 것인지, 끊을 것인지

(HTTP가 요청에 대한 기억을 유지한다는 의미가 아니라 단순하게 이 사이트랑 더 있을거야 말거야 라고 생각하면 될듯)

- Content-Type
해당 요청이 보내는 메세지 body 타입을 말함. JSON을 보내면 application/json; (아래 확인)

- Content-Length
메세지 body의 길이 (아래 확인)

 

3. Body

해당 request의 실제 메세지 -> Headers에서 한 줄 띄고 적어준다

왼) POST로 JSON 데이터를 보내는 경우      오) Body 실제 메세지

 

 

3. HTTP Response Headers 구조

Status Line + Header + Body로 구성

1. Status Line

- HTTP Version

- Status Code
응답 상태를 나타내는 코드

- Status text
응답 상태를 간략하게 설명해주는 부분 (없는 경우도 있음)

2. Headers / 3. Body

- Request와 동일


 

4. 자주 쓰이는 HTTP Method

1. GET

- 서버로부터 데이터를 받아올 때 사용

- 단순 요청이기 때문에 request에 body가 없음

 

2. POST

- 데이터를 추가할 때 사용 (나는 추가할 때만 썼는데 수정, 삭제 시에도 사용한다고 함)

- 데이터를 보내면서 추가해달라고 요청하는 것이기 때문에 request에 body가 있음

 

3. PUT / PATCH

- 데이터를 추가, 수정할 때 사용

- PUT은 전체 수정, PATCH는 일부 수정

4. DELETE

- 데이터를 삭제할 때 사용

 

5. OPTIONS

- 요청 단에서 어떤 메서드를 사용할 수 있는지 받아올 때 사용. 단순히 내가 무슨 메서드를 쓰면 좋을까? 라고 먼저 묻는다고 생각해라.

 

 

5. 자주 쓰이는 HTTP Status Code

100번대 -> 정보

200번대 -> 성공

300번대 -> 리다이렉션, 클라이언트의 추가 조치 필요하므로 다시 돌려보냄
400번대 -> 프론트, 클라이언트 잘못

500번대 -> 백, 서버 잘못

1. 200 OK

성공적으로 실행되었을 경우 보내는 코드

 

2. 301 Moved Permanently

해당 URI가 다른 주소로 바뀌었을 때 보내는 코드

 

3. 400 Bad Request

요청이 잘못되었을 경우 보내는 코드

예를 들어, form에서 텍스트를 보내야 하는데 숫자를 보낼 경우 (조건과 다른 값이 올 때 거절)

 

4. 403 Forbidden

해당 요청에 대한 권한이 없을 때 보내는 코드

관리자가 아닌데 관리자 페이지를 접속하려고 할 때 (단, 관리자만 접속 가능하다고 전제)

 

5. 404 Not Found

존재하지 않는 uri를 요청할 때 보내는 코드

 

6. 500 Internal Server Error

서버에서 에러가 났을 때 사용되는 코드

 

 

 


출처

velog.io/@teddybearjung/HTTP-%EA%B5%AC%EC%A1%B0-%EB%B0%8F-%ED%95%B5%EC%8B%AC-%EC%9A%94%EC%86%8C

'NETWORK' 카테고리의 다른 글

TCP/IP 프로토콜  (0) 2021.02.03
http와 https의 차이  (0) 2021.01.26
통신 프로토콜  (0) 2021.01.26
URI와 URL의 차이  (0) 2020.12.03