HTTP 정보는 HTTP 메시지로부터 나온다!
HTTP 메시의 구조
-
Http 통신에서 교환되는 정보를 보통 Http 메시지라고 함
- 리퀘스트 메시지와 리스폰스 메시지의 총 2가지가 존재
-
Http 메시지는 복수행
의 데이터로 구성된 텍스트 문자열의 형태이며 크게 메시지 헤더
와 메시지 바디
로 구성되어있으며, 각각은 개행 문자(CR+LF)
로 구분됨
- 혹은 메시지 헤더를 시작줄과 헤더 블록(필드)로 나눌 수도 있음
- 메시지 헤더 : 서버와 클라이언트가 반드시 처리해야 하는 리퀘스트나 리스폰스의 내용 및 속성이 정의되어 있음
- HTTP 통신에 필요한 모든 부가정보가 헤더에 명시 되어 있는 것
- ex) 메시지 바디의 크기, 인증, 클라이언트 정보, 캐시 관리 정보 등등
- 메시지 바디 : 전송되는 데이터 그 자체가 들어 있음
- 여기에는 HTML 문서와 json 형식의 데이터에서부터 이미지 및 영상에 이르기까지 byte로 표현 가능한 모든 데이터가 전송될 수 있음
-
리퀘스트 헤더의 첫 시작 라인은 리퀘스트 라인(요청 라인)
으로 구성됨
- 리퀘스트 라인(요청 라인) : 요청에 사용될 메소드(GET, POST 등)와 요청 URI, 그리고 사용되는 HTTP 버전 정보가 명시되어 있음
GET/search HTTP/1.1
HTTP/1.1 200 OK
- keep-alive 헤더 : 아래와 같이 명시되며, 연결을 계속 유지하겠다는 것을 의미함(HTTP 1.1부터 기본적으로 동작)
Connection:Keep-Alive
Keep-Alive: timeout=5, max=1000
- 기본적으로 Http 통신은 TCP 통신을 기반으로 동작하는데, TCP 통신은 일단 전송하면 연결이 끊어지므로 Http 역시 전송이 끝나면 연결이 끊어지며 이후의 일에 대해서는 신경쓰지 않음
- 따라서 이러한 문제를 막고자 Keep-Alive 헤더가 사용되는 것이며, 특정 시간(timeout) 동안 최대 요청(max) 의 수를 명시함
자주 사용되는 HTTP 메소드 및 응답(상태) 코드
-
HTTP 메소드
- GET : 서버로부터 특정 정보(혹은 문서)를 가져올 때 사용
- HEAD : GET과 비슷한 동작을 하되, 서버의 응답에는 헤더만 포함되며 본문은 존재하지 안흥ㅁ
- 단순히 리소스의 존재 및 변경 여부와 같은 정보가 필요한 경우에는 본문에 리소스를 포함시키지 않고 헤더의 확인만으로도 충분하기 때문
- 단, 서버개발을 할 경우에는 HEAD 요청으로 응답받은 헤더와 GET 요청으로 응답받은 헤더의 정확한 일치를 항상 염두에 둬야 함!
- POST : 서버가 처리해야 할 데이터를 전송하며, 보통 새로운 데이터를 서버에 입력할 경우 사용
- 데이터는 메시지 바디에 포함되므로(ex. 요청 json), 헤당 메소드 사용시에는 본문이 존재
- PUT : 서버에 존재하는 데이터를 수정하고자 할 경우 사용(새 문서를 만들거나, 요청한 본문으로 교체)
- 마찬가지로 본문이 존재하며, POST와 달리
멱등성(Idempotence)
을 지님(GET, DELETE도 동일)
- PATCH : PUT과 마찬가지로 자원의 수정을 위한 메소드지만, 일부만을 수정할 경우에 사용됨
- PUT의 경우 요청을 일부만 보낼 경우에는 나머지 부분은 default값으로 수정되는 문제가 있음
- 자칫 보내지 않은 데이터가 null로 변경될 수 있기 때문에, 변경되지 않는 데이터도 모두 전달해야 함
- 반면, PATCH의 경우에는 요청 본문에 포함된 부분만 수정됨
- DELETE : 서버에서 특정 정보(혹은 문서)를 제거
- 하지만 서버가 요청을 무시할 수도 있기 때문에 클라이언트는 항상 삭제가 정상적으로 수행되는 것을 보장받지 못함
-
상태 코드
- 100-199 : 정보
- 200-299 : 성공(200 OK)
- 300-399 : 리디렉션
- 400-499 : 클라이언트 에러(404 Not Found)
- 500-599 : 서버 에러(500 Internal Server Error)