ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TIL.48 HTTP
    TIL 2020. 11. 26. 14:55
    728x90

    웹을 통해서 우리가 어떻게 대화를 할 것인가에 대한 컴퓨터끼리의 약속을 배우는 시간이다.

    (이 HTML로 만든 웹페이지를 어떻게 주고 받을 것인가?)

    HTTP : HTML 파일을 전송하기 위한 하나의 약속이다.

    HTTP에서 HyperText는 HTML(HyperText Markup Language)의 HyperText와 그 의미가 동일하다.

    문서와 문서가 링크로 연결되도록 하는 태그로 구성된 언어란 뜻이다.

    다시 말하면, HTML은 웹페이지를 만들기 위해서 웹브라우저 위에서 동작하는 언어를 뜻한다. 

     

    HyperText 

    HyperText : 문서와 문서가 링크로 연결되어 있음을 뜻함

    Transfer

    HTML로 만든 웹페이지 문서(파일)을 보낸다, 즉 전송한다 라는 큰 의미가 있다

    우리는 우리가 만든 웹사이트를 널리 알리고 다른 사람들과 공유하기 위해 컴퓨터에게 전송해야 한다.

    전송의 핵심보내는 주체받는 주체가 있다는 것이다

    Protocol

    컴퓨터끼리 어떻게 HTML 파일을 주고받을지에 대한 소통방식 또는 약속이다.

    한국사람이 한국어로 소통하듯 컴퓨터도 컴퓨터 끼리의 소통방법이 필요한다.

    이것이 HTTP이며, 대부분의 인터넷 상에서 일어나는 소통은 HTTP 규약을 따른다.

     


    How HTTP works?

    예를들어 인스타그램에서 좋아요? 를 눌렀다면 

    좋아요에 대한 정보를 객체 (파이썬에서는 딕셔너리) 자료 구조형으로 전달해주게 되는데

    이를 JSON이라는 형태의 자료구조로 만들어줘서 모든 백엔드 영역에서 알아들을 수 있는 언어로 보내주는 역할을 한다

     

    이렇게 JSON 형태로 변환된 데이터를 받으면

    백엔드 개발자는 데이터베이스를 통해 데이터를 영구적으로 저장해줘야 한다.

    (왜냐 HTTP는 Stateless 특성을 가지고 있기 때문)

     

    프런트에서는 백엔드에 필요한 자료를 보내주고

    백엔드는 프론트에서 받은 자바스크립트 오브젝트(유저 아이디, 키값 등의 다양한 정보의 조합)

    라는 놈을 데이터베이스에 저장해주고

    정상적으로 저장되었다는 사인을 다시 보내주면 된다.


    HTTP의 2가지 특징

    1. 요청(Request) / 응답(Response)

    소통의 핵심은 요청과 응답

    인간의 소통방식이 -> 컴퓨터끼리의 소통방식에서도 적용되는 것으로

    HTTP 요청과 응답은 그저 메시지에 불과하다

     

    2. Stateless = State(상태) + less(없음) 

    HTTP 통신(요청/응답)은 과거의 HTTP 통신에 대한 내용을 전혀 알지 못함

    매 통신마다 필요한 모든 정보를 담아서 요청을 보낸다.(즉 요청, 데이터 등을 저장하지 않는다)

    HTTP에서는 이러한 특성으로 인해 쿠기, 세션, 토큰 등의 개념이 등장하게 된다.


    Request 메시지 구조

    1. Start line

    POST/users/login      (POST라는 메서드를 이용하여 유저가 로그인하는 요청이다 라는 것을 알려준다)

    HTTP/1.1 -> 1.1 버전으로 소통할 거야라고 알려주는 역할을 한다.

    2. Headers

    metadata를 담아 보내주는 곳으로 이해하자 

    "토근"이라는 정보가 이곳에 담겨 통신된다.

    3. Body

    요청에서 중요한 내용은 Body에 담겨있다

    Response 메시지 구조

    1. Status list

    HTTP/1.1 200 OK --> 네가 HTTP/1.1 버전으로 보낸 요청을 잘 받았다는 "응답 성공"의 의미

    2. Headers

    응답 메시지에 대한 metadate가 들어가 있다.

    3. Body

    토큰이 담겨 요청에 대한 응답으로 돌려주는 곳

    토큰 : 쉽게 말해 티켓이라 생각하자

    티켓을 가지고 있으면 공연장에 입장을 하듯이

    서버 측에서도 토큰이라는 것을 발급하여 이 유저가 우리 서버에 접속했었다 라는 것을 알려주는 역할을 한다.

    내가 이 서비스에 로그인 한 사람인지 아닌지 , 넷플릭스 결제를 했는지 안 했는지 토큰으로 알 수 있다.


    STATUS CODE

    출처 : developer.mozilla.org/ko/docs/Web/HTTP/Status

    정보 응답 (1xx)

    100 Continue이 임시적인 응답은 지금까지의 상태가 괜찮으며 클라이언트가 계속해서 요청을 하거나 이미 요청을 완료한 경우에는 무시해도 되는 것을 알려줍니다. 101 Switching Protocol이 코드는 클라이언트가 보낸 Upgrade 요청 헤더에 대한 응답에 들어가며 서버에서 프로토콜을 변경할 것임을 알려줍니다. 102 Processing (WebDAV)이 코드는 서버가 요청을 수신하였으며 이를 처리하고 있지만, 아직 제대로 된 응답을 알려줄 수 없음을 알려줍니다.
     103 Early Hints이 상태 코드는 주로 Link 헤더와 함께 사용되어 서버가 응답을 준비하는 동안 사용자 에이전트가(user agent) 사전 로딩(preloading)을 시작할 수 있도록 한다.

    성공 응답 (2xx)

    200 OK요청이 성공적으로 되었습니다. 성공의 의미는 HTTP 메서드에 따라 달라집니다:
    GET: 리소스를 불러와서 메시지 바디에 전송되었습니다.
    HEAD: 개체 해더가 메시지 바디에 있습니다.
    PUT 또는 POST: 수행 결과에 대한 리소스가 메시지 바디에 전송되었습니다.
    TRACE: 메시지 바디는 서버에서 수신한 요청 메시지를 포함하고 있습니다.
     201 Created요청이 성공적이었으며 그 결과로 새로운 리소스가 생성되었습니다. 이 응답은 일반적으로 POST 요청 또는 일부 PUT 요청 이후에 따라옵니다. 202 Accepted요청을 수신하였지만 그에 응하여 행동할 수 없습니다. 이 응답은 요청 처리에 대한 결과를 이후에 HTTP로 비동기 응답을 보내는 것에 대해서 명확하게 명시하지 않습니다. 이것은 다른 프로세스에서 처리 또는 서버가 요청을 다루고 있거나 배치 프로세스를 하고 있는 경우를 위해 만들어졌습니다. 203 Non-Authoritative Information이 응답 코드는 돌려받은 메타 정보 세트가 오리진 서버의 것과 일치하지 않지만 로컬이나 서드 파티 복사본에서 모아졌음을 의미합니다. 이러한 조건에서는 이 응답이 아니라 200 OK 응답을 반드시 우선됩니다. 204 No Content요청에 대해서 보내줄 수 있는 콘텐츠가 없지만, 헤더는 의미 있을 수 있습니다. 사용자-에이전트는 리소스가 캐시 된 헤더를 새로운 것으로 업데이트할 수 있습니다. 205 Reset Content이 응답 코드는 요청을 완수한 이후에 사용자 에이전트에게 이 요청을 보낸 문서 뷰를 리셋하라고 알려줍니다. 206 Partial Content이 응답 코드는 클라이언트에서 복수의 스트림을 분할 다운로드를 하고자 범위 헤더를 전송했기 때문에 사용됩니다. 207 Multi-Status (WebDAV)멀티-상태 응답은 여러 리소스가 여러 상태 코드인 상황이 적절한 경우에 해당되는 정보를 전달합니다. 208 Multi-Status (WebDAV)DAV에서 사용됩니다: propstat(property와 status의 합성어) 응답 속성으로 동일 컬렉션으로 바인드 된 복수의 내부 멤버를 반복적으로 열거하는 것을 피하기 위해 사용됩니다. 226 IM Used (HTTP Delta encoding) 서버가 GET 요청에 대한 리소스의 의무를 다 했고, 그리고 응답이 하나 또는 그 이상의 인스턴스 조작이 현재 인스턴스에 적용이 되었음을 알려줍니다.


     

    리다이렉션 메시지 (3xx)

    300 Multiple Choice요청에 대해서 하나 이상의 응답이 가능합니다. 사용자 에이전트 또는 사용자는 그중에 하나를 반드시 선택해야 합니다. 응답 중 하나를 선택하는 방법에 대한 표준화된 방법은 존재하지 않습니다. 301 Moved Permanently이 응답 코드는 요청한 리소스의 URI가 변경되었음을 의미합니다. 새로운 URI가 응답에서 아마도 주어질 수 있습니다. 302 Found이 응답 코드는 요청한 리소스의 URI가 일시적으로 변경되었음을 의미합니다. 새롭게 변경된 URI는 나중에 만들어질 수 있습니다. 그러므로, 클라이언트는 향후의 요청도 반드시 동일한 URI로 해야 합니다. 303 See Other클라이언트가 요청한 리소스를 다른 URI에서 GET 요청을 통해 얻어야 할 때, 서버가 클라이언트로 직접 보내는 응답입니다. 304 Not Modified 이것은 캐시를 목적으로 사용됩니다. 이것은 클라이언트에게 응답이 수정되지 않았음을 알려주며, 그러므로 클라이언트는 계속해서 응답의 캐시 된 버전을 사용할 수 있습니다. 305 Use Proxy이전 버전의 HTTP 기술 사양에서 정의되었으며, 요청한 응답은 반드시 프락시를 통해서 접속해야 하는 것을 알려줍니다. 이것은 프락시의 in-band 설정에 대한 보안상의 걱정으로 인하여 사라져 가고있습니다. 306 unused이 응답 코드는 더 이상 사용되지 않으며, 현재는 추후 사용을 위해 예약되어 있습니다. 이것은 HTTP 1.1 기술사양 이전 버전에서 사용되었습니다. 307 Temporary Redirect클라리언트가 요청한 리소스가 다른 URI에 있으며, 이전 요청과 동일한 메서드를 사용하여 요청해야할 때, 서버가 클라이언트에 이 응답을 직접 보냅니다. 이것은302 FoundHTTP 응답 코드와 동일한 의미를 가지고 있으며, 사용자 에이전트가 반드시 사용된 HTTP 메소드를 변경하지 말아야 하는 점만 다릅니다: 만약 첫 요청에POST가 사용되었다면, 두 번째 요청도 반드시POST를 사용해야 합니다. 308 Permanent Redirect 이것은 리소스가 이제 HTTP 응답 헤더의Location:에 명시된 영구히 다른 URI에 위치하고 있음을 의미합니다. 이것은301 Moved PermanentlyHTTP 응답 코드와 동일한  의미를 가지고 있으며, 사용자 에이전트가 반드시 HTTP 메서드를 변경하지 말아야 하는 점만 다릅니다: 만약 첫 요청에 POST가 사용되었다면, 두 번째 요청도 반드시POST를 사용해야 합니다.

    클라이언트 에러 응답 (4xx)

    400 Bad Request이 응답은 잘못된 문법으로 인하여 서버가 요청을 이해할 수 없음을 의미합니다. 401 Unauthorized 비록 HTTP 표준에서는 "미승인(unauthorized)"를 명확히 하고 있지만, 의미상 이 응답은 "비인증(unauthenticated)"을 의미합니다. 클라이언트는 요청한 응답을 받기 위해서는 반드시 스스로를 인증해야 합니다. 402 Payment Required이 응답 코드는 나중에 사용될 것을 대비해 예약되었습니다. 첫 목표로는 디지털 결제 시스템에 사용하기 위하여 만들어졌지만 지금 사용되고 있지는 않습니다. 403 Forbidden클라이언트는 콘텐츠에 접근할 권리를 가지고 있지 않습니다. 예를 들어 그들은 미승인이어서 서버는 거절을 위한 적절한 응답을 보냅니다. 401과 다른 점은 서버가 클라이언트가 누구인지 알고 있습니다. 404 Not Found서버는 요청받은 리소스를 찾을 수 없습니다. 브라우저에서는 알려지지 않은 URL을 의미합니다. 이것은 API에서 종점은 적절하지만 리소스 자체는 존재하지 않음을 의미할 수도 있습니다. 서버들은 인증받지 않은 클라이언트로부터 리소스를 숨기기 위하여 이 응답을 403 대신에 전송할 수도 있습니다. 이 응답 코드는 웹에서 반복적으로 발생하기 때문에 가장 유명할지도 모릅니다. 405 Method Not Allowed 요청한 메서드는 서버에서 알고 있지만, 제거되었고 사용할 수 없습니다. 예를 들어, 어떤 API에서 리소스를 삭제하는 것을 금지할 수 있습니다. 필수적인 메서드인GET과 HEAD는 제거될 수 없으며 이 에러 코드를 리턴할 수 없습니다. 406 Not Acceptable이 응답은 서버가 서버 주도 콘텐츠 협상을 수행한 이후, 사용자 에이전트에서 정해준 규격에 따른 어떠한 콘텐츠도 찾지 않았을 때, 웹서버가 보냅니다. 407 Proxy Authentication Required 이것은 401과 비슷하지만 프락시에 의해 완료된 인증이 필요합니다. 408 Request Timeout이 응답은 요청을 한지 시간이 오래된 연결에 일부 서버가 전송하며, 어떨 때에는 이전에 클라이언트로부터 어떠한 요청이 없었다고 하더라도 보내지기도 합니다. 이것은 서버가 사용되지 않는 연결을 끊고 싶어 한다는 것을 의미합니다. 이 응답은 특정 몇몇 브라우저에서 빈번하게 보이는데, Chrome, Firefox 27+, 또는 IE9와 같은 웹서핑 속도를 올리기 위해 HTTP 사전 연결 메커니즘을 사용하는 브라우저들이 해당됩니다. 또한 일부 서버는 이 메시지를 보내지 않고 연결을 끊어버리기도 합니다. 409 Conflict이 응답은 요청이 현재 서버의 상태와 충돌될 때 보냅니다. 410 Gone이 응답은 요청한 콘텐츠가 서버에서 영구적으로 삭제되었으며, 전달해 줄 수 있는 주소 역시 존재하지 않을 때 보냅니다. 클라이언트가 그들의 캐시와 리소스에 대한 링크를 지우기를 기대합니다. HTTP 기술 사양은 이 상태 코드가 "일시적인, 홍보용 서비스"에 사용되기를 기대합니다. API는 알려진 리소스가 이 상태 코드와 함께 삭제되었다고 강요해서는 안된다. 411 Length Required서버에서 필요로 하는 Content-Length 헤더 필드가 정의되지 않은 요청이 들어왔기 때문에 서버가 요청을 거절합니다. 412 Precondition Failed클라이언트의 헤더에 있는 전제조건은 서버의 전제조건에 적절하지 않습니다. 413 Payload Too Large요청 엔티티는 서버에서 정의한 한계보다 큽니다; 서버는 연결을 끊거나 혹은 Retry-After 헤더 필드로 돌려보낼 것이다. 414 URI Too Long클라이언트가 요청한 URI는 서버에서 처리하지 않기로 한 길이보다 깁니다. 415 Unsupported Media Type 요청한 미디어 포맷은 서버에서 지원하지 않습니다, 서버는 해당 요청을 거절할 것입니다. 416 Requested Range Not SatisfiableRange 헤더 필드에 요청한 지정 범위를 만족시킬 수 없습니다; 범위가 타깃 URI 데이터의 크기를 벗어났을 가능성이 있습니다. 417 Expectation Failed이 응답 코드는 Expect 요청 헤더 필드로 요청한 예상이 서버에서는 적당하지 않음을 알려줍니다. 418 I'm a teapot서버는 커피를 찻 주전자에 끓이는 것을 거절합니다. 421 Misdirected Request서버로 유도된 요청은 응답을 생성할 수 없습니다. 이것은 서버에서 요청 URI와 연결된 스킴과 권한을 구성하여 응답을 생성할 수 없을 때 보내집니다. 422 Unprocessable Entity (WebDAV)요청은 잘 만들어졌지만, 문법 오류로 인하여 따를 수 없습니다. 423 Locked (WebDAV)리소스는 접근하는 것이 잠겨있습니다. 424 Failed Dependency (WebDAV)이전 요청이 실패하였기 때문에 지금의 요청도 실패하였습니다. 426 Upgrade Required서버는 지금의 프로토콜을 사용하여 요청을 처리하는 것을 거절하였지만, 클라이언트가 다른 프로토콜로 업그레이드를 하면 처리를 할지도 모릅니다. 서버는 Upgrade 헤더와 필요로 하는 프로토콜을 알려주기 위해 426 응답에 보냅니다. 428 Precondition Required오리진 서버는 요청이 조건적이어야 합니다. 클라이언트가 리소스를 GET 해서, 수정하고, 그리고 PUT으로 서버에 돌려놓는 동안 서드파티가 서버의 상태를 수정하여 발생하는 충돌인 '업데이트 상실'을 예방하기 위한 목적입니다. 429 Too Many Requests사용자가 지정된 시간에 너무 많은 요청을 보냈습니다("rate limiting"). 431 Request Header Fields Too Large 요청한 헤더 필드가 너무 크기 때문에 서버는 요청을 처리하지 않을 것입니다. 요청은 크기를 줄인 다음에 다시 전송해야 합니다. 451 Unavailable For Legal Reasons사용자가 요청한 것은 정부에 의해 검열된 웹 페이지와 같은 불법적인 리소스입니다.

    서버 에러 응답(5xx)

    500 Internal Server Error서버가 처리 방법을 모르는 상황이 발생했습니다. 서버는 아직 처리 방법을 알 수 없습니다. 501 Not Implemented요청 방법은 서버에서 지원되지 않으므로 처리할 수 없습니다. 서버가 지원해야 하는 유일한 방법은 GET와 HEAD이다. 이 코드는 반환하면 안 됩니다. 502 Bad Gateway이 오류 응답은 서버가 요청을 처리하는 데 필요한 응답을 얻기 위해 게이트웨이로 작업하는 동안 잘못된 응답을 수신했음을 의미합니다. 503 Service Unavailable서버가 요청을 처리할 준비가 되지 않았습니다. 일반적인 원인은 유지보수를 위해 작동이 중단되거나 과부하가 걸렸을 때입니다. 이 응답과 함께 문제를 설명하는 사용자 친화적인 페이지가 전송되어야 한다는 점에 유의하십시오. 이 응답은 임시 조건에 사용되어야 하며, Retry-After: HTTP 헤더는 가능하면 서비스를 복구하기 전 예상 시간을 포함해야 합니다. 웹마스터는 또한 이러한 일시적인 조건 응답을 캐시 하지 않아야 하므로 이 응답과 함께 전송되는 캐싱 관련 헤더에 대해서도 주의해야 합니다. 504 Gateway Timeout이 오류 응답은 서버가 게이트웨이 역할을 하고 있으며 적시에 응답을 받을 수 없을 때 주어집니다. 505 HTTP Version Not Supported요청에 사용된 HTTP 버전은 서버에서 지원되지 않습니다. 506 Variant Also Negotiates서버에 내부 구성 오류가 있다. 즉, 요청을 위한 투명한 콘텐츠 협상이 순환 참조로 이어진다. 507 Insufficient Storage서버에 내부 구성 오류가 있다. 즉, 선택한 가변 리소스는 투명한 콘텐츠 협상에 참여하도록 구성되므로 협상 프로세스의 적절한 종료 지점이 아닙니다. 508 Loop Detected (WebDAV)서버가 요청을 처리하는 동안 무한 루프를 감지했습니다. 510 Not Extended서버가 요청을 이행하려면 요청에 대한 추가 확장이 필요합니다. 511 Network Authentication Required511 상태 코드는 클라이언트가 네트워크 액세스를 얻기 위해 인증을 받아야 할 필요가 있음을 나타냅니다.

    728x90

    'TIL' 카테고리의 다른 글

    TIL.56 SPA_UX 및 개발자  (0) 2020.12.04
    TIL.49 How the web works?  (0) 2020.11.27
    TIL.47 Git& Github  (0) 2020.11.25
    TIL.46 리눅스 & 터미널을 이용한 개발환경 설정  (0) 2020.11.24
    TIL.45 Database  (0) 2020.11.23
Designed by Tistory.