[HTTP] HTTP 통신(Stateless, Respond, Request, Status Code)
면접에서 많이 물어보기 때문에 잘 알아두자
HTTP란 무엇인가?
-
컴퓨터끼리 통신할 때 쓰는 하나의 통신 방법이다.
-
프론트엔드와 백엔드가 데이터를 주고 받을 때 HTTP 규약을 지킬 것이다.
Hyper Text: 문서와 문서가 링크로 연결되어 있음
Transfer : HTML로 만든 웹페이지 문서(파일)를 보낸다
Protocol : 규약. 컴퓨터끼리 어떻게 HTML 파일을 주고 받을 지에 대한 소통 방식 또는 약속HTTP의 특징
-
요청(request)과 응답(response)으로 이루어져 있다
: 따라서 안물안궁이면 응답하면 안된다! 응답보다 요청이 먼저 이루어져야함
client가 request를 보내면 server에서 response를 보내준다.
1요청 1응답이다.
-
기억력이 없다(stateless)
: 매 통신마다 사전에 필요한 모든 정보를 담아서 요청을 보내야 한다
(주로 token에 정보를 담아 요청하고 있음)
-
Stateless란 무엇인가?
HTTP 개별 통신은 모두 독립이어서, 과거의 HTTP 통신의 결과(상태)를 보존하지 않는다. 이를 stateless라고 하고, 그 반대로 이전의 결과를 보존하는 것을 statefull이라 한다.
그러면 결과를 보존하는 것이 더 효율적이고 간단하지 않을까? 그럼에도 불구하고 HTTP가 statefull이 아닌 stateless를 사용하는 이유는 무엇일까?
예를들어, 넷플릭스처럼 1초에 수천 개의 요청이 들어올 때 만약 HTTP가 statefull이라면 과부하가 온다. 그래서 각 요청을 별개로 사용하는 stateless를 선택한 것이다.
Request, Response의 구조
Request과 Response 메시지의 큰 구조는 시작
, 헤드
, 바디
로 동일하나, 첫번 째 파트인 시작
부분이 조금 다르다.
Start Line(Request) : 첫번 째 줄이자 메시지의 제목
POST /login HTTP/1.1
- HTTP method : 요청이 의도한 액션을 정의
- Request target : 내가 요청을 보내고자 하는 곳. 요청을 받게되는 목표 url
- HTTP version : HTTP의 버전
Status Line(Response) : 상태를 나타냄
HTTP/1.1 404 Not Found
HTTP/1,1 200 SUCCESS
HTTP/1.1 201 Created
HTTP/1.1 204 No Content
- HTTTP version : HTTP 버전
- Status Code : 응답 상태 코드
- Status Text : 응답의 상태를 간략히 설명하는 텍스트
바디
파트의 메시지 대신에 사용하는 이유는 짧고 통일성을 가지려고 ...!
Headers : 요청에 필요한 부가적인 정보(메타 데이터)를 담고있는 부분
- {key:value}의 형태로 되어 있다
Headers : {
Host : www.naver.com
User-Agent : chrome
Content-Type : application /json
Content-Length: 50
}
Body : 본문. 실제 요청 내용
- body 부분은 있을 수도 있고 없을 수도 있다. 메소드에 따라 존재 여부가 달라진다.
Body: {
"password": "1234",
"username" : lily
}
Body: {
"message": "success",
"token" : asdasdadjsahjk2h2j4hkdfjhsdk34
}
HTTP request method의 종류와 서로의 차이점
단순한 정보 요청은 GET, 보안상 중요한 정보 요청은 POST
GET
- server에서 데이터를 받아오기만 할 때 사용
- 웹페이지에 접속해서 필요한 데이터를 불러올 때 사용
POST
- server에게 하는 request에 어떤 정보를 담아야할 때 사용
- 데이터를 생성/수정할 때 사용
- Body에 담는 내용이 핵심
DELETE
- server에 있는 어떤 정보를 지울 때 사용
참고 : GET, POST, HTTPS의 보안
GET에는 Body 파트가 없다. 그렇기 때문에 요청에 대한 정보를 보낼 때 타겟URL에 담아서 보내게 된다.(예를 들어 로그인 url에 사용자 이름,비번까지 포함하여 보내는 것)
POST는 Body가 있기 때문에 최상단에서 노출되지는 않는다. 하지만 body가 취소당할 수 있기 때문에 POST가 언제나 안전한 것만은 아니다.
그래서 등장한 것이 Body를 암호화해서 보내는 HTTPS이다.
대표적인 Status code의 종류
Success
200 : OK
201 : Created // 데이터가 잘 생성 또는 수정되었을 때
204 : No Content // 성공적으로 삭제되어 보내줄 body가 없을 때
Error
400 : Bad Request // 요청이 잘못되었을 때 ex. 아이디 보내야되는데 비번보냄
401 : Unauthorized // 나 너 누군지 몰라. 알려줘 . 로그인 필요한데 유저가 로그인 안 했을 때
403 : Forbidden // 나 너 누군지 알아. 근데 너 권한 없어
404 : Not Found // 너가 찾는 거 뭔지 아는데,, 그거 여기 없어
Server Error
500 : Internal Server Error // 서버에서 예측하지 못한 에러.
// 클라이언트는 무슨 문제인지도 모른다.
Author And Source
이 문제에 관하여([HTTP] HTTP 통신(Stateless, Respond, Request, Status Code)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@lifefm_j/HTTP저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)