CS/Network

Http와 REST

prden 2022. 12. 10. 15:57

1. Http 프로토콜

HTTP 메시지 프로토콜은 반드시  request/response의 한쌍으로 구성되어있다. 그리고 request와 response는 각각  header와 body로 이루어져 있고 header와 body 사이에는 반드시 한 줄이 띄어져야 한다.

src = https://eastflag.co.kr/fullstack/http_protocol/

Http는 반드시 먼저 요청을 보내야지 response를 받기 때문에 카카오톡과 같이 서버로부터 데이터를 먼저 받는 것은 불가능하다. 먼저 받으려면 FCM푸시나 소켓통신을 통해서 해결해야 한다. 

1) Request 헤더에는 : 리퀘스트라인(리퀘스트에 사용하는 메소드, URI), 상태라인, 헤더필드, 엔티티 헤더필드가 있다.

1) Http method

http method는 request 헤더의 첫 번째 줄 첫 번째에 명시되어 있다. method의 종류, 즉 리소스에 수행할 방법으로는 GET, POST, PUT, DELETE, OPTIONS, PATCH 등 여러 가지가 존재한다. GET(select)은 리소스를 가져오겠다는 의미로, POST(insert)는 리소스에 데이터를 게시하겠다는 의미로, PUT(update)은 리소스의 특정 부분을 수정하겠다는 의미로, DELETE(delete)는 리소스를 삭제하겠다는 의미로 정의되어있다.

그래서, GET, POST, PUT, DELETE 이 4가지 method로 DB와 같은 리소스에 대해서 CRUD가 가능하므로 이 4가지를 조합해서 REST api를 만들어서 사용하고 있다. 그렇지만 REST api는 표준 프로토콜이 아니라 http의 특정 메서드를 활용한 것에 불과하다는 것을 명심해야 한다.

HTTP 메소드의 Idempotent 

https://velog.io/@bae12/HTTP-%EB%A9%94%EC%86%8C%EB%93%9C%EC%9D%98-%EB%A9%B1%EB%93%B1Idempotent%EB%9E%80

 

HTTP 메소드의 멱등(Idempotent)란?

연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미한다. post나 patch는 멱등성을 보장하지 않는 메소드이다.

velog.io

2) content type

헤더 부분에 명시된 content type은 body의 데이터가 어떤 타입인지 명시한다. 그러므로 content type은 request에도 명시될 수 있고, response시에도 명시될 수 있다. html에서 form 방식으로 전송되는 데이터 타입은 x-www-form-url-encoded 방식이다. key=value&key2=value2 이런 형식으로 전송되는 타입이다. 반면, json 형태로 보낼 때는 application/json타입으로 정의한다. 

 

3) status code

상태 코드는 response의 첫 번째 줄 첫 번째에 명시되어있다.

RFC2616 문서의 6.1.1 에 정의되어있다. 개발 시에 상태 코드를 보면 무슨 문제인지를 알 수 있어야 한다. 왜냐하면 상태 코드가 오류가 나면 대부분 개발자 코드에 찍히는 게 아니라 브라우저가 에러를 처리하기 때문이다.

 

4xx번대는 암기하자

 "200"  : OK
 "201"  : Created
 "400"  : Bad Request
 "401"  : Unauthorized
 "402"  : Payment Required
 "403"  : Forbidden
 "404"  : Not Found
 "405"  : Method Not Allowed
 "406"  : Not Acceptable
 "407"  : Proxy Authentication Required
 "408"  : Request Time-out
 "409"  : Conflict
 "410"  : Gone
 "411"  : Length Required
 "412"  : Precondition Failed
 "413"  : Request Entity Too Large
 "414"  : Request-URI Too Large
 "415"  : Unsupported Media Type
 "500"  : Internal Server Error

+ 내용

1) GET 과 POST의 차이점은?

GET은 데이터를 가져오기 위한 목적으로 만들었기 때문에 request 부분에 body가 존재하지 않는다. POST는 데이터 생성을 목적으로 만들었기 때문에 request에 body가 존재해야 한다. 사실 프로토콜상의 차이점은 이것밖에 없다.

 

2)REST api에서 데이터 생성을 하기 위해 GET을 사용해도 되는가?

가능하다. REST는 표준이 아니기 때문에 정하기 나름이다. REST api를 만들기 위해서 모두 POST만 사용한다고 해서 틀린것은 없다. 왜냐하면 REST는 표준이 아니기 때문이다.

 

3)POST 사용시에 GET에서 사용되는 URL 뒤에 ?a=b와 같은 쿼리파라미터를 사용하는 것이 가능한가?

가능하다. GET은 body가 없기 때문에 데이터를 보내기 위해서는 쿼리 파라메터밖에 사용할 수가 없다. 그러나 POST는 body가 있기 때문에 body 데이터를 보낸다. 그러나 쿼리 파라메터를 보내는 것이 불가능하지는 않다.

 

4)request시 content-type을 json으로 설정하고 request body에 text를 보낸다면 어떤 에러가 발생하는가?

415번 unsupported Media Type 에러가 발생한다. request를 받는 서버쪽에서 request body를 json으로 파싱할려다 에러가 나면 이 상태코드를 리턴하게 된다.

5) 상태코드 종류

https://sidepower.tistory.com/245

 

HTTP 에러코드 . 응답코드 . 상태코드 종류와 의미

가끔 스프링부트(springboot) 웹프로젝트를 통해 간단히 서버를 만들고 자바로 구현한 HTTP URL 클라이언트로 업무와 관련된 여러 가지 단편적인 기능 테스트를 진행하면서 공부도 하고 있습니다. 한

sidepower.tistory.com

◎참고(배낌, 자료가 너무 좋다.) : https://eastflag.co.kr/fullstack/http_protocol/

 

'CS > Network' 카테고리의 다른 글

MIME 타입  (0) 2022.12.22
세션 클러스터링  (0) 2022.12.11
● 교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS)  (0) 2022.10.11
CURL(Client URL)  (0) 2022.09.15
IP 주소 묶는 법 CIDR  (0) 2022.06.01