[TIL — NETWORK] 인증, 인가, http 메서드, 상태코드
인증이란?
: 인증은 사용자의 신원을 검증하는 행위로서 보안 프로세스의 첫 번째 단계이다.
인증 프로세스는 다음과 같이 구성된다.
- 비밀번호
- 일회용 핀
- 인증 앱
- 생체인식
상황에 따라 인증 요소를 2가지 이상 성공적으로 확인해야만 시스템에 엑세스할 수 있는 경우도 있다.
인가란?
: 사용자에게 특정 리소스나 기능에 엑세스할 수 있는 권한을 부여하는 프로세스다.
대표적으로, 서버에서 특정 파일을 다운로드할 수 있는 권한을 부여하거나, 개별 사용자에게 관리자 권한으로 애플리케이션에 엑세스할 수 있는 권한을 부여하는 경우가 여기에 해당한다.
http 메소드란?
: HTTP 메소드는 “클라이언트가 웹 서버에게 사용자 요청의 목적이나 종류를 알리는 수단"이다. 최초의 HTTP에서는 GET 메소드 하나밖에 없었지만 이후 다양한 메소드들이 생겨났다.
HTTP 메소드의 종류는 총 9가지가 있다. 이 중 주로 쓰이는 메소드는 5가지가 있다.
주요 메소드 5가지
- GET : 리소스 조회
- POST : 요청 데이터 처리, 주로 데이터 등록에 사용
- PUT : 리소스를 대체, 해당 리소스가 없으면 생성
- PATCH : 리소스를 일부만 변경
- DELETE : 리소스 삭제
기타 메소드 4가지
- HEAD: GET과 동일하지만 메시지 부분을 제외하고, 상태 줄과 헤더만 반환
- OPTIONS: 대상 리소스에 대한 통신 가능 옵션을 설명(주로 CORS에서 사용)
- CONNECT: 대상 자원으로 식별되는 서버에 대한 터널을 설정
- TRACE: 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행
GET과 POST의 차이
“GET”은 보통 리소스를 조회할 때 사용한다.
서버에 전달하고 싶은 데이터는 query를 통해서 전달한다.
메시지 바디를 사용해서 데이터를 전달할 수는 있지만, 지원하지 않는 곳이 많아서 권장하지 않는다.
“POST”는 데이터 요청을 처리하고, 메시지 바디를 통해 서버로 데이터를 전달한다.
주로 신규 리소스를 등록하거나 프로세스 처리에 사용된다.
PUT과 PACTCH의 차이
“PUT”은 리소스가 있으면 대체하고 리소스가 없으면 생성한다.
쉽게 말해 데이터를 덮어쓴다.
“PATCH”는 PUT과 마찬가지로 리소스를 수정할 때 사용하지만,
PATCH는 리소스를 일부분만 변경할 수 있다.
멱등성이란? (Idempotent Methods)
: 메소드를 계속 호출해도 결과가 똑같다는 뜻이다. Get, PUT, DELETE는 멱등하다고 볼 수 있지만 POST나 PATCH는 멱등하다고 볼 수 없다.
http 상태코드란?
클라이언트가 보낸 요청의 처리 상태를 — 응답해서 알려주는 기능이다.
200번대는 “성공”의 의미를 뜻하는데 더 자세하게는 다음과 같다.
- 200 OK : 요청 성공
- 201 Created : 요청 성공해서 새로운 리소스가 생성됨
- 202 Accepted : 요청이 접수되었으나 처리가 완료되지 않았음
- 204 No Content : 서버가 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터가 없음
300 번대는 리다이렉션인데 이는 location 헤더가 있으면 location 위치로 자동 이동하는 것을 리다이렉트라고 한다.
- 301 Moved Permanently : 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음
- 302 Found : 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음
- 303 See Other : 리다이렉트시 요청 메서드가 GET으로 변경
- 304 Not Modified : 캐시를 목적으로 사용
- 307 Temporary Redirect : 리다이렉트시 요청 메서드와 본문 유지(요청 메서드를 변경하면 안된다.)
- 308 Permanent Redirect : 리다이렉트시 요청 메서드와 본문 유지(처음 POST를 보내면 리다이렉트도 POST 유지)
400번대는 클라이언트 측에서 오류가 발생했다고 알려주는 것이다. 자세한 사항은 다음과 같다.
- 400 Bad Request : 클라이언트가 잘못된 요청을 해서 서버가 요청을 처리할 수 없음
- 401 Unauthorized : 클라이언트가 해당 리소스에 대한 인증이 필요함
- 403 Forbidden : 서버가 요청을 이해했지만 승인을 거부함
- 404 Not Found : 요청 리소스를 찾을 수 없음
500번대는 서버 측에서 오류가 발생했다고 알려주는 것이다. 자세한 사항은 다음과 같다.
- 500 Internal Server Error : 서버 문제로 오류 발생, 애매하면 500 오류
- 503 Service Unavailable : 서비스 이용 불가
http 메시지란?
: 서버와 클라이언트 간에 데이터가 교환되는 방식이다. 메시지 타입은 두 가지가 있다.
“요청(Request)”은 클라이언트가 서버로 전달해서 서버의 액션이 일어나게끔 하는 메시지이다.
“응답(Response)”은 요청에 대한 서버의 답변이다.
http 메시지의 구조
1. Request Message
: 공백(blank line)을 제외하고 3가지 부분으로 나누어진다.
HTTP Request Message 구조
- Start Line
- Headers
- Body
Start Line
HTTP Request Message의 시작라인
HTTP Request Start Line 3가지 부분으로 구성.
- HTTP Method
- Request Target
- HTTP Version
- HTTP Method 요청의 의도를 담고 있는 GET, POST, PUT, DELETE 등이 있다. GET은 존재하는 자원에 대한 요청,
POST는 새로운 자원을 생성,
PUT은 존재하는 자원에 대한 변경,
DELETE는 존재하는 자원에 대한 삭제와 같은 기능을 가지고 있다. - Request Target은 HTTP Request가 전송되는 목표 주소입니다.
- HTTP Version은 Version에 따라 Request 메시지 구조나 데이터가 다를 수 있어서 version을 명시한다.
Headers
해당 request에 대한 추가 정보(addtional information)를 담고 있는 부분이다. headers도 크게 3가지 부분으로 나뉨(general headers, request headers, entity headers)
Host: google.com
Accept: text/html
Accept-Encoding: gzip, deflate
Connection: keep-alive
...
Host
요청하려는 서버 호스트 이름과 포트번호User-agent
클라이언트 프로그램 정보. 이 정보를 통해 서버는 클라이언트 프로그램(브라우저)에 맞는 최적의 데이터를 보내줄 수 있다.Referer
바로 직전에 머물렀던 웹 링크 주소Accept
클라이언트가 처리 가능한 미디어 타입 종류 나열If-Modified-Since
여기에 쓰여진 시간 이후로 변경된 리소스 취득. 페이지가 수정되었으면 최신 페이지로 교체한다.Authorization
인증 토큰을 서버로 보낼 때 쓰이는 HeaderOrigin
서버로 Post 요청을 보낼 때 요청이 어느 주소에 시작되었는지 나타내는 값. 이 값으로 요청을 보낸 주소와 받는 주소가 다르면 CORS(Cross-Origin Resource Sharing) 에러가 발생한다.Cookie
쿠키 값이 key-value로 표현된다.
body
HTTP Request가 전송하는 데이터를 담고 있는 부분이다.
전송하는 데이터가 없다면 body 부분은 비어있다.
보통 post 요청일 경우, HTML 폼 데이터가 포함되어 있습니다.
2. Response Message
HTTP Response Message는 request와 동일하게 공백(blank line)을 제외하고 3가지 부분으로 나누어진다.
- Status Line
- Headers
- Body
status line
HTTP Response의 상태를 간략하게 나타내주는 부분
HTTP Response의 status line또한 3가지 부분으로 구성
- HTTP version
- Status Code
- Status Text
headers
Response의 headers와 동일하다.
다만 response에서만 사용되는 header 값들이 있다.
예를 들어, User-Agent 대신에 Server 헤더가 사용된다.
body
Response의 body와 일반적으로 동일하다.
Request와 마찬가지로 모든 response가 body가 있지는 않다.
데이터를 전송할 필요가 없을경우 body가 비어있게 된다.