IT recording...

[Network] 4. HTTP 본문

Network

[Network] 4. HTTP

I-one 2022. 5. 16. 00:08

[그림과 함께 편하게 보려면 여기로]

https://adorable-aspen-d23.notion.site/Network-4-HTTP-476f41163248491c8a7268e94094e8e7

 

[Network] 4. HTTP

1. HTTP

adorable-aspen-d23.notion.site

1. HTTP

1. HTTP 프로토콜이란?

  • Hypertext Transfer Protocol
  • 인터넷상에서 데이터를 주고 받기 위한 서버/클라이언트 모델을 따르는 프로토콜
    • 어떠한 종류의 데이터든지 전송 가능
    • HTML문서, 이미지, 동영상, 오디오, 텍스트 문서 등
  • TCP/IP 위에서 작동하며, 응용 계층의 프로토콜이다.
  • 작동방식
    • 클라이언트 (Request)
      • URI를 이용해 서버에 접속하고, 데이터를 요청한다. (IE, Chrome, Firefox, Safari ... )
    • 서버 (Response)
      • 요청을 해석하고 응답을 전송한다. (Apache, NginX ... )

2. Connectionless & Stateless

: 서버에 연결하고, 요청해서 응답을 받으면 연결을 끊는다. (connectionless)

  • 장점
    • 불특정 다수를 대상으로 하는 서비스에 적합하다
    • 수십만명이 서비스를 사용하더라도 접속 유지를 최소한으로 할 수 있기 때문에(자원 최소화), 더 많은 유저의 요청을 처리할 수 있다.
  • 단점
    • 연결을 끊기 때문에 클라이언트의 이전 상태를 알 수 없다. (stateless)
      • ex) 로그인 정보를 유지할 수 없다. → Cookie, Session, Token 을 이용해 문제를 해결한다.
    • 동일한 클라이언트의 요청에 대해 매번 연결 시도/해제 작업을 해야하므로 오버헤드가 증가한다.
    • Keep-Alive 로 해결

3. Request 데이터 Format

1. URI (Uniform Resource Identifiers)

: 클라이언트 소프트웨어(IE, Chrome)은 URI를 사용해서 자원의 위치를 찾는다.

  • HTTP : 전송 프로토콜
  • URI : 자원의 위치를 알려주기 위한 프로토콜
<https://www.abc.com/index.php>

1. https -> 자원에 접근하기 위해서 https 전송 프로토콜을 사용한다. 
2. www.abc.com -> 인터넷 상에서 자원의 위치를 가리킨다. dns서버에서 도메인 네임을 ip주소로 변환한다.
3. index.php -> 요청할 자원의 이름이다.

2. Method

: 요청의 종류를 서버에게 알려줌

GET 리소스를 요청한다. (여러 번 요청을 하더라도 동일한 응답을 받는다 - 멱등성) SELECT

POST 리소스를 등록한다. INSERT
PUT 리소스를 수정한다. UPDATE
PATCH 리소스를 일부만 수정한다. UPDATE
DELETE 리소스를 삭제한다. DELETE
HEAD 상태 줄과 헤더만 반환한다.  
OPTIONS 대상 리소스에 대한 통신 가능 옵션을 설명한다. (주로 CORS에서 사용)  
TRACE 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행한다.  
CONNECT 대상 자원으로 식별되는 서버에 대한 터널을 설정한다.  
  • Restful한 개발을 하기 위해 명시적으로 메소드를 구분하여 사용한다.

3. HTTP 버전

4. Response Code

1XX (Informational) : 요청이 수신되어 처리중 (거의 사용X) 2XX (Successful) : 요청 정상 처리 3XX (Redirection) : 요청을 완료하려면 추가 행동이 필요 4XX (Client Error) : 클라이언트 오류, 잘못된 문법 등으로 서버가 요청을 수행할 수 없음 (클라 잘못!) 5XX (Server Error) : 서버 오류, 서버가 정상 요청을 처리하지 못함 (서버잘못!)

  • 상태 코드 표200 OK 요청 성공
    201 Created 요청 성공해서 새로운 리소스가 생성됨
    202 Accepted 요청이 접수되었으나 처리가 완료되지 않음
    204 No Content 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터가 없음
         
    301 Moved Permanently 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음
    302 Found 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음
    303 See Other 리다이렉트시 요청 메서드가 GET으로 변경
    304 Not Modified 캐시를 목적으로 사용
    307 Temporary Redirect 리다이렉트 요청 메서드와 본문 유지(요청 메서드를 변경하면 안된다.)
    308 Permanet Redirect 리다이렉트 요청 메서드와 본문 유지(처음 POST를 보내면 리다이렉트도 POST 유지)
         
    400 Bad Request 클라이언트가 잘못된 요청을 해서 서버가 요청을 처리할 수 없음
    401 Unauthorized 클라이언트가 해당 리스소에 대한 인증이 필요함
    403 Forbidden 서버가 요청을 이해했지만 승인을 거부함
    404 Not Found 요청 리소스를 찾을 수 없음
         
    500 Internal Server Error 서버 문제로 오류 발생, 애매하면 500 오류
    503 Service Unavailable 서비스 이용 불가

5. Keep Alive

  • HTTP 1.1 부터 지원한다.
  • 왜 사용?
    • HTTP는 하나의 연결에 하나의 요청을 처리하고, 연결을 끊는 것으로 설계가 되었는데 이렇게 하면 수없이 연결을 맺고 끊어야 한다. (오버헤드 발생)
  • 지정된 시간동안 연결을 끊지 않고 요청을 계속해서 보낼 수 있게 한다.
