HTTP 정리

Park Jae Hong·2022년 8월 4일
0

HTTP란?

: HyperText Transper Protocol, 링크기반(URL)으로 데이터를 요청하고 받겠다는 통신 규약(Protocol)
(HTML / 이미지 / 오디오 / 텍스트 문서같은 리소스들을 서버로부터 통신을 가능하게 만드는 프로토콜)


HTTP 버전

HTTP/0.9
:  단순한 구성으로 이루어져 요청가능한 메서드는 GET 이 유일했고, HTTP 헤더가 존재하지 않아 HTML 파일만 전송이 가능했다. 

HTTP/1.0
: HTTP 헤더 개념이 도입되어, 브라우저가 요청에 대한 성공과 실패를 알 수 있게 되었다. 데이터에 대한 정보를 담고 있는 메타데이터 전송도 허용하고, Content-Type 의 추가는 HTML 외에 다른 문서들도 전송 가능하게 하였다.

HTTP/1.1
: HTTP의 표준 프로토콜이며 많은 부분들이 개선되었다. 개선된 부분 중에는 커넥션 제어에 관한 두가지 모델의 추가도 있다. 하나는 커넥션이 재사용될 수 있는 모델로 서버를 다루다 보면 보게되는 Keep-Alive 옵션이다. 또 다른 하나는 파이프라이닝을 추가하여 요청에 대한 응답이 완전히 전송되기 이전에 두번째 요청을 전송 가능하게 하여 네트워크 지연을 줄이는 모델이다.

HTTP/2
: 구글이 만들었고, 네트워크 지연 시간을 줄이기 위한 성능에 목표를 둔 HTTP의 두 번째 버전. HTTP 헤터 데이터 압축이나 서버 푸시기술 추가 등 많은 부분들이 보완되었다.


GET? POST?

GET
:  GET 은 클라이언트에서 서버로 어떠한 리소스로 부터 정보를 요청하기 위해 사용되는 메서드이다. 
예를들면 게시판의 게시물을 조회할 때 쓸 수 있다.
GET을 통한 요청은 URL 주소 끝에 파라미터로 포함되어 전송되며, 이 부분을 쿼리 스트링 (query string) 이라고 부른다.
방식은 URL 끝에 " ? " 를 붙이고 그다음 변수명1=값1&변수명2=값2... 형식으로 이어 붙이면 된다.

특징

  • GET 요청은 캐시가 가능하다. 
    : GET을 통해 서버에 리소스를 요청할 때 웹 캐시가 요청을 가로채 서버로부터 리소스를 다시 다운로드하는 대신 리소스의 복사본을 반환한다. HTTP 헤더에서 cache-control 헤더를 통해 캐시 옵션을 지정할 수 있다.

  • GET 요청은 브라우저 히스토리에 남는다.

  • GET 요청은 북마크 될 수 있다.

  • GET 요청은 길이 제한이 있다.
    : GET 요청의 길이 제한은 표준이 따로 있는건 아니고 브라우저마다 제한이 다르다고 한다. 

  • GET 요청은 중요한 정보를 다루면 안된다. ( 보안 )
    : GET 요청은 파라미터에 다 노출되어 버리기 때문에 최소한의 보안 의식이라 생각하자.

  • GET은 데이터를 요청할때만 사용 된다.

POST
: POST는 클라이언트에서 서버로 리소스를 생성하거나 업데이트하기 위해 데이터를 보낼 때 사용 되는 메서드다. 예를들면 게시판에 게시글을 작성하는 작업 등을 할 때 사용할 된다.
POST는 전송할 데이터를 HTTP 메시지 body 부분에 담아서 서버로 보낸다. ( body 의 타입은 Content-Type 헤더에 따라 결정 된다.)
GET에서 URL 의 파라미터로 보냈던 name1=value1&name2=value2 가 body에 담겨 보내진다 생각하면 된다.
POST 로 데이터를 전송할 때 길이 제한이 따로 없어 용량이 큰 데이터를 보낼 때 사용하거나 GET처럼 데이터가 외부적으로 드러나는건 아니라서 보안이 필요한 부분에 많이 사용된다. 
( 하지만 데이터를 암호화하지 않으면 body의 데이터도 결국 볼 수 있는건 똑같다. )
POST를 통한 데이터 전송은 보통 HTML form 을 통해 서버로 전송된다. 

특징

  • POST 요청은 캐시되지 않는다.

  • POST 요청은 브라우저 히스토리에 남지 않는다.

  • POST 요청은 북마크 되지 않는다.

  • POST 요청은 데이터 길이에 제한이 없다.

