면접에서 많이 물어보기 때문에 잘 알아두자
컴퓨터끼리 통신할 때 쓰는 하나의 통신 방법이다.
프론트엔드와 백엔드가 데이터를 주고 받을 때 HTTP 규약을 지킬 것이다.
Hyper Text: 문서와 문서가 링크로 연결되어 있음
Transfer : HTML로 만든 웹페이지 문서(파일)를 보낸다
Protocol : 규약. 컴퓨터끼리 어떻게 HTML 파일을 주고 받을 지에 대한 소통 방식 또는 약속
요청(request)과 응답(response)으로 이루어져 있다
: 따라서 안물안궁이면 응답하면 안된다! 응답보다 요청이 먼저 이루어져야함
client가 request를 보내면 server에서 response를 보내준다.
1요청 1응답이다.
기억력이 없다(stateless)
: 매 통신마다 사전에 필요한 모든 정보를 담아서 요청을 보내야 한다
(주로 token에 정보를 담아 요청하고 있음)
HTTP 개별 통신은 모두 독립이어서, 과거의 HTTP 통신의 결과(상태)를 보존하지 않는다. 이를 stateless라고 하고, 그 반대로 이전의 결과를 보존하는 것을 statefull이라 한다.
그러면 결과를 보존하는 것이 더 효율적이고 간단하지 않을까? 그럼에도 불구하고 HTTP가 statefull이 아닌 stateless를 사용하는 이유는 무엇일까?
예를들어, 넷플릭스처럼 1초에 수천 개의 요청이 들어올 때 만약 HTTP가 statefull이라면 과부하가 온다. 그래서 각 요청을 별개로 사용하는 stateless를 선택한 것이다.
Request과 Response 메시지의 큰 구조는 시작
, 헤드
, 바디
로 동일하나, 첫번 째 파트인 시작
부분이 조금 다르다.
POST /login HTTP/1.1
HTTP/1.1 404 Not Found
HTTP/1,1 200 SUCCESS
HTTP/1.1 201 Created
HTTP/1.1 204 No Content
바디
파트의 메시지 대신에 사용하는 이유는 짧고 통일성을 가지려고 ...!
Headers : {
Host : www.naver.com
User-Agent : chrome
Content-Type : application /json
Content-Length: 50
}
Body: {
"password": "1234",
"username" : lily
}
Body: {
"message": "success",
"token" : asdasdadjsahjk2h2j4hkdfjhsdk34
}
단순한 정보 요청은 GET, 보안상 중요한 정보 요청은 POST
GET에는 Body 파트가 없다. 그렇기 때문에 요청에 대한 정보를 보낼 때 타겟URL에 담아서 보내게 된다.(예를 들어 로그인 url에 사용자 이름,비번까지 포함하여 보내는 것)
POST는 Body가 있기 때문에 최상단에서 노출되지는 않는다. 하지만 body가 취소당할 수 있기 때문에 POST가 언제나 안전한 것만은 아니다.
그래서 등장한 것이 Body를 암호화해서 보내는 HTTPS이다.
200 : OK
201 : Created // 데이터가 잘 생성 또는 수정되었을 때
204 : No Content // 성공적으로 삭제되어 보내줄 body가 없을 때
400 : Bad Request // 요청이 잘못되었을 때 ex. 아이디 보내야되는데 비번보냄
401 : Unauthorized // 나 너 누군지 몰라. 알려줘 . 로그인 필요한데 유저가 로그인 안 했을 때
403 : Forbidden // 나 너 누군지 알아. 근데 너 권한 없어
404 : Not Found // 너가 찾는 거 뭔지 아는데,, 그거 여기 없어
500 : Internal Server Error // 서버에서 예측하지 못한 에러.
// 클라이언트는 무슨 문제인지도 모른다.