Connection: Keep-Alive 

Keep-Alive:timeout=5, max=200 

//하나의 연결 당 5초 유지한다. 
//Keep-alive 연결은 최대 200개까지 허용한다.
  • 장점
    • 하나의 연결로 여러 요청을 처리해서 효율적이다.
  • 단점
    • 동시간대 연결이 늘어나 리소스를 많이 사용하게 된다.
    • → Max 값을 사용해서 Keep-alive의 최대 연결을 제한한다.

2. Rest API

  • API
    • 서버에서 제공하는 데이터를 프로그램 없이 사용할 수 있도록 제공하는 인터페이스
    • ex) HTTP, MQTT, CoAP 등
  • HTTP API
    • HTTP 프로토콜을 사용하여 프로그램끼리 소통하는 API
      • HTTP URI를 통해 제어할 자원을 명시하고,
      • HTTP Method를 통해 해당 자원을 제어하는 명령을 내리는 방식의 아키텍쳐이다.
    • ex) Open API, facebook API, Kakao API 등

1. Rest(Representational State Transfer)

: 자원의 이름으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것

  • 다음 제약조건을 만족해야 한다.
    • 자원(Resource), URI
      • 모든 자원은 고유한 ID를 가지고 ID는 서버에 존재하고 클라이언트는 각 자원의 상태를 조작하기 위해 요청을 보낸다.
      • HTTP에서 이러한 자원을 구별하는 ID는 "Students/1" 같은 HTTP URI 이다.
    • 행위(Verb), Method
      • 클라이언트는 URI를 이용해 자원을 지정하고 자원을 조작하기 위해 Method를 사용한다.
      • HTTP 프로토콜에서는 GET, POST, PUT, DELETE같은 Method를 제공한다.
    • 표현(Representation)
      • REST에서 하나의 자원은 JSON, XML, TEXT, RSS 등 여러형태의 Representation으로 나타낼 수 있다.

2. RESTful API란?

: REST를 만족하는 HTTP API

  • HTTP의 장점을 최대한 활용할 수 있는 아키텍쳐이다.
  • 동사(Method) + 명사(URI)로 이루어져 있다.
    • API메시지만 보고도 API를 이해할 수 있다.

Method 넓은 의미의 HTTP API Method Restful API

글 읽기 GET /list.do?no=100&name=java GET /sopt/java/100
글 등록 POST /insert.do POST /sopt/java/100
글 삭제 DELETE /delete.do?no=100&name=java DELETE /sopt/java/100
글 수정 POST /update/do PUT /sopt/jav
  • 실제로는 HTTP API와 REST API는 거의 같은 의미로 사용된다.
    • REST API를 완벽하게 지켜가면서 개발하는 것은 현실적으로 어렵기 때문
    • 하지만, 엄격하게 보자면 둘은 다른 것이다.

참고

https://shlee0882.tistory.com/208?category=703459

https://bentist.tistory.com/37

https://usefultoknow.tistory.com/entry/REST란-무엇일까

3. HTTP vs HTTPS

  • HTTP
    • HTTP ↔  TCP
    • 단점
      • 위장, 변조, 도청에 취약하다.
  • : Stateless 한 특성을 갖는 프로토콜
  • HTTPS
    • HyperText Transfer Protocol over Secure Socket Layer (HTTP over SSL/TLS)
    • HTTP의 보안상 단점을 보완한 프로토콜
      • 데이터의 암호화 기능이 추가되었다.
    • HTTPS ↔  SSL ↔  TCP
  • SSL에 대해 자세히 알아보기 전에 대칭키/공개키에 대해서 알아보자
  • [Network] 6. 대칭키/공개키

1. SSL

: 공개키 암호화를 기반으로 동작하는 프로토콜

  • 사용 목적
    • 통신 내용이 공격자에게 노출되는 것을 막을 수 있다. (도청)
    • 클라이언트가 접속하려는 서버가 신뢰할 수 있는 서버인지 판단할 수 있다. (위장)
    • 통신 내용의 악의적인 변경을 방지할 수 있다.(변조)
  • 인증서 CA(certificate Authority)
    • 믿을만한 기관에서 인증받은 인증서를 이용하여 서버는 클라이언트 입장에서 믿고 사용할 수 있다.
  • 동작 과정
  1. 클라이언트 → 서버 접속 요청 (+랜덤데이터 전송)
  2. 서버 → 클라이언트 인증서 제공 (CA의 비밀키로 암호화됨) (+랜덤데이터 전송)
  3. 클라이언트는 본인이 가지고 있는 CA리스트와 인증서에 담긴 CA 정보를 비교한다.
  4. 일치한다면 해당 CA의 공개키로 인증서를 인증(복호화한다.)
  5. 클라이언트는 신뢰할만한 서버임을 보장받는다.
  • Session Key
  1. 클라이언트와 서버는 서로 받은 랜덤 데이터를 조합하여 premaster secret 키를 생성한다.
    • 클라이언트 : E(보낸 랜덤 데이터 + 받은 랜덤데이터, 서버 공개키)
  2. 서버에 premaster secret key 를 전송한다.

'Network' 카테고리의 다른 글

[Network] 6. 대칭키/공개키  (0) 2022.05.16
[Network] 5. DNS Round Robin  (0) 2022.05.16
[Network] 3. TCP, UDP  (0) 2022.05.16
[Network] 2. OSI 7계층  (0) 2022.05.16
[Network] 1. 인터넷  (0) 2022.05.16
Comments