HTTP - HyperText Transfer Protocol
웹에 대한 걸 다루기 위해, 웹 개발자가 되기 위한 모든 것의 근간이 되는 프로토콜입니다. 클라이언트와 서버간의 통신을 위해 사용되고 있기 때문에 가장 기초적이고 필수적인 프로토콜이라고 할 수 있습니다.
백엔드 개발자라면 서버 요청에 대한 처리를 위해 HTTP를, 프론트엔드라면 서버로 데이터를 전송하기 위해 HTTP를 알아두어야 한다고 할 수 있습니다.
1. HTTP 소개와 특징
HTTP(HyperText Transfer Protocol)은 직역하면 하이퍼 텍스트를 전송하기 위한 프로토콜입니다. 즉, 정보를 주고 받기 위한 프로토콜입니다. 보통 HTML 문서를 주고 받는데 프로토콜이 이용되고 최근에는 HTTP의 확장성을 이용해서 폼(Form)이나 이미지, 비디오 등까지도 통신할 수 있게 되었습니다.
이 프로토콜은 웹에서 발생하는 모든 통신의 기본적인 프로토콜이며, 클라이언트와 서버 통신 프로토콜이기도 합니다. 클라이언트는 요청을 하고 서버는 응답을 합니다. 이때 서버는 잘 알려진 포트 번호 80번을 이용하고 클라이언트는 임시 포트 번호를 이용해서 통신합니다.
HTTP는 상태가 없는 프로토콜로 각 요청 사이에는 아무런 연결관계가 없습니다. 각 요청이 독립적인 응답과 관리를 하게 됩니다.
2. URL
URL(Uniform Resource Locator)는 흔히 우리가 웹사이트 주소 라고 부르는 것 입니다. URL은 웹 페이지를 구분하게 만들어주는 유일한 이름이라고 할 수 있습니다. 네이버에서 기사를 클릭하면 url이 바뀌고 로그인을 누르면 url이 바뀌는 것 처럼 한 브라우저 내에서도 다양한 페이지의 위치를 나타내기 위해 사용합니다.
URL은 최소 4개의 식별자를 가지고 구성됩니다.
프로토콜://호스트 식별자:포트번호/경로?쿼리
각 부분에 대해 설명하자면 프로토콜은 클라이언트-서버 프로그램입니다. 주로 http 최근에는 https가 많이 옵니다. 파일 전송 시에는 FTP같은 것이 올 수도 있습니다.
호스트 식별자는 흔히 주소라 칭하는 그 부분입니다. 이 부분은 IP주소일 수도 있고, 서버에 지정한 이름일 수도 있습니다. 더 쉽게 말하자면 www.naver.com이나 www.google.co.kr과 같은 것을 말합니다.
포트 번호는 클라이언트-서버를 위해 이용하는 포트 번호입니다. http에서 잘 알려진 80번을 이용한다고 했던 그 포트 번호입니다.
경로는 파일의 위치와 이름을 알려주는 용도입니다. 현재 위치한 페이지가 웹 브라우저 개발 저장소의 어느 경로에 위치 했는지를 알려줍니다.
마지막으로 쿼리는 항상 있는 것은 아니고 웹 프로그램에 사용자가 입력 데이터를 저장 하는 경우 주로 사용되는 방식입니다. 경로 마지막에 ?로 구분되어 있습니다. 잘 보면 데이터를 전송할 필요가 있는 순간에 url에 ?뒤에 커리가 오는 것을 볼 수 있습니다.
3. HTTP의 연결
HTTP는 우선 서버에 연결을 한다음 연결에 성공했으면 요청을 보내고 응답을 받습니다. 오래전 초기 HTTP는 한번의 요청과 응답에 한 번의 연결을 다시 해주어야 했으나 1.1 버전 이후로는 한 번 연결 한 이후로는 다시 연결 과정을 거칠 필요가 없이 요청과 응답을 여러번 할 수 있게 되었습니다.
4. HTTP의 요청
클라이언트가 서버로 데이터를 요청하는 방식은 여러가지가 있습니다. 이때 요청하는 방식에 따라서 다른 메소드들을 이용하게됩니다.
4-1. POST
POST방식은 서버로 클라이언트가 자원을 생성할 때 주로 이용합니다. 이때 정보가 HTML body를 통해 전송되어 URL에 따로 정보가 뜨지 않습니다. 대표적으로 게시판에 파일을 업로드 하거나 글을 저장하고 수정하고 삭제할 때 이용합니다.
4-2. GET
GET방식은 일반적으로 사용되는 요청 메소드입니다. 정보를 URL을 통해 전송하므로 URL에 정보가 노출될 위험이 있습니다. 그렇기에 로그인과 개인정보를 전달하는 방식에서는 GET대신 POST방식을 이용해야합니다. GET의 장점으로는 POST 방식보다 처리속도가 빠릅니다.
지금 부터 소개하는 요청 메소드들은 위에 두가지 방식보다는 상대적으로 덜 사용하는 요청 메소드들 입니다.
4-3. HEAD
HEAD는 서버의 데이터를 검색하고 요청할 때 이용합니다.
4-4. OPTIONS
OPTIONS는 선택 사항에 대한 정보를 요청할 때 이용합니다.
4-5. PUT
PUT은 전송하는 메세지에 포함된 데이터를 지정한 URL에 저장합니다. 즉, 서버 자원에 대해 변경한다고 할 수 있습니다.
4-6. DELETE
DELETE는 서버에 존재하는 자원을 삭제할 때 이용합니다.
4-7. TRACE
TRACE는 최종 수신처 까지의 메세지의 전송 경로를 추적할 때 이용합니다.
HTTP는 현재 통신 상태에 따라 다양한 응답 코드(상태 코드)를 반환합니다. 수많은 상태 코드들이 있지만 대표적인 몇가지만 소개하겠습니다.
- 1XX: 요청을 받았으며 프로세스를 계속한다.
- 2XX: 요청을 성공적으로 받았으며, 인식했고, 수용하였다.
- 3XX: 요청 완료를 위해 추가 작업 조치가 필요하다.
- 4XX: 요청의 문법이 잘못되었거나 요청을 처리할 수 없다.
- 5XX: 서버가 유효한 요청에 대해 충족을 실패했다.
상태 코드 | 설명 |
100 | 요청을 계속해야한다. 요청에 대해 나머지 부분을 기다리는 상태 |
101 | 프로토콜 전환을 요청해 서버의 승인을 기다리는 상태 |
200 | 서버가 요청을 제대로 처리한 성공 상태 |
201 | 요청이 성공해 서버가 리소스를 작성하는 상태 |
202 | 서버가 요청을 접수했지만 처리하기 전인 상태 |
204 | 서버가 요청을 처리했지만 콘텐츠를 제공하지 않는 상태 |
300 | 서버가 요청에 따라 조치를 선택하는 상태 |
400 | 요청의 구문 인식 실패 |
401 | 인증이 필요한 요청으로 인해 실패 |
403 | 서버가 요청을 거부 |
404 | 요청한 페이지를 서버가 찾을 수 없음 |
405 | 잘못된 요청 방식 |
500 | 서버 오류로 요청 수행 불가능 상태 |
대표적으로 소개한 위의 코드들 이외에도 많은 코드들이 있으니 밑에서 추가적인 내용을 참조하시길 바랍니다.
https://ko.wikipedia.org/wiki/HTTP_%EC%83%81%ED%83%9C_%EC%BD%94%EB%93%9C
내용이 내용인지라 http에 대해서는 추가적으로 더 다루게 될 수도 있습니다.
참조
https://ko.wikipedia.org/wiki/HTTP
https://developer.mozilla.org/ko/docs/Web/HTTP/Overview