네트워크

HTTP 프로토콜

tioon 2023. 5. 13. 01:31
HTTP 프로토콜이란?

-HTTP는 인터넷에서 데이터를 주고받기 위해 사용되는 프로토콜입니다. HTTP는 클라이언트-서버 모델을 따르며, 통신에 사용됩니다. TCP기반의 프로토콜 스택을 사용하여 데이터를 전송하지만 Stateless한 프로토콜이라 쿠키, 세션과 같은 기술을 사용해야합니다.

 

Stateless란?

-상태를 유지하지 않는다 라는 의미로,  클라이언트와 서버간의 통신에서 이전 요청에 대한 정보를 유지하지 않습니다.
따라서 각각의 요청이 독립적으로 처리되며, 그전의 정보는 유지하지않아 서버에 대한 부하를 줄일 수 있습니다.
하지만,서버가 이전 요청과 현재 요청이 같은 클라이언트의것임을 알 수 없기 때문에 세션,쿠키와 같은 방식으로 클라이언트의  정보를 구별할 수 있습니다.

 

 

HTTP request types
  • GET
    - 서버로부터 정보를 요청하기 위한 메서드이며,  URL뒤 (요청매개변수)에 데이터를 포함시켜 전송합니다. 보낼 데이터가 없기에 HTTP BODY가없습니다.

  • POST
    - 서버에 데이터를 전송하기 위한 메서드이며, 요청한 리소스를 변경하거나, 서버의 DB에 데이터를 추가할때 사용합니다. POST요청은 BODY에 전송할 데이터를 포함시켜 전송합니다.

  • PUT
    - 서버에 데이터를 업데이트하기 위한 메서드이며, BODY에 업데이트할 데이터를 포함시켜 전송합니다.
    (해당 데이터가 없으면 생성)

  • DELETE
    - 서버로부터 데이터를 삭제하기위한 메서드입니다.

  • PATCH
    - 리소스의 부분적인 수정을 요청하는 메서드입니다. 리소스의 일부분을 수정하거나 업데이트할 수 있습니다.
    PUT과 유사하지만 PATCH는 데이터의 전체가 아닌 일부분만 수정하는 것도 가능합니다.

 

 

 

HTTP 구조

- 클라이언트와 서버가 HTTP로 서로 통신을 할때 HTTP의 구조가 있습니다.

 

  • Start Line
    요청인 경우 Request Message, 응답인 경우 Response Message가 들어가며 HTTP 정보를 가지고 있음.
    클라이언트가 요청할때는 요청라인(Request Line)이고, 서버가 응답 할때는 상태라인(Status Line)입니다.

  • Header
    HTTP헤더는 요청이나 응답에 대한 부가적인 정보를 가지고 있으며, 전송에 필요한 부가정보를 담고 있음.
    Content-Type -> http body의 타입을 지정합니다. 주로 HTML, JSON, Form-data 타입을 나타냅니다.
    Content-Length -> http body의 길이를 나타냅니다.
    User-Agent -> 사용자 에이전트 식별자를 제공합니다.
    Host -> 요청한 URL의 호스트 주소를 나타냅니다.
    Cookie -> 클라이언트가 서버로 보낸 쿠키 정보를 담고 있습니다.

  • Body
    HTTP BODY는 요청과 응답에 대한 실제 전송할 데이터를 담고 있음. (HTML 문서, 이미지, 영상, JSON)등....

 

 

 

HTTP 예시

 

클라이언트 POST방식 전송

POST /submit-form(쿼리파라미터 추가가능) HTTP/1.1  //Start Line
Host: example.com  //HTTP HEADER
Content-Type: application/x-www-form-urlencoded
Content-Length: 25   

name=John&age=30&email=john@example.com   //HTTP BODY

 

서버 응답

HTTP/1.1 200 OK   //Start Line
Content-Type: text/html  //HTTP HEADER
Content-Length: 1274   

<!DOCTYPE html>   //HTTP BODY
<html>
<head>
<title>Welcome to Example.com</title>
</head>
<body>
   <h1>Hello, world!</h1>
   <p>This is a sample web page.</p>
</body>
</html>

 

 

HTTP 응답 코드
  • 200번대 (Successful) - 요청 정상 처리
    200 - 요청이 성공적으로 처리되었음.
    201 - 요청이 성공적으로 처리되었으며, 새로운 리소스가 생성됨.
    204 - 요청은 성공했지만 응답에 리턴할 내용은없음.

  • 300번대 (Redirection) - 리다이렉션 , 요청 완료를 위해 추가 처리 필요
    301 - 요청한 리소스가 새로운 URL로 영구적 이동됨.
    302 - 요청한 리소스가 일시적으로 다른 URL로 이동됨.

  • 400번대 (Client Error) - 클라이언트 오류
    400 - 클라이언트의 잘못된 요청으로 인해 서버가 요청을 받지못함.
    403 - 요청이 서버에 의해 거부되었음을 나타냄.
    404 - 요청한 리소스를 서버에서 찾을 수 없음.

  • 500번대 (Server Error) - 서버 오류
    500 - 서버가 요청을 처리하는 동안 내부 오류가 발생함.
    503 - 서버가 일시적으로 요청을 처리할 수 없음.

 

 

 

리다이렉션이란?

-클라이언트가 요청한 URL이 다른 URL로 변경되었음을 나타내는 것을 말합니다. 즉, 웹페이지나 다른 리소스의 위치가 영구적 또는 임시적으로 변경되었을 때, 클라이언트가 새로운 위치로 요청을 다시 보내도록 유도하는 과정을 말합니다.