HTTP란?
HTTP(Hyper Text Transfer Protocol)
HTML 문서를 주고 받는데 쓰이는 통신프로토콜(통신규약)이며, TCP 와 UDP 를 사용하여 통신하며 80번 포트를 사용한다
HTTP의 통신 과정
- URL 입력후 해당 URL을 바탕으로 DNS를 조회하여 IP 탐색
- DNS 서버로 이동해서 해당 URL과 연결된 IP 주소를 알아낸다.
- 캐시에 남아있다면 DNS 서버 이동X (시간 절약)
- IP를 찾아 해당 IP가 존재하는 서버로 이동
- 네트워크 레이어에서 길찾기 (IP) (여러 라우터를 지나 호스트로 이동한다.)
- 이때, ARP를 이용해 MAC 주소 알아내 사용한다.
- IP - 논리주소, MAC - 물리주소
- WEB 서버와 TCP 연결 시도 (3-way handshake)
- web 서버와 TCP를 이용해 연결을 시도한다.
- 이때 3-way handshake 과정을 거친다.
- 1. SYN: 클라이언트가 서버로 임의의 시퀀스 번호를 전달
- 2. SYN-ACK: 서버는 클라이언트가 서버로 전달한 시퀀스에 1을 더하여 클라이언트로 전달
- 3. ACK: 클라이언트는 서버에서 전달해준 시퀀스 + 1하여 다시 서버로 전달
- SYN - 연결요청(임의의 시퀀스 번호를 같이 보낸다), ACK - 응답
4. HTTP 메시지 송신 (클라이언트가 요청)
- 3가지 부분으로 나누어진다
- Start line
- method - GET, POST, PUT, PATCH, DELETE 등 요청 방식
- path - request가 전송되는 주소
- protocol version - 해당 프로토콜 버전
- Header - request에 대한 추가정보 (메세지 body의 길이, 인증 관련, 쿠키/세션 관련 등)
- Body - 전송하는 데이터가 들어가는 부분
- Start line
5. HTTP 메시지 수신 (서버가 응답)
- Status Line - 버전, 상태코드, 상태 메시지
- 상태코드란?
- HTTP 요청이 성공적으로 완료되었는지 알려준다. (정보응답 100, 성공응답 200, 리다이렉션 300, 클라이언트에러 400, 서버에러 500)
- 상태코드란?
- Header - request와 동일, 단 response에서만 사용되는 값들이 존재한다.
- Body - 전송하는 데이터가 들어가는 부분
6. 통신 종료 (4-way handshake)
- TCP에서 3-way handshake를 이용해서 연결을 했지만 연결을 종료할때는 4-way handshake를 사용한다.
- 1. FIN(finish): 클라이언트가 연결을 종료 하겠다는 FIN 플레그를 서버로 전달
- 2. ACK: 서버는 클라이언트가 보낸 FIN을 잘 받았다는 ACK를 클라이언트에게 보내줌
- 3. FIN : 서버는 close 준비를 하고 FIN을 클라이언트에게 전달
- 4. ACK: 클라이언트가 마지막으로 ACK를 보내고 통신이 종료된다.
연결시도는 3-way handshake 이지만 연결 종료 과정은 왜 4-way handshake일까?
➨ Client가 데이터 전송을 마쳤다고 하더라도 Server는 아직 보낼 데이터가 남아 있을 수 있기 때문에 일단 FIN에 대한 ACK만 보내고, 데이터를 모두 전송한 후에 자신도 FIN 메세지를 보내기 때문이다.
TCP, UDP 차이, 장단점
TCP 특징
- 연결 지향 방식으로 패킷 교환 방식을 사용한다 (가상 회선 방식이 아님).
- 흐름 제어 및 혼잡 제어.
- 흐름제어 - 데이터 송신 속도와 수신 속도 조절(데이터 송신 속도가 더 빠를 경우 오버플로우가 발생할 수 있다.) stop and wait, sliding window 등이 있다.
- 혼잡제어 - 네트워크 내의 패킷의 수가 넘치지 않게 조절 (마찬가지로 패킷이 너무 많아지면 해당 라우터가 처리하지 못해 오버플로우가 발생할 수 있다.)
- UDP보다 속도가 느리다. 높은 신뢰성을 보장한다. 전송 순서 보장
- 서버와 클라이언트는 1대1로 연결된다.
- 전이중(Full-Duplex) - 전송이 양방향에서 동시에 가능 , 점대점(Point to Point) 방식.
UDP 특징
- 비연결형 방식으로 데이터그램 방식을 사용한다.
- UDP헤더의 CheckSum 필드를 통해 최소한의 오류만 검출한다.
- TCP보다 속도가 빠르다. 신뢰성이 낮다. 전송 순서가 변경될수 있다. 데이터 수신여부 확인X
- 서버와 클라이언트가 N대M 연결 가능.
TCP는 연결 방식, 순서 보장, 수신 여부 확인, 1대1 통신, 신뢰성 ⭡, 속도 ⭣
UDP는 비연결 방식, 순서 보장 X, 수신 여부 확인 X, N대M 통신 가능, 신뢰성 ⭣, 속도 ⭡
멱등성 (PUT, PATCH,POST)
https://bangbaeking.tistory.com/81
[HTTP] POST, PUT, PATCH 차이점
일반적으로 조회는 GET, 생성은 POST, 수정은 PUT, 삭제는 DELETE를 사용한는데 PUT과 PATCH의 차이점이 뭔지 알아보다가 POST와 PUT의 차이점이 뭔지 궁금해져서 공부를 하다가 기록함 PUT 과 PATCH PUT과 PATC
bangbaeking.tistory.com
멱등성이란? 같은 요청을 여러번 날렸을 때 서버의 상태가 유지되어야 하는 성질
PUT /posts/ HTTP/1.1 ⭢ 해당 요청을 100번 날려도 서버의 상태는 유지되지만 ⭢ 멱등
POST /posts/1 HTTP/1.1 ⭢ POST를 100번 보내면 데이터가 100개가 생성된다 ⭢ 멱등X
PUT과 PATCH의 차이
- PUT은 해당 정보의 전체를 수정, PATCH는 해당 정보의 부분을 수정한다.
PUT과 PATCH 멱등성
- PUT은 멱등하지만, PATCH는 멱등하지 않다.
PUT과 PATCH 모두 수정이지만 왜 PATCH는 멱등하지 않을까?
- PUT은 해당 리소스를 완전히 교체해 버리기 때문에 멱등이지만
- PATCH는 멱등으로 설계할 수도 있지만, 멱등이 아니게도 설계할 수 있기 때문이다.
- ex) 한번 호출 할때 마다 나이를 10씩 더하는 경우 ⭢ 멱등X
- PUT은 리소스 대체, PATCH는 리소스 수정
GET, PUT, DELETE ⭢멱등
POST, PATCH ⭢멱등X
Wireshark 실습
telnet을 활성화 한뒤 telnet으로 www.naver.com으로 GET 요청을 보내보자.
SYN ⭢ SYN-ACK ⭢ ACK를 확인할수 있다.
3-way handshake를 한뒤 HTTP request 메시지가 전달되었다.
HTTP response 메시지가 수신되었다.
Q) www.naver.com 으로 GET 요청을 보내면 네이버 웹사이트가 respose 메시지로 수신되어야 하는데 왜 302번 코드가 발생했을까?
⭢ https가 아닌 http로 request 메시지를 전송했기 때문에 302 코드가 수신되었다. (300번대 상태코드는 리다이렉션, 302 는 요청한 리소스가 Location (en-US) 헤더에 지정된 URL로 일시적으로 이동되었음을 나타낸다. )
Reference
- https://hahahoho5915.tistory.com/62
- https://mangkyu.tistory.com/15
- https://mangkyu.tistory.com/251
- https://www.inflearn.com/questions/110644/patch-%EB%A9%94%EC%84%9C%EB%93%9C%EA%B0%80-%EB%A9%B1%EB%93%B1%EC%9D%B4-%EC%95%84%EB%8B%8C-%EC%9D%B4%EC%9C%A0
'기타 > HTTP' 카테고리의 다른 글
CS스터디 - 4주차 Network (0) | 2024.08.15 |
---|---|
REST API (0) | 2024.01.29 |
[HTTP] HTTP 버전 별 차이, UDP기반 프로토콜을 사용하는 HTTP/3, (0) | 2024.01.19 |
Web Server 와 WAS (0) | 2024.01.17 |
[HTTP] POST, PUT, PATCH 차이점 (0) | 2023.11.01 |
댓글