HTTP란?

jonghyuck’s velog·2021년 5월 6일
0
  1. ✍️ HTTP란 Hyper Text Transfer Protocol 의 약자이다.
  2. 🤔 어떻게 동작할까?
  3. 특징
  4. 응답코드

1. ✍️ HTTP란 Hyper Text Transfer Protocol 의 약자이다.

사실 위 단어에 모든 뜻이 담겨있다. 말 그대로 텍스트 기반으로 인터넷에서 데이터를 주고받을때 사용하는 텍스트기반의 프로토콜이다. 이는 웹에서 사용하는 프로토콜인데, TCP/IP를 기반으로 한지점에서 다른지점으로 데이터를 전송할때 사용된다. 여기서 데이터의 전송은 request와 response로 이루어지는데 이는 아래 동작을 보면 간략히 설명되어 있다.


2. 🤔 어떻게 동작할까?

클라이언트가 브라우저를 통해서 url을 요청(request)하면 해당 서버는 request에 맞는 결과를 응답(response)하는 형태이다.
또한 텍스트 기반으로 통신을 한다고 했는데 Plain text로 부터 JSON, XML, HTML과 같은 형태의 정보를 주고 받을 수 있으며 보통은 클라이언트가 어떤 정보를 어떤 형태로 받고싶은지 명시하여 사용한다.


3. ✔️ 특징

  • http의 메시지는 서버와 클라이언트에 의해서 해석된다.
  • TCP/IP를 이용하는 응용 프로토콜 (Application protocol)이다.
  • 연결 상태를 항시 유지하지 않는 비연결성 프로토콜이다. (Cookie와 Seesion이 이러한 단점을 보완

4. 🚫 응답 코드

이렇게 간략하게 설명을 했지만 클라이언트가 서버로 request를 보냈을 때 이 요청이 잘못되었는지 어떻게 확인 할 수 있을까?
클라이언트가 서버로 요청을 보내면 서버는 응답을 해준다. 이는 200번대, 300번대, 400번대, 500번대로 이루어진 응답코드로 부터 알 수 있다.

성공 (Succes)

이 응답코드는 200번대로 이루어져 있다.

  • 200 : 정상적인 요청을 받았고 본문에 요청받은 리소스를 포함하고있다.
  • 201 : 정상적인 생성 작업 요청을 받았으며 생성작업에 성공했다.
  • 202 : 요청은 정상적으로 이루어졌으나, 아직 동작을 수행하지 않은 상태
  • 203 : 요청은 성공적으로 이루어졌으나, 요청에 대한 검증은 되지 않은 상태
  • 204 : 요청은 성공적이지만 서버에 제공할 내용이 없음을 의미
  • 205 : 204와 같은 상태이지만 새로고침을 통해서 새로운 내용을 확인할것을 의미
  • 206 : 요청의 일부분만 성공했다.

리다이렉션(Redirection)

리다이렉션의 경우 300번대로 이루어져있다. 리다이렉션이란 보통 http로 접속시 https로 url을 변경시켜 접속시키거나 단축 url 서비스 사용시 실제 접속할 url로 접속시키는 것들을 말한다. 이에 대한 자세한 내용은 추가로 공부해보아야 할 것 같다.

  • 300 : 클라이언트가 동시에 여러응답을 가리키는 URL을 요청한 경우 응답 목록과 함께 반환
  • 301 : 번호가 바뀐 사람에게 전화했을때 바뀐 번호를 알려주는것 처럼 url이 옮겨진 경우 옮겨진 url과 함께 응답
  • 302 : 301과 동일하지만 클라이언트는 여전히 옮겨지기전 url로 요청할것
  • 303 : 요청을 수행하기 위해서는 다른 url로 요청해야 함을 의미
  • 304 : 단시간에 반복적 요청을 할 경우 이전과 요청의 변화가 없을 시
  • 305 : 직접적인 요청이 아니라 프록시를 통해 요청해야 함을 의미
  • 306 : 302와 동일하지만 HTTP Method도 변경없이 요청하여야 함을 의미

에러(Client Error)

아마 서버를 다루는 사람이라면 가장 많이 보게 될 응답일 것이다. 클라이언트가 요청을 잘못했을 경우 에러에 대한 400번대 응답이 나온다.

  • 400 : 클라이언트의 요청이 올바르지 않을 경우
  • 401 : 요청을 위해서 권한 인증등이 요구되는 경우
  • 402 : 결제가 필요한 요청의 경우. 이 코드는 구글 개발 API등에서 특정 개발자가 하루 임계 요청량을 초과한 경우 반환한다고 한다.
  • 403 : 요청이 서버에 의해 거부되었을때, 보통 거부 이유를 숨기고 싶을 시 서버는
  • 403 에러를 통해서 접속을 거절한다.
  • 404 : url을 잘못 입력했을 때 요청한 url을 찾을 수 없음을 의미
  • 405 : 요청한 url이 mothod를 지원하지 않음을 의미
  • 406 : 클라이언트의 요청에 적절한 컨텐츠가 없음을 의미
  • 407 : 401과 동일하지만 프록시를 통한 인증이 필요한 경우
  • 408 : 요청에 응답하는 시간이 너무 많은 시간이 걸림을 의미
  • 409 : 클라이언트의 요청에 대해 서버에서 충돌이 발생함
  • 410 : 요청한 url이 더 이상 사용되지 않고 사라짐
  • 411 : 클라이언트 요청에 Content-length 헤더가 포함되어야 함을 의미
  • 412 : 클라이언트가 조건부 요청을 했는데 그 중 하나가 실패했음을 의미
  • 413 : 요청이 너무 커서 서버에서 처리가 불가능한 경우
  • 414 : 요청 url이 너무 길어서 처리 불가능한 경우
  • 415 : 서버가 이해하지 못하는 유형의 콘텐츠를 요청한 경우
  • 416 : 클라이언트의 요청 내용이 범위가 잘못되었음을 의미
  • 417 : 클라이언트 요청 헤더의 Expect에 대해 서버가 만족 하지 않음을 의미

서버 에러(Server Error)

요청은 올바르지만 서버가 응답하지 않는 경우 500번대 응답을 통해 알 수 있다.

  • 500 : 서버에서 오류가 발생하여 응답 할 수 없음을 의미
  • 501 : 클라이언트 요청에 대한 서버의 응답 수행 기능이 없음을 의미 ( 405와 다른점은 서버가 지원하지 않는 새로운 Method를 사용하여 요청한경우를 의미한다. GET2,POST2와 같은 경우가 해당)
  • 502 : 프락시나 게이트웨이등의 서버에서 응답하며 서버의 부모 서버에서 오류가 발생했음을 의미
  • 503 : 현재 서버가 유지보수등의 이유로 사용이 불가능 한 경우
  • 504 : 서버에서 다른 서버로 요청을 보냈으나 응답지연이 발생하여 처리가 불가능한 경우
  • 505 : 서버가 지원할 수 없거나 올바르지 못한 프로토콜로 요청을 받음

이제 우리가 해야 할 일은 django와 같은 웹서버를 운영중인경우 위 코드에 맞게 오류 코드들을 지정해주어야 한다. 자동으로도 지원이 되지만 클라이언트에게 정확한 정보 전달을 위해서는 위 응답코드를 적재 적소에 사용할 줄 알아야 한다.

0개의 댓글