티스토리 뷰
HTTP (HyperText Transfer Protocol)
W3 상에서 정보를 주고받을 수 있는 프로토콜. 주로 HTML 문서를 주고받는 데 쓰인다.
주로 TCP를 사용하고 HTTP/3부터는 UDP를 사용하며, 80번 포트를 사용한다. (HTTPS는 443번)
클라이언트와 서버 사이에 이루어지는 요청/응답(Request/Response) 프로토콜이다.
- 클라이언트인 웹 브라우저가 HTTP를 통해 서버로부터 웹페이지(HTML)이나 그림 정보를 요청하면,
서버는 이 요청에 응답해 필요한 정보를 해당 사용자에게 전달한다.
HTTP를 통해 전달되는 자료는 http:로 시작하는 URL로 조회할 수 있다.
HTTP Methods
멱등(Idempotent): 요청을 몇 번을 보내도 상대쪽의 상태가 변하지 않는다.
- 예: GET을 1천번을 보내도 똑같은거를 가져옴
- 예2: DELETE을 1천번을 보내도 한번 삭제함
- 예3: POST를 1천번을 보내면 리소스의 상태가 계속 바뀜 → not idempotent
GET: 데이터를 가져오는 요청 (리소스 조회)
POST: 데이터를 보내는 요청 (요청 데이터 처리)
PUT(UPDATE): 리소스를 대체, 리소스를 전부 변경하는 요청. 해당 리소스가 없으면 생성한다.
PATCH: 리소스를 일부만 변경하는 요청
DELETE: 데이터를 삭제하는 요청 (리소스 삭제)
HTTP Message Format
클라이언트와 서버 사이의 소통은 평문(ASCII) 메시지로 이루어진다.
Request/Status Line을 보고 요청의 형태를 파악하고,
Request/Response Header를 보고 요청/응답을 어떻게 해석해야 하는지에 대한 정보를 확인하고,
Request/Response Body는 요청을 처리하는 데 필요한 데이터 또는 처리를 시켜주기 위해 요청하는 데이터를 담고 있다.
빈 라인은 요청을 위한 meta-information이 모두 보내졌다는 것을 표시하기 위한 것이다.
요청 메시지(Request): 클라이언트 → 서버
Request Line
Method: 어떤 형식의 요청인지 (GET, POST, HEAD, …)
Request Target: 경로. URL 또는 absolute path.
absolute path의 예시
POST / HTTP/1.1 GET /background.png HTTP/1.0 HEAD /test.html?query=alibaba HTTP/1.1 OPTIONS /anypage.html HTTP/1.0
complete URL의 예시
GET https://developer.mozilla.org/en-US/docs/Web/HTTP/Messages HTTP/1.1
HTTP 버전: 현재 사용하고 있는 HTTP 규약의 버전
Request Headers
- HTTP 요청에 대한 부수적인 데이터
- 요청 헤더 (Request Headers)
- Host: 서버의 도메인
- User-Agent: 사용자의 클라이언트(운영체제, 브라우저) 정보
- Accept 등
- 공통 헤더 (General Headers)
- Date: HTTP 메시지가 만들어진 시각
- Cache-Control, Content-Language 등
- Representation Headers
- Content-Type: 컨텐츠 타입
- Content-Length: 요청과 응답 메세지의 컨텐츠 길이
Request Body
- HTTP 요청에 관한 실제 데이터
- 위 예시는 GET 요청이기 때문에 데이터를 보낼 필요가 없어 비어있다.
응답 메시지(Response): 서버 → 클라이언트
Status Line
- 요청 처리에 대한 상태 표시줄
- HTTP 버전
- Status Code: 처리(응답)에 대한 정보. 위 예제의
200
- Message: Status Code에 대한 정보. 위 예제의
OK
Response Headers
- 응답 헤더 (Response Headers)
- Server: 서버 소프트웨어의 정보
- Content-Encoding: 응답하는 내용의 인코딩 포맷
- Content-Type: Response Body의 타입과 문자 포맷
- Header의 정보를 통해 Response Body의 내용이 HTML 이라는 것을 알 수 있고,
실제 HTML의 내용은 Response Body에 들어간다.
- 응답 헤더 (Response Headers)
Response Body
- 응답 데이터. DELETE 요청의 경우에는 비어있겠죠?
Header에 Content-Length가 있는 이유
- 데이터 유실이 있는지 여부를 확인할 수 있다.
- 네트워크 통신을 할 때에는 ‘패킷’이라는 단위로 쪼개서 통신을 한다.
- 패킷을 주고받는 과정에서 없어진 게 있는지 확인할 때 사용 가능!
URL
URI (Uniform Resource Identifier)
- 특정 리소스를 다른 리소스와 식별(구분)하는 식별자.
- URL과 URN을 포함한다.
URL (Uniform Resource Locator)
- 인터넷 상에서 리소스의 위치를 나타내는 문자열.
scheme
: 어떤 규약을 사용하는지. 어떤 형태로 요청을 보내야 하는지 (예: HTTP)userinfo@
- scheme에 따라 필요할 수도, 아닐 수도 있다 (선택사항).
- 이메일 주소에서 주로 볼 수 있다.
host
: 어디로 보낼 것인지. IP 또는 도메인port
: 어떤 컴퓨터에서 어떤 프로세스로 요청을 보낼 것인지를 구분하기 위한 숫자. 선택사항- 어떤 scheme인지, 어떤 통신 규약으로 요청을 보냈는지에 따라서 미리 정해져 있는 포트도 존재한다.
- 별도로 작성되어 있지 않다면 scheme에 따른 기본값을 사용하게 된다 (예: HTTP는 80)
path
: 자원의 위치(경로)?query
: 조회할 때 필요한 부수적인 정보를 제공하기 위한 부분. 선택사항fragment
: 하나의 문서의 어떤 부분을 나타내는 것. 선택사항
Media Types
Media Type
- 인터넷 상에서 주고 받는 데이터의 형식
- 예: image(jpg, jpeg, …), video(mp4, avi, …)
Content-Type
- HTTP Message의 Body의 Media Type을 알려주는 헤더
- 예: txt/html, application/json, multipart/form-data
JSON (JavaScript Object Notation)
- 데이터를 주고받을 때 흔히 사용하는 형태
- 속성 - 값 (Attribute - Value)의 형태와 배열(array)를 활용한다 (Key-Value라고도 한다).
- 일반적인 데이터를 표현한 객체 (VO, Value Object)는 json 형태로 주고 받는다.
- Value에 들어갈 수 있는 것: 문자열, 숫자, 배열, json, boolean
multipart/form-data
Body에 들어갈 데이터의 타입을 Content-Type에서 명시할 때, 타입을 한가지만 명시할 수 있다.
- 예: text이면 text/plain, xml이면 text/xml, jpg 이미지이면 image/jpeg 등
두 종류 이상의 데이터를 하나의 Body에 넣고 싶을 경우 사용하는 것이
multipart
타입이다.예: 사진 설명과 사진 파일을 올리고 싶은 경우,
사진 설명 input은 application/x-www-form-urlencoded, 사진 파일 input은 image/jpegform
태그 예시<form enctype="multipart/form-data"> <input id="desc" type="text" /> <input id="image" type="file"/> </form>
TCP/IP
패킷 통신: 데이터를 패킷이라는 작은 단위로 나누어 전송하는 방식
TCP/IP: 인터넷에서 정보를 주고받기 위한 프로토콜의 집합. 모음.
IP (Internet Protocol)
패킷 데이터들을 최대한 빨리 특정 목적지 주소로 보내는 프로토콜
패킷 전달 여부를 보증하지 않으며, 패킷을 보낸 순서와 받는 순서가 다를 수 있다.
TCP (Transmission Control Protocol)
패킷 통신은 데이터를 작은 단위로 나누어 전송하기 때문에, 순서가 뒤섞이거나 데이터가 유실될 수 있다.
→ 이것을 해결하기 위한 프로토콜이 TCP
패킷을 정상적으로 받을 수 있도록 하는 프로토콜
IP보다 패킷 전송 속도는 느리지만, 패킷 전달 여부를 보증하고 패킷을 송신 순서대로 받게 해준다.
- 목적지에 도착한 패킷들을 순서대로 정렬하고, 손상되거나 유실된 패킷이 있다면 출발지에 재요청한다.
TCP/IP
IP와 TCP를 묶은 것.
송신자가 수신자에게 IP를 사용해 최대한 빠르게 패킷을 전송하면, TCP를 활용해 패킷을 정상적으로 수신한다.
프로토콜 스택(Protocol Stack)
- = 프로토콜 스위트(Protocol Suite)
- 복수의 프로토콜 집합
- 서로 다른 프로토콜 스택 끼리는 통신할 수 없다.
OSI 7계층과 TCP/IP 7계층
데이터 전송 시, 데이터는 상위 계층 → 하위 계층으로 이동
- 계층 이동마다 필요한 정보(헤더)가 추가된다 → 캡슐화
데이터 수신 시, 데이터는 하위 계층 → 상위 계층으로 이동
- 계층 이동마다 추가된 헤더를 읽고 알맞은 행동을 취한 후 헤더를 제거한다 → 역캡슐화
OSI 7계층: 컴퓨터 네트워크 프로토콜 디자인과 통신을 계층으로 나누어 설명한 것
- 물리 계층
- 전기적, 기계적인 특성을 이용해서 통신 케이블로 데이터를 전송한다.
- 이 계층에서 사용되는 통신 단위는 비트이며, 1과 0으로 나타내어지는 전기적인 On/Off 상태이다.
- 데이터를 전기적인 신호로 변환해서 주고 받기만 할 뿐, 전송하는 데이터가 무엇인지, 어떤 에러가 있는지 등에는 신경쓰지 않는다.
- 통신 케이블, 리피터, 허브 등의 장비를 통해 데이터를 전송한다.
- 데이터 링크 계층
- 물리 계층을 통해 송수신되는 정보의 오류와 흐름을 관리해 안전한 정보의 전달을 수행할 수 있도록 도와주는 역할 → 통신 오류를 찾고 재전송하는 기능을 가지고 있다.
- 이 계층에서 사용하는 통신 단위를 프레임이라고 한다.
- 브리지, 스위치 등의 장비를 통해 MAC 주소를 가지고 물리 계층에서 받은 정보를 전달한다.
- MAC 주소는 물리적으로 할당받는다 → 네트워크 카드가 만들어질 때부터 맥 주소가 정해져 있다.
- 네트워크 계층
- 경로를 선택하고, 주소를 정하고, 경로에 따라 패킷을 전달하는 역할
- 네트워크 계층의 기능: 라우팅, 흐름 제어, 세그멘테이션(Segmentation), 오류 제어, 인터네트워킹(Internetworking) 등
- 데이터를 연결하는 다른 네트워크를 통해 전달함으로써 인터넷이 가능하게 만드는 계층
- 논리적인 주소 구조(IP)를 가진다 → 네트워크 관리자가 직접 주소를 할당
- 서브넷의 최상위 계층
- 경로를 설정하고, 청구 정보를 관리한다.
- 개방형 시스템들의 사이에서 네트워크 연결을 설정, 유지 해제하는 기능을 부여한다.
- 전송 계층 사이에 네트워크 서비스 데이터 유닛을 교환하는 기능을 제공한다.
- 전송 계층
- 통신을 활성화하기 위한 계층. 인터넷에서 데이터를 어떻게 주고받는지.
- 통신 노드 간 신뢰성 있는 데이터 전송을 보장하는 계층.
- 보통 TCP 프로토콜을 이용하며, 포트를 열어서 응용 프로그램들이 전송을 할 수 있게 한다.
- 데이터가 왔다면 4계층(전송 계층)에서 해당 데이터를 하나로 합쳐서 5계층에 전달한다.
- 패킷들의 전송이 유효한지 확인하고, 전송 실패한 패킷들을 재전송한다.
→ 상위 계층에서 데이터 전달의 유효성이나 효율성을 더 이상 생각하지 않아도 된다.
- 세션 계층
- 데이터가 통신하기 위한 논리적인 연결. 컴퓨터들끼리 연결된 상태를 관리.
- 양 끝단의 응용 프로세스가 통신을 관리하기 위한 방법을 제공한다.
- TCP/IP 세션을 만들고 없애는 책임을 진다.
- 세션 설정, 유지, 종료, 전송 중단 시 복구 등의 기능이 있다.
- 표현 계층
- 데이터 표현이 상이한 프로세스의 독립성을 제공하고, 암호화한다.
- 통신을 어떻게 표현할지 (데이터의 형식에 관한 부분)
- MIME 인코딩이나 암호화 등의 동작이 이루어지는 계층
- 응용 계층
- 응용 프로세스와 직접 관계하여 일반적인 응용 서비스를 수행한다.
- 통신 패킷은 프로토콜에 의해 처리된다.
- 응용 계층에 정의된 통신 규약(Protocol): HTTP, FTP, SMTP 등
- 브라우저나 메일 프로그램 등은 프로토콜을 보다 쉽게 사용하게 해주는 응용 프로그램
- 모든 통신의 양 끝단은 HTTP와 같은 프로토콜이다 (응용 프로그램이 아니라)
TCP/IP 4계층
계층 | 역할 | 주요 프로토콜 |
---|---|---|
응용 계층 | 응용 프로그램에서 데이터를 처리하는 계층 | HTTP, HTTPS, SMTP, FTP 등 |
전송 계층 | 응용 계층에서 넘어온 데이터에 대한 검증, 재전송 등 | |
각종 제어를 담당하는 계층 | TCP, UDP 등 | |
인터넷 계층 | 데이터를 목적지까지 효율적으로 전달하는 방법을 담당하는 계층 | IP, ICMP 등 |
네트워크 인터페이스 계층 | 실질적으로 데이터를 전송하는 계층 | Ethernet, Wi-Fi 등 |
출처
https://ko.wikipedia.org/wiki/HTTP
https://wooono.tistory.com/507https://ko.wikipedia.org/wiki/HTTP
https://shlee0882.tistory.com/110
https://developer.mozilla.org/en-US/docs/Web/HTTP/Messages
https://velog.io/@shin6403/HTTP-multipartform-data-란
http://kaludin.egloos.com/v/2270972
- Total
- Today
- Yesterday
- Cow
- IOS
- URLQueryItem
- 야곰아카데미
- 코딩
- 어플
- 네트워크
- SWIFT
- 메모리 구조
- Github
- OSI
- ssh-agent
- ssh-configure
- URL
- TCP
- HTTP message
- multipart/form-data
- JSON
- URLComponents
- 부트캠프
- 커리어스타터캠프
- 스택
- SSH
- 참조 타입
- 앱개발
- HTTP Methods
- ssh-add
- Endpoint
- 값 타입
- copy on write
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |