HTML 과 같은 하이퍼미디어 문서를 전송하기 위한 통신 규약.
(예를 들어 http는 대화를 하기 위해 필요한 공통의 '한국어'와 같은 언어라고 생각할 수 있고 이 언어는 목소리와 같은 역할인 '네트워크'를 통해서 전달된다고 생각할 수 있다.)
웹에서 이루어지는 모든 데이터 교환의 기초이며, 클라이언트 - 서버를 이어주는 프로토콜이다.
요청(requests),
응답(responses)
이라고 부른다.HTTP 요청과 응답의 구조는 서로 닮았으며, 구조는 startline- header- body
로 이루어져 있다.
Http request 란 클라이언트 쪽에서 서버가 특정 동작을 취하도록 전송하는 메세지로
3단으로 이루어진 구조에 대한 상세한 내용은 다음과 같다.
Start line:
http method :
동사(GET, POST) 혹은 명사(GEAD,OPTIONS)를 사용해서 서버가 어떤 동작을 취해야 하는지를 알려준다.
GET은 리소스를 클라이언트로 가져오라는 것이며 POST는 데이터가 서버로 들어가야 하는 것을 의미한다(리소스 수정 등)
Request Target:
해당 request 가 전송되는 목표 url 이나 프로토콜, 포트, 도메인의 절대 경로로 나타날 수도 있다.
origin, absolute, authority, asterlist 등의 형식이 있다.
http version :
어떤 http 버젼이 사용되고 있는지를 나타낸다.
Header
해당 request에 대한 추가 정보를 답고 있다. 대소문자 구분 없는 문자열과 (:)을 사용하며 (key:value)
크게 3 부분으로 나누어진다. (general headers, request headers, entitiy headers)
자주 사용되는 중요한 headr 정보들은 다음과 같다.
host :
ex) google.com가 host ㅈnth
host header + request target 을 합치면 완전한 url 이 된다.
ex)저희 집 host:은마아파트로 오세요 ' 라고 말하면 찾아올 수 없다.
상세주소인 request target 00동 00호 이 없기 때문이다.
User-Agent
보내는 클라이언트에 대한 정보가 담겨있는 정보.
요즘 많이 저장하는 정보들, 빅데이터 수집 등을 위해서.
Accetp
connection
보통은 dafualt 로 유지.
Body
해당 request 의 실제 메세지/내용
하지만 모든 요청에 본문이 들어가지는 않는다.
GET, HEAD, DELETE , OPTIONS처럼 리소스를 가져오는 요청은 보통 본문이 필요가 없으나 일부 요청은 업데이트를 하기 위해 서버에 데이터를 전송한다. 보통 (HTML 폼 데이터를 포함하는) POST 요청일 경우에 그러하다.
http request 와 마찬가지로 3단 구조.
Status Line
1. Http version
2.Status code : 응답 상태(요청의 성공여부)를 나타내는 숫자로 표현되는 코드. 예를 들어 200. 403
3. Status Text 사람이 코드만 보고 인식하기는 쉽지 않으므로 텍스트로 해당 status를 간략히 설명해준다. "not Found"
Headers
메타 정보가 담겨져있다.
user-agent 대신 server 헤더가 사용된다.ex) 장고
body
생략이 가능하다.
예를 들어 로그인을 하는 경우 유저가 id 와 패스워드를 보내면 서버에서 이를 확인하고 이에 대한 응답을 status code 인 200ok 로 보내주면 간단하기 때문에 body 는 필요없게 된다.
그렇다면 로그인을 성공했을때 페이지 이동은 코드 없이 어떤 방식으로 이루어지는가?
status code 200만 보내면 프론트엔드에서 미리 준비해 둔 html /javascript code 에서 렌더링 하는 것이다.
spa (single page application) 3세대 방식
예전에는 응답에 따라 백엔드에서 code를 일일히 보내주었다면
이제는 리액트같은 프레임워크를 사용해서 코드 status 만을 보고 바로 프론트엔드쪽에서 html을 렌더링하는 방식으로 처리한다.
하지만 구글,네이버같은 방대한 자료를 가지고 있는 곳에서는 3세대 방식의 적용이 어려운 면도 있다.
이런것들은 라이브러리가 작성해주지만
http method 에 대해서는 개발자가 결정해야한다.
get? post 어떤 것으로 보낼 것인가?
get : 어떤 데이터를 서버로부터 받아올 때 사용
데이터 생성/수정/삭제 없이 받아오기만 할 때 사용하므로 간단하고 많이 사용된다. body 가 비어있다.
post : 데이터 생성/수정/삭제 할 때 주로 사용.
대부분의 경우 request body 가 포함되어 보내진다.
delete : 특정 데이터를 서버에서 삭제요청할 때 사용
그러나 post 에 밀려서 잘 사용하지는 않는다.
어떤 응답을 보낼것인가도 개발자가 정해야 하므로 잘 알아야 한다.
200ok : 문제 없이 잘 실행 되었을 때.
400 bad request : 요청이 잘못 되었을 때. ex) 전화번호칸에 text 들어왔을 때. 개발자에 따라 400을 보낼수도, 500을 보낼 수도 있으나 정확한 코드인 400을 보내는 것이 좋다.
401 unauthorized : 유저가 해당요청을 하려면 먼저 로그인을 하거나 회원가입을 하거나 등등이 필요하다는 것을 나타내려 할때 쓰이는 코드.(이 경우 프론트엔드 쪽에서 이것을 알리고 로그인이나 회원가입 페이지로 이동하도록 해주어야 한다.)
403 Forbidden : 로그인이 아닌 권한의 문제. ex) 과금한 유저만 볼 수 있는 데이터를 아닌 유저가 요청할 때.
404 Not Found
request target, host 가 찾아지지 않는 경우.
connection error.
ex)아예 /wio 라는 target이 없는 경우.
500 Internal Server Error
서버에서 에러가 난 경우. 백엔드 개발자가 싫어하는 코드.