HTTP 메시지 생성
소켓을 통해 전달(네트워크 환경에 연결할 수 있게 만들어진 연결부)
IP패킷을 생성하기 전 TCP 세그먼트 생성
TCP/IP 패킷 이더넷 프레임워크에 포함되어 서버로 전송
TCP vs UDP
TCP UDP 연결지향 비연결 데이터 전달 보증 데이터전달 미보증 순서 보장 순서 미보장 신뢰성 단순하고 빠름, 실시간 스트리밍에 사용
음 여기에 대해서는 전에 언급한 적이 있어서 그 내용으로 대체하면 좋을것같다.
HTTP/네트워크 기초 노트정리본에서 발췌
https://velog.io/@koyk0408/HTTP%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B8%B0%EC%B4%88
1계층: Physical, 물리계층. 전기신호를 주고받는다.(리피터: 전기신호를 증폭. 원래 신호로 복원한다.)
2계층: Data Link, 인접 시스템 간 데이터를 전송한다.(브리지)
3계층: Network, 단말 간 데이터 전송을 위해 최적의 경로를 제공한다.(라우터. IP패킷 전송)
4계층: Transport, 종단시스템 간 투명한 데이터(신뢰성있는) 전송.(TCP/UDP)
5계층: Session, 대화...라고 했는데ㅎ
6계층: Presentation, 표현계층. 데이터의 형식을 어떻게 표현하느냐 하는 문제. 보안관련.
7계층: Application, 응용계층. 사용자와 네트워크 간 연결, 데이터 생성.
각 계층은 독립적. 데이터를 전송할때는 상위->하위로 각 계층에서 헤더를 추가하여 전달되고 데이터를 전달받을때는 하위->상위로 각 계층에서 헤더를 제거해나가면서 이루어진다. 전자는 캡슐화, 후자는 역캡슐화라고 한다.
1계층: 네트워크 인터페이스 계층(물리+데이터링크)
물리주소(MAC)사용. LAN, 패킷망
2계층: 인터넷계층(네트워크)
통신 노드 간 IP패킷 전송 및 라우팅. IP, ARP(IP(논리주소)->MAC(물리주소)), RARP(ARP의 반대. MAC->IP)
3계층: 전송계층
통신 노드간 연결 제어, 신뢰성있는 데이터 전송. TCP/UDP
4계층: 어플리케이션 계층(세션+표현+응용)
TCP/UDP기반 응용프로그램 구현. FTP(원격파일전송), HTTP, SSH
HTTP/1.1, HTTP/2 : TCP
HTTP/3 : UDP
<field-name> : <field-value>
//<표현헤더>--------------
Content-Type: text/html;charset=UFT-8
//Content-Type 표현 데이터의 형식//Content-Encoding 표현 데이터의 압축방식//Content-Language 표현데이터의 자연언어
Content-Length: 3423
//Content-Length 표현데이터의 길이
//<표현데이터>-----------
<html>
<body>...</body>
</html>
Server: Apache/2.2.22 (Debian)
Server: nginx
Date: Tue, 15 Nov 1994 08:12:31 GMT
Allow: GET, HEAD, PUT
Retry-After: Fri, 31 Dec 2020 23:59:59 GMT(날짜 표기)
Retry-After: 120(초 단위 표기)
협상 헤더는 요청시에만 사용된다.
Accept: 클라이언트가 선호하는 미디어 타입 전달
Accept-Charset: 클라이언트가 선호하는 문자 인코딩
Accept-Encoding: 클라이언트가 선호하는 압축 인코딩
Accept-Language: 클라이언트가 선호하는 자연언어
헤더에 원하는 콘텐츠에 대한 우선순위를 지정할 수 있다.
1부터 0까지 우선순위를 부여한다.
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
생략하는 경우 1. 위에서 KO-KR은 1이라 생략됨
1. ko-KR;q=1
2. ko;q=0.9
3. en-US;q=0.8
4. en;q=0.7
HTTP Secure의 약자이다.
요청과 응답으로 오가는 내용을 암호화한다.
brew install mkcert
mkcert -install
//비번 치라고 나오는데 컴퓨터 비번 치면 됨
mkcert -key-file key.pem -cert-file cert.pem localhost 127.0.0.1 ::1
localhost, 127.0.0.1(IPv4), ::1(IPv6)에서 사용할 수 있는 인증서
cert.pem, key.pem이라는 파일이 생성되었다.
⚠️ key.pem은 개인키임. git에 커밋되면 안된다.
node.js 환경에서 https 내장 모듈을 이용해서 작성 가능하다. express.js를 통해서 만들수도 있다.
방금 생성한 인증서 파일들을 HTTPS 서버에 적용해주는 작업이 선행되어야한다.
__dirname
은 현재 실행 중인 파일 경로를 말하는 것으로, 절대경로를 넣어주면 된다.- 로컬은 인증된 발급기관으로 등록이 되어있고, 인증서는 서버와 같은 경로에 있어야 한다.
node.js
const https = require('https'); const fs = require('fs'); https .createServer( { key: fs.readFileSync(__dirname + '/key.pem', 'utf-8'), cert: fs.readFileSync(__dirname + '/cert.pem', 'utf-8'), }, function (req, res) { res.write('OPEN https server now :)'); res.end(); } ) .listen(3001);
express.js
const https = require('https'); const fs = require('fs'); const express = require('express'); const app = express(); https .createServer( { key: fs.readFileSync(__dirname + '/key.pem', 'utf-8'), cert: fs.readFileSync(__dirname + '/cert.pem', 'utf-8'), }, app.use('/', (req, res) => { res.send('OPEN https server now :)'); }) ) .listen(3001);
HTTP로 만들어진 서버를 HTTPS 프로토콜로 터널링 해주는 프로그램이라고 함!
https://ngrok.com/