TIL
HTTP란?
- HTTP(Hyper Text Transfer Protocol)는 텍스트 기반의 통신 규약으로, 인터넷에서 데이터를 주고받을 수 있는 프로토콜.
하이퍼텍스트 문서를 교환하기 위하여 사용된 통신 규약이다.
- 웹에서만 사용하는 프로토콜로, TCP/IP기반으로 서버와 클라이언트의 요청과 응답을 전송한다.
- 이전에는 http가 많았지만, 안전상의 문제로 최근엔 대부분 https를 사용한다.
- http :
안전하지 않다. 보안에 취약하여 내가 입력한 정보나 파일들이 그대로 노출될 가능성이 높다.
- https :
여기의 s는 secure의 약자로, http보다 안전하다는 특징이 있다.
입력한 정보나 파일들이 암호화되기 때문에 노출이 되어도 알아볼 수 없다.
HTTP의 특징
-
HTTP메시지는 HTTP 서버와 HTTP 클라이언트에 의해서 해석이 된다.
-
TCP/ IP를 이용하는 응용 프로토콜(application protocol)이다.
-
무상태(stateless)프로토콜. 연결 상태를 유지하지 않는 비연결성 프로토콜이다.
무상태 프로토콜:
-
서버가 클라이언트의 상태를 보존하지 않음.
-
중간에 다른 서버로 변경되어도, 클라이언트가 서버에 요청 시 필요한 정보들을 모두 담아 요청하기 때문에 문제가 발생하지 않는다.
-
클라이언트 요청이 갑자기 증가하더라도 서버 대거 투입이 가능하다.
비연결성 프로토콜:
-
필요시에만 연결하여 최소한의 자원으로 서버를 유지할 수 있다.
-
HTTP는 기본 연결을 유지하지 않음.
-
TCP/IP 연결을 다시 연결할 때 마다 새로 맺어야 하기 때문에 시간이 소요된다.
-
사이트 연결 시, 수많은 자원이 다시 다운로드되기 때문에, 이를 HTTP 지속연결로 해결하였다.
지속연결: 요청이 다 끝날 때 까지 연결 유지.
이런 단점을 해결하기 위해 쿠키라는 것을 사용한다.
- 쿠키: 사용자가 같은 웹사이트를 방문 할 때 마다 읽힌 정보를 해당 웹사이트의 서버에 저장해놓는 정보조각.
-
연결을 유지하지 않는 프로토콜이기 때문에 요청/응답(request/ response) 방식으로 동작.
-
HTTP의 동작:
- 클라이언트(Client, 사용자): 브라우저를 통해 어떠한 서비스 URL을 통하거나, 다른 것을 통해 서버에게 요청(request) 함.
서버(Server): 클라이언트가 보낸 요청사항에 맞는 결과를 찾아서, 클라이언트에게 응답(response)함.
-
예로, 클라이언트 프로그램에서 사용자가 회원 가입 시도 시, 서버로 회원 정보를 보내게 되고
서버는 회원 정보를 저장한다.
- Client -(회원 가입 요청 / request)-> Server
- Server -(가입 정보 저장/data save)-> (회원 가입 완료 페이지 전송/response) -> Client
- HTML 문서만이 HTTP 통신을 위한 유일한 정보 문서는 아니며,
Plain text로 부터 JSON 데이터 및 XML과 같은 형태의 정보도 주고 받을 수 있다.
HTTP 메서드
Request(요청)
- 이 URI를 통해 IP 주소를 찾으면, 포트 번호와 함께 HTTP 프로토콜을 통해 요청메세지를 발송.
- 요청 메세지는 정해진 규칙에 따르며, 이를 요청 데이터 포맷이라 함.
- 메세지의 구조는 헤더 / 빈 줄 / 요청 바디 로 나뉘어져 있다.
- Request Method :
- GET: 자료를 요청할 때 사용
- POST: 자료의 생성을 요청할 때 사용
- PUT: 자료의 수정을 요청할 때 사용
- DELETE: 자료의 삭제를 요청할 때 사용
Response(응답)
메세지의 구조는 Request와 유사하게 이루어져 있다.
- 헤더 / 빈 줄 /요청바디
- 첫 줄에는 반드시 HTTP 프로토콜 버전, 응답상태 등을 출력한다.
- 상태코드:
상태 코드는 모두 숫자 세자리로 이루어져 있으며, 굉장히 많은 종류가 있다.
크게 다섯 가지 부류로 나눌 수 있다.
- 1XX(조건부 응답): 요청을 받았으며 작업을 계속한다.
- 2XX(성공): 클라이언트가 요청한 동작을 수신하여 이해했고, 승낙했으며, 성공적으로 처리했다.
- 3XX(리다이렉션 완료): 클라이언트는 요청을 마치기 위해 추가동작을 취해야한다.
- 4XX(요청 오류): 클라이언트에 오류가 있음을 나타낸다.
- 5XX(서버 오류): 서버가 유효한 요청을 명백하게 수행하지 못했음을 나타낸다.
메세지 구조
- 시작줄/ 헤더/ 바디로 나눌 수 있다.
- 시작줄: 요청내용
- Request 시, 메서드와 요청 URL, HTTP version | ex) GET /image/logo.gif HTTP/1.1
- Response 시, HTTP version, 상태코드 및 사유 구절 | ex) HTTP/1.1 200 OK
- 헤더:
- 요청과 응답 메세지에 대한 추가적인 정보를 담고있다.
- Key/Value 형식으로 나타냄 | ex) Accept-Language: en / Content-Type: text/html
- 바디:
- 전송하고 싶은 실질적인 데이터를 나타낸다.
- 헤더를 마치고 \n 후에 나타난다.
Todo
-
자바의 정석 네트워크 정리
-
미션 1,2 구현 도전
-
듀오링고 문제 풀기
느낀점
- 듀오링고! 추천받아서 해봤는데 재미있다.
- 네트워크 강의를 듣고 메소드도 어떻게 사용해야하는지 정리를 했는데, 머릿속에서 뒤죽박죽으로 섞여서 약간 혼미해진 것 같다.
내일 마스터 클래스를 듣고 다시한 번 정리하는 시간을 가져야겠다!