Hyper Text Transfer Protocol
하이퍼텍스트(HTML) 문서를 교환하기 위해 만들어진 통신규약이다. 즉 웹상에서 네트워크로 서버끼리 통신을 할때 어떠한 형식으로 통신을 하자고 규정해놓은 통신 형식 또는 통신 구조이다.
핵심요소
통신방식
HTTP의 통신방식은 기본적으로 요청/응답 구조로 되어있다.
클라이언트가 HTTP request를 서버에 보내면 서버는 HTTP response를 보내는 구조.
HTTP는 stateless 이다.
stateless란 말 그대로 상태를 저장하지 않는다. 요청이 오면 그에 응답을 할 뿐, 여러 요청/응답끼리 연결되어 있지 않다. 독립적이다.
Request 구조
start line
말 그대로 HTTP request의 첫 라인 start line 또한 3부분으로 구성되어 있다.
HTTP Method
request가 의도한 action을 정의하는 부분.
get,post,put,delete,options 등이 있으며 주로 get 과 Post가 쓰인다. request target
요청이 전송되는 목표 uri 예를들어 /login
HTTP Version
말 그대로 버전 1.0, 1.1, 2.0
headers
해당 요청에 대한 추가 정보를 담고 있는 부분.
key : value 값으로 되어있다.
자주 사용되는 headers 정보
Host
요청이 전송되는 target의 host uri: 예를들어 google.com
User-Agent
요청을 보내는 클라이언트에 대한 정보 예를들어 웹브라우저에 대한 정보
Accept
해당 요청이 받을 수 있는 응답 타입
Connection
해당 요청이 끝난 후 클라이언트와 서버가 계속 네트워크 커넥션을 유지할지 끊을지 지시
Content-Type
해당 요청이 보내는 메시지 body의 타입 예 application/json
Content-Length
메시지 body의 길이
Body
해당 request의 실제 메시지/내용 이며 body가 없는 request도 많다. get 요청들은 대부분 바디가 없다.
Response 구조
status linre
response의 상태를 간략하게 나타내주는 부분
headers
request의 headers와 거의 동일하며 response에서만 사용되는 header값들이 있다. 예 user-agent 대신 server
body
request의 body와 동일하다. 모든 응답에 body가 있지 않다.
RESTful
resful을 알기전 알아두면 좋은 배경지식!
URI
Uniform Resourece Identifier 의 약자이다.
해당 사이트의 특정 자원의 위치를 나타내는 유일한 주소
/login, /news
payload
http request에서 보내는 데이터.
REpresentational State Transfer
웹상에서 사용되는 여러 리소스를 http uri로 표현하고 그 리소스에 대한 행위를 http method로 정의하는 방식이다.
즉 리소스(http uri로 정의된)를 어떻게 한다 (http method + payload)를 구조적으로 깔끔하게 표현하는것.
RESTful API의 장점
가장 명확한 장점은 바로 self-descriptiveness 셀프 서술
restful api는 그 자체만으로 api의 목적이 쉽게 이해가 된다.
restful 개발시 유의점
/슬래시 는 계층관계를 나타낼때 사용된다.
URI에 _언더바는 주로 쓰지 않고 대문자보다 소문자를 쓴다 긴단어도 사용안한다. 가독성을위해
URI는 명사를 사용 HTTP method에서 동사의미를 표현
JWT
JWT 란 JSON Web Token 의 약자이며 웹표준 으로서 두 개체에서 JSON객체를 사용하여 가볍고 자가수용적인 방식으로 정보를 안정성 있게 전달해준다.
대부분의 주로 사용되는 프로그래밍 언어에서 지원이 되며 JWT는 HTTP 헤더에 넣어서 전달 할 수 있고, URL의 파라미터로 손쉽게 전달될 수 있다.
어느 상황에서 JWT를 사용할까
회원 인증: 주로 JWT는 로그인을 하면 서버는 유저에게 토큰을 발급하고 그 후 유저가 서버에 요청을 할 때 마다 JWT를 포함하여 전달한다. 서버가 클라이언트에게 요청을 받을때 마다, 토큰이 유효하고 인증됐는지 검증하고 권한이 있는지 확인한다.
정보 교류: JWT는 두 개체 사이에서 안정성있게 정보를 교환하기에 좋은 방법이다. 그 이유는 정보가 sign이 되어있기 때문.
JWT의 구조
JWT는 .을 구분으로 3가지의 문자열로 되어있다.
header
헤더는 두가지의 정보를 지니고 있다.
type: 토큰의 타입을 지정한다. JWT
alg: 해싱 알고리즘을 지정한다. 보통 HMAC SHA256 또는 RSA 알고리즘은 토큰을 검증할 때 사용되는 signature 부분에서 사용된다.
payload
payload부분에는 토큰에 담을 정보가 들어있다. 여기에 담는 정보의 한 조각을 클레임이라고 부르고 이는 nane/value의 한 쌍으로 이루어져있다.
signature 서명
서명은 헤더의 인코딩값과 정보의 인코딩값을 합친 후 비밀키로 해쉬를 하여 생성힌다.