HTTP 완벽 가이드 1-3. HTTP 메시지 ②


📘 HTTP 완벽 가이드 읽고 정리하기 🐿︎

HTTP 메서드


  • Safe Method : GET과 HEAD 메서드를 사용하는 HTTP 요청의 결과로 인해 서버에서 일어나는 일은 아무것도 없기 때문에 두 메서드는 안전하다고 할 수 있음


GET


  • 주로 서버에 리소스를 달라고 요청하기 위해 사용됨



  • GET처럼 행동 but 서버는 응답으로 헤더만을 돌려줌 (엔터티 본문은 반환되지 않음)

  • 리소스를 가져오지 않고도 그에 대한 무엇인가(ex) 타입)를 알아낼 수 있다.

  • 응답의 상태 코드를 통해 개체가 존재하는지 확인 가능

  • 헤더를 확인 해 리소스가 변경되었는지 검사할 수 있음

  • GET으로 얻는 것과 헤더가 정확히 일치함을 보장해야 함


HEAD


  • GET 메서드가 서버로부터 문서를 읽어 들인다면, PUT 메서드는 서버에 문서를 쓰는 것

  • 서버가 요청의 본문을 가지고 요청 URL의 이름대로 새 문서를 만들거나, 이미 URL이 존재한다면 본문을 사용해서 교체

  • PUT은 콘텐츠를 변경할 수 있게 해주기 때문에 많은 웹 서버가 PUT을 수행하기 전 사용자에게 비밀번호를 입력해서 로그인하도록 요구


POST


  • 서버에 입력 데이터를 전송하기 위해 설계됨

  • HTML 폼을 지원하기 위해 많이 사용됨

  • 폼에 담긴 데이터는 서버로 전송되고, 서버는 이를 모아 필요로 하는 곳(ex) 데이터를 처리할 서버 게이트웨이 프로그램)에 보냄


TRACE


  • 클라이언트에게 자신의 요청이 서버에 도달했을 때 어떻게 보이게 되는지 알려줌

  • 요청 전송의 마지막 단계에 있는 서버는 자신이 받은 요청 메시지를 본문에 넣어 TRACE 응답을 되돌려줌 -> 클라이언트는 자신과 목적지 서버 사이에 있는 모든 HTTP 애플리케이션의 요청/응답 연쇄를 따라가면서 자신이 보낸 메시지가 망가졌거나 수정됐는지, 그렇다면 어떻게 변경되었는지 확인 가능

  • TRACE 요청은 어떠한 엔터티 본문도 보낼 수 없음 > 엔터티 본문에 서버가 받은 요청이 그대로 들어있음


OPTIONS


  • 서버가 특정 리소스에 대해 지원하는 메서드의 목록을 반환하게 함


DELETE


  • 서버에게 요청 URL로 지정한 리소스를 삭제할 것을 요청



상태 코드


  • 상태 코드는 클라이언트에게 그들의 트랜잭션을 이해할 수 있는 쉬운 방법을 제공


100-199


  • 정보성 상태 코드

  • HTTP/1.1에서 도입됨

    • 100 Continue : 요청의 시작 부분 일부가 받아들여졌으며, 클라이언트는 나머지를 계속 이어서 보내야 함 / 100을 보낸 후 서버는 반드시 요청을 받아 응답해야 함

    • 101 Switching Protocols : 클라이언트가 Upgrade 헤더에 나열한 것 중 하나로 서버가 프로토콜을 바꾸었음을 의미


200-299


  • 성공 상태 코드

    • 200 OK : 요청은 정상, 엔터티 본문은 요청된 리소스 포함

    • 201 Created : 서버 개체 생성(ex) PUT) 요청을 위한 것 / 응답은 생성된 리소스에 대한 최대한 구체적인 정보가 담긴 Location 헤더와 함꼐, 그 리소스를 참조할 수 있는 여러 URL을 엔터티 본문에 포함해야 함

    • 203 Non-Authoritative Information : 중개자가 리소스의 사본을 갖고 있었지만 리소스에 대한 메타 정보(헤더)를 검증하지 못한 경우 발생

    • 204 No Content : 응답 메시지는 헤더와 상태줄 포함 but 엔터티 본문 포함하지 않음 / 웹브라우저를 새 문서로 이동시키지 않고 갱신하고자 할 때 사용

    • 205 Reset Content : 주로 브라우저를 위해 사용되는 코드 / 브라우저에게 현재 페이지에 있는 HTML 폼에 채워진 모든 값을 비우라고 말함

    • 206 Partial Content : 부분(범위) 요청 성공 / Content-Rage와 Date 헤더를 반드시 포함해야 하며, Etag와 Content-Location 중 하나의 헤더를 포함해야 함