차이점

  • 사용목적
    : GET은 서버의 리소스에서 데이터를 요청할 때, POST는 서버의 리소스를 새로 생성하거나 업데이트할 때 사용한다.
    DB로 따지면 GET은 SELECT 에 가깝고, POST는 Create 에 가깝다고 보면 된다.
  • 요청에 body 유무
    : GET 은 URL 파라미터에 요청하는 데이터를 담아 보내기 때문에 HTTP 메시지에 body가 없다. POST 는 body 에 데이터를 담아 보내기 때문에 당연히 HTTP 메시지에 body가 존재한다.
  • 멱등성 (idempotent)
    : GET 요청은 멱등이며, POST는 멱등이 아니다.

멱등이란 ?
:멱등의 사전적 정의는 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미한다.
(GET은 리소스를 조회한다는 점에서 여러 번 요청하더라도 응답이 똑같을 것 이다. 반대로 POST는 리소스를 새로 생성하거나 업데이트할 때 사용되기 때문에 멱등이 아니라고 볼 수 있다.)


URI? URL?

  • URI (Uniform Resource Identifier)
    :통합 자원 식별자, 인터넷에 있는 자원(리소스)의 유일한 주소

  • URL (Uniform Resource Locator)
    : 파일 리소스의 위치, 네트워크 상의 위치


HTTP 특징 / 기능

1. 비연결성 (Connectless) + 비상태성 (Stateless)

: 1번 요청-1번 응답 후 연결 해제 (일회성, Connectless) 클라이언트의 이전 상태를 알 수 없음 (비상태성, Stateless) -> 쿠키/세션으로 이전 정보 저장
수많은 클라이언트들이 서버로 요청(Request)하더라도 최소유지 가능(장점)

2. Keep-Alive : HTTP/1.1 부터 지원하는 기능

: HTTP의 비연결성(1번의 연결-응답)을 극복위한 기능
지정된 시간동안 연결상태 유지 keep-alive timeout, 시간안에 클라이언트 재요청시 기존 연결을 이용


HTTP Method - 데이터의 CRUD 담당 메서드

  • GET
    : CRUD의 Read(조회), URI에 해당하는 정보의 조회

  • POST
    : CRUD의 Create(생성), 서버 내에 데이터를 생성

  • PUT
    : CRUD의 Update(변경), 자료를 전송하여 해당 URI에 저장(변경)

  • DELETE
    : CRUD의 Delete(삭제), 해당 URI의 자원/정보 삭제

  • HEAD
    : 해당 URI에 해당하는 정보의 Header(메타데이터)만 요청

  • OPTIONS
    : 요청한 URI에 대한 정보 요청가능 정보(어떤 메소드가 가능한지? 등)

  • TRACE
    : 이전까지 요청한 정보들의 목록을 요청

  • PATCH
    : 해당 URI 자원의 일부분 교체(부분 변경),

HTTP 상태 & 응답 코드 (Response Code)

: 해당 HTTP 요청에 대한 서버의 응답 코드 종류 설명

  • 200 - OK : 일반적인 요청 성공의 의미

  • 201 - Created : 리소스 생성 성공에 대한 응답코드, CRUD의 Create (POST 메서드)

  • 202 - Accepted : 대체로 처리 시간이 오래 걸리는 비동기 요청에 대한 응답에 사용

  • 301 - Moved Permanently : 리소스가 이동되었을 경우 응답코드, 이동된 리소스의 URI를 응답 Location헤더에 명시 필요

  • 400 - Bad Request : 일반적인 요청실패 의미, 서버가 이해할 수 없는 형식의 요청일 경우

  • 401 - Unauthorized : 리소스 접근 권한이 없다는 것의 응답코드, Authorization인증 같은 헤더 필요

  • 403 - Forbiddem : 감춰진 리소스 접근 시 응답코드, 401과 달리 인증 여부 관계X 리소스 숨김

  • 404 - Not Found : 해당 URI와 매치되는 리소스가 없다는 의미의 응답코드, 빈번한 응답코드

  • 405 - Method Not Allowed m: 지원하지 않는 요청(POST 처리 컨트롤러 자원에 GET 요청시)에 대한 응답코드,

  • 406 - Not Acceptable : 해당 미디어 타입(MIME 타입) 지원하지 않을 경우 응답코드,

  • 409 - Conflict: 요청에 문제 x, 리소스 상태에 의해 수행 불가능할 경우 응답코드우

  • 500 - Internal Server Error : 일반적인 서버에러, 4xx는 보통 클라이언트 측 에러, 5xx는 보통 서버 측 에러가 대부분

  • 503 - Service Unavailable : 가장 두려운 응답코드 중 하나, 현재 서버 과부하 & 유지보수로 접근 거부


REST란 ?

: Representational State Transfer, HTTP 프로토콜 장점을 최대 활용할 수 있는 네트워크 기반 아키텍처
HTTP 메소드를 사용하여 서버와 통신하는 것을 Restful API라고 함
데이터의 CRUD를 위해 사용 - GET / POST / PUT / DELETE

참고 : https://jaejong.tistory.com/40 , https://noahlogs.tistory.com/35

profile
The people who are crazy enough to think they can change the world are the ones who do. -Steve Jobs-

0개의 댓글