이미지 출처 : https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview
이러한 작동방식으로 HTTP의 장단점은 이렇게 정리할 수 있다.
장점
- 불특정 다수를 대상으로 하는 서비스에 적합
- 클라이언트와 서버가 지속적으로 연결되어 소통하는 방식이 아니기에 정해진 최대 연결수보다 훨씬 많은 요청과 응답을 처리할 수 있다.
단점
- 응답(response) 후 연결을 끊어버리기 때문에, 클라이언트의 이전상황을 알 수 없다.
다시말해 클라이언트가 바로 다음 요청을 한다해도 서버는 이 클라이언트가 방금 전 요청을 했던 클라이언트와 동일한지 알 수 없다는 것이다.
위와 같은 무상태(Stateless) 특징때문에 정보를 유지하기 위한 목적으로 Cookie, Web storage와 같은 기술이 등장하였다.
이미지 출처 : https://www.boostcourse.org/web316/lecture/16661?isDesc=false
GET /servlet/query?a=10&b=90 HTTP/1.1
/**
* GET : 요청 메서드
* /servlet/query?a=10&b=90 : 요청 URL
* HTTP/1.1 : HTTP 프로토콜 버전
**/
Host : www.sk.com
User-agent: mozilla/4.0
Accept-language: kr
#요청 메서드
= 요청 메서드는 송수신 방법을 뜻한다.
*주요 메서드
- GET : 리소스 조회
- POST : 요청 데이터 처리, 주로 데이터 등록에 사용
- PUT : 리소스를 대체, 해당 리소스가 없으면 생성
- DELETE : 리소스 삭제
- PATCH : 리소스 일부 변경
*기타 메서드
- HEAD: GET과 동일하지만 메시지 부분을 제외하고, 상태 줄과 헤더만 반환
- OPTIONS: 대상 리소스에 대한 통신 가능 옵션을 설명(주로 CORS에서 사용)
- CONNECT: 대상 자원으로 식별되는 서버에 대한 터널을 설정
- TRACE: 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행
#요청 URL
= 요청 타겟을 나타내며, 이들은 요청 컨텍스트에 의해 특정 지어진다.
#HTTP 프로토콜 버전
= 웹 브라우저가 사용하는 HTTP 프로토콜 버전을 의미한다.
두번째 줄 부터는 여러 줄의 헤더 정보가 키-벨류 쌍으로 이루어져 있다.
HTTP/1.1 200 ok
/**
* HTTP/1.1 : 응답 HTTP 프로토콜 버전
* 200 : 응답 코드
* ok : 응답 메시지
**/
Date : Thu, 03 jul 2003 12:00:15 GMT
Server: Apache/1.3.0 (Unix)
Last-Modified: Sun, 5 May 2003 09:23:24 GMT
Content-Length: 6821
Content-Type: text/html
<html>
........
</html>
#상태 코드
= HTTP 요청이 성공적으로 이루어졌는지를 의미한다.
*주요 상태 코드
2xx
- 요청 정상 처리
- 200 OK : 요청 성공
- 201 Created : 요청 성공해서 새로운 리소스가 생성됨
- 202 Accepted : 요청이 접수되었으나 처리가 완료되지 않았음
- 204 No Content : 서버가 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터가 없음
3xx
-요청을 완료하려면 추가 행동이 필요 (리다이렉션)
- 301 Moved Permanently : 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음
- 302 Found : 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음
- 303 See Other : 리다이렉트시 요청 메서드가 GET으로 변경
- 304 Not Modified : 캐시를 목적으로 사용
- 307 Temporary Redirect : 리다이렉트시 요청 메서드와 본문 유지(요청 메서드를 변경하면 안된다.)
- 308 Permanent Redirect : 리다이렉트시 요청 메서드와 본문 유지(처음 POST를 보내면 리다이렉트도 POST 유지)
4xx
-클라이언트 오류, 잘못된 문법등으로 서버가 요청을 수행할 수 없음
- 400 Bad Request : 클라이언트가 잘못된 요청을 해서 서버가 요청을 처리할 수 없음
- 401 Unauthorized : 클라이언트가 해당 리소스에 대한 인증이 필요함
- 403 Forbidden : 서버가 요청을 이해했지만 승인을 거부함
- 404 Not Found : 요청 리소스를 찾을 수 없음
5xx
-서버 오류, 서버가 정상 요청을 처리하지 못함
- 500 Internal Server Error : 서버 문제로 오류 발생, 애매하면 500 오류
- 503 Service Unavailable : 서비스 이용 불가
두번째 줄 부터는 여러 줄의 헤더 정보가 키-벨류 쌍으로 이루어져 있다.
References