300-399


  • 리다이렉션 상태 코드

    • 300 Multiple Choices : 클라이언트가 동시에 여러 리소스를 가리키는 URL을 요청한 경우, 그 리소스의 목록과 함께 반환 / 사용자는 목록에서 원하는 하나를 선택할 수 있음 (ex) 어떤 서버가 하나의 HTML 문서를 두 언어로 제공하는 경우)

    • 301 Moved Permanently : 요청한 URL이 옮겨졌을 경우 / 응답은 Location 헤더에 현재 리소스가 존재하고 있는 URL을 포함해야 함

    • 302 Found : ==301 / 클라이언트는 Location 헤더로 주어진 URL을 리소스를 임시로 가리키기 위한 목적으로 사용해아 함 / 이후의 요청에서는 원래 URL을 사용해야 함

    • 303 See Other : 클라이언트에게 리소스를 다른 URL에서 가져와야 한다고 말해주고자 할 때 사용 / 새 URL은 응답 메시지의 Location 헤더에 들어있음 / 주 목적은 POST 요청에 대한 응답으로 클라이언트에게 리소스의 위치를 알려주기 위함

    • 302 Not Modified : 클라이언트가 GET과 같은 조건부 요청을 보냈고, 그 요청한 리소스가 최근에 수정된 일이 없다면, 이 코드는 리소스가 수정되지 않았음을 의미하게 됨 / 응답은 엔터티 본문을 가져서는 안됨

    • 305 Use Proxy : 리소스가 반드시 프락시를 통해 접근되어야 함을 나타내기 위해 사용 / 프락시의 위치는 Location 헤더를 통해 주어짐

    • 307 Temporary Redirect : ==301 / 클라이언트는 Location 헤더로 주어진 URL을 리소스를 임시로 가리키기 위한 목적으로 사용해아 함 / 이후의 요청에서는 원래 URL을 사용해야 함


400-499


  • 클라이언트 에러 상태 코드

    • 400 Bad Request : 클라이언트가 잘못된 요청을 보냄

    • 401 Unauthorized : 리소스를 얻기 전 클라이언트에게 스스로를 인증하라고 요구하는 내용의 응답을 적절한 헤더와 함께 반환

    • 403 Forbidden : 요청이 서버에 의해 거부되었음 / 보통 서버가 거절의 이유를 숨기고 싶을 때 사용

    • 404 Not Found : 서버가 요청한 URL을 찾을 수 없음 / 종종 클라이언트 애플리케이션이 사용자에게 보여주기 위한 엔터티가 포함됨

    • 405 Method Not Allowed : 요청한 URL에 대해 지원하지 않는 메서드로 요청받았을 때 사용 / 요청한 리소스에 대해 어떤 메서드가 사용 가능한지 클라이언트에게 알려주기 위해, 요청에 Allow 헤더가 포함되어야 함

    • 406 Not Acceptable : 주어진 URL에 대한 리소스 중 클라이언트가 받아들일 수 있는 것이 없는 경우 사용 / 종종 서버는 클라이언틍게 왜 요청이 만족될 수 없었는지 알려주는 헤더를 포함

    • 407 Proxy Authentication Required : ==401 / but 리소스에 대해 인증을 요구하는 프락시 서버를 위해 사용

    • 408 Request Timeout : 클라이언트의 요청을 완수하기에 시간이 너무 많이 걸리는 경우, 서버는 이 상태코드로 응답 후 연결을 끊을 수 있음

    • 409 Conflict : 서버는 요청이 충돌을 일으킬 염려가 있다고 생각될 때 이 요청을 보낼 수 있음 / 응답은 충돌에 대해 설명하는 본문을 포함해야 함

    • 410 Gone : 주로 웹 사이트를 유지보수 하면서, 서버 관리자가 클라이언트에게 리소스가 제거된 경우 이를 알려주기 위해 사용

    • 411 Length Required : 서버가 요청 메시지에 Content-Length 헤더가 있을 것을 요구할 때 사용

    • 412 Precondition Failed : 클라이언트가 조건부 요청을 했는데 그 중 하나가 실페

    • 413 Request Entity TOo Large : 클라이언트가 서버가 처리할 수 있는 or 처리하고자 하는 한계를 넘은 크기의 요청을 보냄

    • 414 Request URI Too Long : 클라이언트가 서버가 처리할 수 있는 or 처리하고자 하는 한계를 넘은 길이의 요청 URL이 포함된 요청을 보냄

    • 415 Unsupported Media Type : 클라이언트가 서버가 이해하거나 지원하지 못하는 내용 유형의 엔터티를 보냄

    • 416 Request Range Not Satisfiable : 요청 메시지가 리소스의 특정 범위를 요청했는데, 그 범위가 잘못되었거나 맞지 않음

    • 417 Expectation Failed : 요청에 포함된 Expect 요청 헤더에 서버가 만족시킬 수 없는 기대가 담겨있음


500-599


  • 서버 에러 상태 코드

    • 500 Internal Server Error : 서버가 요청을 처리할 수 없게 만드는 에러를 만났을 때 사용

    • 501 Not Implemented : 서버가 지원하지 않는 메서드를 사용하는 등 클라이언트가 서버의 능력을 넘은 요청을 했을 때 사용

    • 502 Bad Gateway : 프락시나 게이트웨이처럼 행동하는 서버가 그 요청 응답 연쇄에 있는 다음 링크로부터 가짜 응답에 마주쳤을 때 사용 (ex) 자신의 부모 게이트웨이에 접속하는 것이 불가능할 때)

    • 503 Service Unavailable : 현재는 서버가 요청을 처리해 줄 수 없지만 나중에는 가능함을 의미

    • 504 Gateway Timeout : 408과 비슷 but 다른 서버에게 요청을 보내고 응답을 기다리다 타임아웃이 발생한 게이트웨이나 프락시에서 온 응답

    • 505 HTTP Version Not Supported : 서버가 지원할 수 없거나 지원하지 않으려고 하는 버전의 프로토콜로 된 요청을 받았을 때

Categories:

HTTP