HTTP
- http란 Hyper Text Transper Protocol의 약자로 하이퍼텍스트를 전송하기 위한 규약이다.
- 클라이언트 : 서버에게 요청을 보내는 리소스 사용자
ex) 웹브라우저, 모바일 애플리케이션, IoT...
- 서버: 클라이언트에게 요청에 대한 응답을 제공하는 리소스 관리
- http는 웹에서만 사용하는 프로토콜로 TCP/IP 기반으로 서버와 클라이언트의 요청과 응답을 전송한다.
HTTP 동작
- http메세지는 http서버와 http클라이언트에 의해 해석된다
- 연결상태를 유지하지 않는 비연결성 프로토콜이고 이러한 단점을 해결하기 위해 cookie와 session이 등장했다.
- 클라이언트가 서버에 request를 보내면 서버는 클라이언트에게 reponse를 보내고 연결을 끊는 방식으로 동작한다
Request & Response
Request
- HTTP Request는 크게 3부분으로 나눠진다.
Start line
- 가장 첫번째 줄을 의미한다.
- Start line은 3부분으로 나워진다.
- HTTP Method
해당 request가 의도한 action을 정의하는 부분.
HTTP Methods에는 GET, POST, PUT, DELETE, OPTIONS 등등이 있다.
주로 GET 과 POST과 쓰임.
- Request target
해당 request가 전송되는 목표 URI.
예를 들어 /login.
- HTTP Version
웹브라우저가 사용하는 HTTP 버젼.
- host
- 요청이 전송되는 target의 host URL
ex) naver.com
- User-Agent
- 웹브라우저라고도 한다.
- 어떤 웹브라이저를 사용하는지 나타낸다.
- Accept-Encoding
- 웹브라우저 웹서버가 통신하는 데이터가 많을 경우 이것을 압축해서 보내고 웹 브라우저가 압출을 푼다
- IF-Modified-Since
- Connection
- 요청이 끝난후 클라이언트와 서버가 계속해서 네트워크 컨넥션을 유지하는 지 에 대해 제시하는 부분
- Content-Type
- 해당 요청이 보내는 메세지 Body의 타입
ex) JSON을 보내면 application/json
- Content-Length
Body
- 해당 reqeust의 실제 메세지/내용.
- Body가 없는 request도 많다.(PUT,POST 경우에만 존재)
ex) GET request들은 대부분 body가 없는 경우가 많음.
- Header와 Body를 구분할 때 한 줄 비어놓는다.
Response
- request와 마친가지로 3부분으로 나누어져있다
- Status line / Headers / Body
Status Line
- response상태 간략하게 나타내주는 부분으로 3부분으로 나눠져있다
- HTTP 버젼
- Status Code 응답 상태를 나나내는 코드, 숫자로 되어있다
- 1XX 정보를 주기위한 것 잘안씀
- 2XX 성공했다는 정보 긍정적인 메세지
- 3XX Redirection
Ex) A.com으로 접속을 했는데 서버에서 3XX응답해주면 웹브라우저가 다른곳으로 다시 이동한다.
- 4XX 클라이언트쪽 에러
- 5XX 서버쪽 에러
- Status Text 응답 상태를 간략하게 설명해주는 부분
EX) HTTP/1.1 404 Not Found
- request 와 동일하지만 response에서만 사용하는 Hearder 값들이있다
- Ex) User-Agent 대신에 Server 헤더가 사용된다
- Header 정보가 위치한다. ( Header Name : Header Value )형식
- 날짜, 웹서버 이름, 웹서버 버전, 콘텐츠 타입, 콘텐츠 길이, 캐시 제어 방식
Body
- Request body와 일반적으로 동일
- 데이터를 전송할 필요가 없을 경우 비어있다.(201 Created, 204 No Content)
HTTP Method
- 요청하는 데이터에 특정 동작을 수행하고 싶을때 HTTP 요청 메서드를 이용한다.
GET
- 존재하는 자원에 대한 요청
- 서버에게 RESOURCE를 보내도록 요청하는데 사용한다
- 서버의 RESOURCE를 읽는다
HEAD
- 서버헤드 정보 획득. GET과 비듯 하지만 RESPONSE BODY를 반환하지 않는다.
- GET과 동일하지만 서버에서 BODY를 리턴하지 않는다
- RESOURCE를 받지 않고 오직 찾기만 원할 때
- OBJECT가 존재할 경우 응답의 상태 코드를 확인할떄
- 서버의 응답 헤더를 봄으로써 RESOURCE가 수정되었는지 확인
PUT
- 존재하는 자원에 대한 변경(Update)
- 서버에 문서를 쓸때 사용한다 (GET과 반대)
- PUT은 서버가 클라이언트 요청의 BODY를 확인한다
- 요청된 URL에 정의된 새로운 RESOURCE를 생성하기 위함
- 요청된 URL이 존재할 경우 대체하여 사용한다
POST
- 새로운 자원 생성(Insert)
- 서버에 Input Data를 보내기 위함 (HTML form에 많이 사용)
PUT vs POST
- PUT은 서버의 resource에 DATA를 저장하기 위한 용도
- POST는 서버에 DATA를 보내기 위한 용도
TRACE
- 클라이언트로 부터 Request Packet이 방화벽 Proxy Server, Gateway등을 거치면서 packet의 변조가 일어날 수 있는데, 이 때 Server에 도달 했을 때의 최종 Packet의 Request Packet을 볼 수 있다.
- 메세지가 거쳐가는 Proxy Server, Gateway의 중간 경로, 최종 수신 서버에 이르는 경로를 알아낼 수 있다.
- 루프백 테스트(올바르게 작동하는지 확인하는 테스트) 수행
DELETE
OPTIONS
- 서버 옵션들을 확인하기 위한 요청
- Target Server의 지원 가능한 메소드를 알아보기 위함
멱등성, 안정성, 캐시가능성
멱등성
사전적의미로 수학이나 전산학에서 연산의 한 성질을 나타내는 것으로, 연산을 여러 번 적용하다라도 결과는 달라지지 않는 성질을 의미한다.
특정 HTTP 메서드를 요청 했을 때, 매번 요청 결과가 같게 나오면 해당하는 메서드는 멱등성을 가진다.
ex) PUT, DELETE, TRACE, GET, HEAD, OPTIONS
안전성
HTTP는 안전한 메서드의 집합이다.
안정있는 메서드는 안전하지 않은 메서드가 사용될 때 사용자에게 알려주도록 한다.
리소스를 수정하지 않는, 읽기전용인 경우 안전한 메서드로 간주한다
ex) GET, HEAD, OPTIONS가 여기에 속한다
캐시 가능성
재사용을 위해 이에 대한 응답을 저장할 수 있는것을 나타낸다
현재 시점의 응답이나, 권한이 있는 응답에 의존하지 않는 안전한 메서드는 캐시 가능한것으로 정의한다.
메소드
GET
- 서버에 리소스를 달라고 요청하기 위해 쓰이는 메소드 이다.
다시말해 서버에서 어떤 데이터를 가져와 보여주는 용도이다.
- 안정성과 멱등성은 신뢰되지 않는 네트워크 상의 HTTP를 신뢰할 수 있게 만들어준다. 만약 GET요청을 하고 응답을 받지 못했을 경우 다시 보내더라도 안전하다.
HEAD
- 웹 서버에서 헤더 정보 이외에는 어떠한 데이터 보내지 않느다
- 웹서버 다운 여부 점검이나 정보등을 얻기 위해 사용된다.
- 서버는 응답으로 헤더만 돌려주기 때문에 리소스를 가져오지 않고도, 무언가를 알아낼수 있을 때 사용한다.
POST
- 엔티티를 전송하기 위해 사용한다
- 서버에 입력 데이터를 전송하기 위한 메소드
- 같은 POST를 연속적으로 보내면 명령을 여러번 내린 것처럼 부가적인 결과를 가져온다.
- 비멱등성을 가진다.
PUT
- POST와 유사한 전송 구조를 가지고 있기 때문에 헤더 이외에 데이터가 전송된다.
- 서버가 요청하는 본문을 가지고 요청하는 URI의 이름대로 새 데이터를 만들거나, 이미 URI가 존재하면 본문을 사용해서 교체한다.
- 데이터 변경이 가능해서 서버 입장에서 위험하다.
- POST와는 다르게 PUT은 멱등성을 가지고 있다.
POST & PUT
- POST와 PUT은 멱등성과 리소스 결정권에 따라 나뉜다고 보면 된다.
- 멱등성을 갖지 않고 리소스를 서버가 결정하면 POST
- 멱등성을 작고 리소스를 클라이언트가 결정하면 PUT
DELETE
- 웹 서버에 파일을 삭제하기 위해 사용되고 PUT과 반대 개념
- 서버에게 요청 URL로 지적한 리소스를 삭제할 것을 요청한다. 하지만 서버가 클라이언트에게 알리지 않고 요청을 무시 할 수도 있어, 클라이언트는 삭제가 되는지 보장할 수가 없다.
- 대부분 멱등성을 가지면 안전성도 가지고 있는데, DELETE는 리소스 변경이 가능하기 때문에 안전하지는 않고 멱등성만 가지고 있다.
TRACE
- 요청이 서버에 도착했을 때 어떻게 보이게 되는지 알려준다
- 디버깅용을 사용된다.
OPTIONS
- 웹 서버에게 여러 종류의 지원 범위에 대해 물어본다
- 서버에게 특정 리소스에 대해 어떤 메서드가 지원되는지 물어볼 수 있다.