HTTP 특징
- TCP/IP을 이용한 응용 프로토콜이다.
- 연결 상태를 유지하지 않는 비연결성 프로토콜이다.
- 요청과 응답 방식으로 동작한다.
- 서버와 클라이언트에 의해 HTTP 메세지가 해석된다.
HTTP Method
Method설명
GET | URI가 가진 정보를 검색하기 위해 요청하는 메소드 |
---|---|
HEAD | GET메소드와 방식은 동일하지만, 응답에 BODY가 없고 응답 코드와 HEAD만 응답하는데 사용되는 메소드 |
POST | 요청된 자원을 생성하기 위한 메소드 |
PUT | 요청된 자원을 수정할때 사용하고, PATHCH와는 다르게 자원 전체를 갱신하는데 사용되는 메소드 |
PATCH | PUT메소드와 유사하게 요청된 자원을 수정할때 사용되지만, 자원의 일부를 수정하는 의미로 사용되는 메소드 |
DELETE | 요청된 자원을 삭제하기 위한 메소드 |
CONNECT | 동적으로 터널 모드를 교환하고 프락시 기능을 요청할때 사용하는 메소드 |
TRACE | 원격 서버에 루프백 메세지를 호출하기 위해 테스트용도로 사용하는 메소드 |
OPTIONS | 웹 서버에서 지원하는 메소드의 종류들을 확인할 경우 사용하는 메소드 |
GET과 POST의 차이에 대해서 말해주세요!
GET이란?
GET은 클라이언트에서 서버로 어떠한 리소스로부터 정보를 요청하기 위해 사용되는 메서드입니다.
GET을 통한 요청은 URL 주소 끝에 파라미터로 포함되어 전송되며, 이 부분을 쿼리 스트링(Query String)이라고 부릅니다.
방식은 URL 끝에 "?"를 붙이고 그 다음 변수명1 = 값1& 변수명2 = 값2... 형식으로 이어 붙이는 것입니다.
- HTTP 프로토콜을 이용해서 서버에 데이터(요청 정보)를 전달할 때 사용하는 방식
- 정보를 조회하기 위한 메서드(Method)
- 서버에서 어떤 데이터를 가져와 보여주기 위한 용도의 메서드(Method)
GET의 특징
- URL에 요청 정보를 붙여서 전송
- URL에 요청 정보가 이어붙어 길이 제한이 있어, 대용량의 데이터를 전송하기 어렵다
- 한 번 요청 시 전송 데이터의 양은 255자로 제한된다.(HTTP/1.1은 2048자)
- 요청 정보를 사용자가 쉽게 눈으로 확인할 수 있음, 중요한 정보를 다루면 안된다.
- HTTP 패킷의 Body는 비어있는 상태로 전송(Body의 데이터 타입을 표현하는 Content-Type 필드도 HTTP Request Header에 들어가지 않음)
- POST 방식보다 빠르며, GET 방식은 캐싱을 사용할 수 있어, GET 요청과 그에 대한 응답이 브라우저에 의해 캐시 된다.
- 북마크 될 수 있다(??????)
POST 란?
서버의 값이나 상태를 바꾸기 위한 용도의 메서드이며 수행하는 것이다.
요청 정보를 HTTP 패킷의 Body 안에 숨겨서 서버로 전송한다.
Request Header의 Content-Type에 해당 데이터 타입이 표현되며, 전송하고자 하는 데이터 타입을 적어줍니다.
GET에서 URL의 파라미터로 보냈던 name1 = value, name2 = value2가 body에 담겨 보내진다고 생각하면 된다.
- Default : application / octet-stream
- 단순 txt : text / plain
- 파일 : multipart / form-date
POST 특징
- Body 안에 숨겨서 요청 정보를 전송하며, 대용량의 데이터를 전송하기에 적합
- 클라이언트 쪽에서 데이터를 인코딩하여 서버로 전송하고, 이를 받은 서버 쪽이 해당 데이터를 디코딩해서 GET 방식보다 안전
- 클라이언트에서 서버로 리소스를 생성하거나 업데이트 하기 위해 데이터를 보낼 때 사용되는 메서드
- 전송할 데이터를 HTTP 메시지 body 부분에 담아서 서버로 보댄다. body 타입은 Content-Type 헤더에 따라 결정된다.
- 데이터를 전송할때 길이 제한이 따로 없어 용량이 큰 데이터를 보낼 때 사용
- GET 처럼 데이터가 외부적으로 드러나는건 아니라 보안이 필요한 부분에 많이 사용된다.
- 데이터를 암호화하지 않으면 body의 데이터도 볼수 있는 건 같습니다.
GET과 POST의 차이점
사용목적에서 차이가 있습니다.
- GET은 서버의 리소스에서 데이터를 요청(SELECT)
- POST는 서버의 리소스를 새로 생성하거나 업데이트를 할 때 사용(CREATE)
요청의 body 유무
- GET은 URL 파라미터에 요청하는 데이터를 담아 보내기 때문에 HTTP 메시지에 body가 없습니다.
- POST는 body에 데이터를 담아 보내기 때문에 HTTP 메시지에 body가 존재합니다.
멱등성의 차이가 있습니다.
멱등성이란 연산을 여러번 적용하더라도 결과가 달라지지 않는 성질을 의미합니다.
GET 요청은 멱등이며, POST는 멱등이 아닙니다.
- GET은 리소스를 조회한다는 점에서 여러번 요청하더라도 응답이 똑같습니다.
- POST는 리소스를 새로 생성하거나 업데이트할 때 사용되기 때문에 멱등이 아닙니다. (POST 요청시 서버가 변경될 수 있습니다.)
예상질문
조회하기 위한 용도 POST가 아닌 GET 방식을 사용하는 이유?
설계 원칙에 따라 GET 방식은 서버에게 여러 번 요청을 하더라도 동일한 응답이 돌아와야 합니다. 멱등이기 때문입니다.
GET 방식은 가져오는 것(Select) 으로, 서버의 데이터나 상태를 변경시키지 않기 때문입니다.
Ex) 게시판의 리스트, 게시글 보기 기능
예외) 방문자의 로그 남기기, 글을 읽은 횟수 증가 기능
POST 방식은 수행하는 것 으로, 서버의 값이나 상태를 바꾸기 위한 용도이다.
Ex) 게시판에 글쓰기 기능
웹에서 모든 리소스는 Link할 수 있는 URL을 가지고 있어야 한다.
어떤 웹페이지를 보고 있을 때 다른 사람한테 그 주소를 주기 위해서 주소창의 URL을 복사해서 줄 수 있어야 한다.
즉, 어떤 웹페이지를 조회할 때 원하는 페이지로 바로 이동하거나 이동시키기 위해서는 해당 링크의 정보가 필요하다.
이때 POST 방식을 사용할 경우에 값(링크의 정보)이 Body에 있기 때문에 URL만 전달할 수 없으므로 GET 방식을 사용해야한다. 그러나 글을 저장하는 경우에는 URL을 제공할 필요가 없기 때문에 POST 방식을 사용한다.
HTTP Status Code
정보전송 임시응답 (1xx)
- 서버가 요청을 클라이언트에서 성공적으로 수신을 했고 서버에서 처리중인 정보를 보낸디.Status Code설명
100 Continue 101 Swiching protocols
성공 (2xx)
- 서버가 요청을 성공적으로 받았음을 알려준다.Status Code설명
200 Ok! 201 Created 202 Accepted 203 Non-authoritative Information 204 No Cotent
리다이렉션 (3xx)
- 캐싱된 파일을 새로고침 하여 확인하면 3xx대 코드을 받을 수 있다.Status Code설명
301 Moved permanently 302 Not temporarily 303 Not modified
클라이언트 요청 오류 (4xx)
- 클라이언에서 서버에 잘못된 요청을 보내 서버가 요청을 해결 할 수 없을때 발생하는 코드이며, 클라이언트측에서 발생하는 코드이다.Status Code설명
400 Bad Request 401 Unauthorized 402 Payment required 403 Forbidden 404 Not found 405 Method not allowed 407 Proxy authentication required 408 Request timeout 410 Gone 412 Precondition failed 414 Request-URI too long
서버에러 (5xx)
- 클라이언트의 요청을 받고 서버에서 처리하지 못할때 발생하는 코드이며, 서버측에서 발생하는 코드이다.Status Code설명
500 Internal server error 501 Not implemented 503 Service unnailable 504 Gateway timeout 505 HTTP version not supported
'CS > 네트워크' 카테고리의 다른 글
WebSocket과 Socket.io의 차이 (0) | 2022.01.26 |
---|---|
SSL/TLS Handshake에 대해서 (0) | 2022.01.20 |
프록시(Proxy)란 ????????! (0) | 2022.01.17 |
로드 밸런싱(Load Balancing) 이란? (0) | 2022.01.16 |
웹사이트에 접속할 때 일어나는 상황에 대해서 (0) | 2022.01.15 |