-
HTTP완벽가이드 스터디 3, 4장IT 2021. 4. 17. 23:42
3장
HTTP 메시지
클라인언트 <….프락시?......프락시?......> 서버
- 인바운드
- 클라이언트 -(인바운드)-> 서버
- 아웃바운드
- 클라이언트 <-(아웃바운드)- 서버
- 업스트림
- 다운스트림
메시지 문법 (포맷)
- 시작줄과 헤더는 줄 단위로 분리된 아스키 문자열 캐리지 리턴(ASCII 13,10) CRLF 그냥 개형도 받아줘야한다고는한다 잘만들면
- request
// 요청 메시지
/* rfc7230 공식스펙 */
// method(GET,POST) SP(공백) request-target SP HTTP-version CRLF(엔터)
GET /search?q=hello&hl=ko HTTP/1.1
Host:www.google.com
- response
// 응답 메시지
/* rfc7230 공식스펙 */
// HTTP-version SP(공백) status-code SP reason-phrase CRLF(엔터)
HTTP/1.1 200 OK
Content-type: text/html;charset=UTF-8
Content-Length: 3423
<HTML>
<body>...</body>
</HTML>
- http versison
- https://ko.wikipedia.org/wiki/HTTP
- GET /restapi/v1.0 HTTP/1.1
- method
- https://developer.mozilla.org/ko/docs/Web/HTTP/Methods
- GET: 메서드는 특정 리소스의 표시를 요청합니다. GET을 사용하는 요청은 오직 데이터를 받기만 합니다.
- HEAD: 메서드는 GET 메서드의 요청과 동일한 응답을 요구하지만, 응답 본문을 포함하지 않습니다.
- POST: 메서드는 특정 리소스에 엔티티를 제출할 때 쓰입니다. 이는 종종 서버의 상태의 변화나 부작용을 일으킵니다.
- PUT: 메서드는 목적 리소스 모든 현재 표시를 요청 payload로 바꿉니다.
- DELETE: 메서드는 특정 리소스를 삭제합니다.
- CONNECT: 메서드는 목적 리소스로 식별되는 서버로의 터널을 맺습니다.
- OPTIONS: 메서드는 목적 리소스의 통신을 설정하는 데 쓰입니다.
- TRACE: 메서드는 목적 리소스의 경로를 따라 메시지 loop-back 테스트를 합니다.
- PATCH: 메서드는 리소스의 부분만을 수정하는 데 쓰입니다.
- 확장메서드: LOCK, MKOOL, COPY, MOVE등.
- format
GET /restapi/v1.0 HTTP/1.1
Accept: application/json
Authorization: Bearer UExBMDFUMDRQV1MwMnzpdvtYYNWMSJ7CL8h0zM6q6a9ntw
- response
HTTP/1.1 200 OK
Date: Mon, 23 May 2005 22:38:34 GMT
Content-Type: text/html; charset=UTF-8
Content-Encoding: UTF-8
Content-Length: 138
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
ETag: "3f80f-1b6-3e1cb03b"
Accept-Ranges: bytes
Connection: close
<html>
<head>
<title>An Example Page</title>
</head>
<body>
Hello World, this is a very simple HTML document.
</body>
</html>
4장
커넥션 관리
- 기반
- TCP/IP
네이글 알고리즘: https://ozt88.tistory.com/18
1. 네이글 알고리즘이란?
IP 네트워크에서 데이터는 몇 곂의 헤더로 캡슐화되어 목적지로 보내진다. 이 헤더들의 용량도 제법 커서, 적은 데이터를 보내게되면 배보다 배꼽이 커지는 경우가 발생한다. 고의로 작은 단위의 데이터를 전송하는 경우도 있겠지만, 의도치 않게 네트워크 상황상 비효율적인 송신을 해야하는 경우가 있다.
예를 들면 전송해야될 데이터가 있는데, 상대방의 윈도우 크기(전송 받을 수 있는 크기)가 매우 작은 경우. 내가 의도한 바는 아니지만 보낼 수 있는 패킷의 크기 자체가 작기 때문에 따로 지연 설정을 하지 않으면, 작은 크기의 패킷이 만들어질 수 밖에 없다.
보낼 수 있는 데이터를 바로 패킷으로 만들지 않고, 가능한 모아서 더 큰 패킷으로 만들어 한번에 보내면 이런 문제는 발생하지 않을 것이다. 네이글 알고리즘은 이 대안을 실제로 구현한 네트워크 전송 알고리즘이다. 출처: https://ozt88.tistory.com/18 [공부 모음]
port 고갈(TIME-WAIT)
TCP커넥션의 종단에서 TCP 커넥션을 끊으면 종단에서 커넥션의 IP주소와 포트 번호를 메모리의 작은 제어영역(control block)에 기록해놓는다 이정보는 같은 주소와 포트 번호를 사용하는 새로운 TCP커넥션이 일정 시간 동안에는 생성되지 않게 하기 위한 것으로 보통 세그먼트의 최대 생명주기에 두배 정도 SMSL이라고 불리며 보통2분정도 시간동안 유지한다.
병렬 커넥션
빠르긴하지만 클라이언트나 서버쪽에 대여폭이 좁으면 더 느려지는 경우가있다.
지속 커넥션
서로 유지
- http protocol
- keep alive : 커넥션 끊지않고 여러전문을 통신한다 리소스절약
- 프락시에서 지키지않으면 별의미없다.
'IT' 카테고리의 다른 글
HTTP완벽가이드 스터디 7, 8장 (0) 2021.05.02 HTTP완벽가이드 스터디 5, 6장 (0) 2021.04.24 HTTP완벽가이드 스터디 1, 2장 (0) 2021.04.11 http patch method를 이용하여 우아하게 부분 수정하기. (0) 2021.04.09 spring data jpql 에서 GROUP_CONCAT function 사용하기. (0) 2021.04.08