본문 바로가기

HTML

[HTTP] 웹 기본 지식

반응형

URI (Uniform Resource Identifier)

인터넷에 있는 자원을 나타내는 유일한 주소입니다. URI의 존재는 인터넷에서 요구되는 기본조건으로서 인터넷 프로토콜에 항상 붙어 다닙니다. URI의 하위개념으로 URL, URN 이 있습니다.

 

  • 전체 문법
    • scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]
      • scheme
        • 주로 프로토콜 사용
        • 프로토콜: 어떤 방식으로 자원에 접근할 것인가 하는 약속 규칙
          • 예) http, https, ftp 등등
        • http는 80 포트, https는 443 포트를 주로 사용, 포트는 생략 가능
        • https는 http에 보안 추가 (HTTP Secure)
      • user
        • URL에 사용자정보를 포함해서 인증
        • 거의 사용하지 않음
      • host
        • 호스트명
        • 도메인명 또는 IP 주소를 직접 사용가능
      • port
        • 포트(PORT)
        • 접속 포트
        • 일반적으로 생략, 생략시 http는 80, https는 443
      • path
        • 리소스 경로(path), 계층적 구조
      • query
        • key=value 형태
        • ?로 시작, &로 추가 가능 ?keyA=valueA&keyB=valueB
        • query parameter, query string 등으로 불림, 웹 서버에 제공하는 파라미터, 문자 형태
      • fragment
        • html 내부 북마크 등에 사용
        • 서버에 전송하는 정보 아님

 

 

HTTP (HyperText Transfer Protocol)

HTTP는 클라이언트와 서버 사이에 이루어지는 요청/응답(request/response) 프로토콜입니다.. 예를 들면, 클라이언트인 웹 브라우저가 HTTP를 통하여 서버로부터 웹페이지(HTML)나 그림 정보를 요청하면, 서버는 이 요청에 응답하여 필요한 정보를 해당 사용자에게 전달하게 됩니다. 이 정보가 모니터와 같은 출력 장치를 통해 사용자에게 나타나는 것입니다.

 

  • HTTP 특징
    • 클라이언트 서버 구조
      • Request Response 구조
      • 클라이언트는 서버에 요청을 보내고, 응답을 대기
      • 서버가 요청에 대한 결과를 만들어서 응답
    • 무상태 프로토콜(스테이스리스) 
      • 서버가 클라이언트의 상태를 보존하지 않음
      • 장점: 서버 확장성 높음(스케일 아웃)
      • 단점: 클라이언트가 추가 데이터 전송
    • 비연결성
      • HTTP는 기본이 연결을 유지하지 않는 모델
      • 일반적으로 초 단위의 이하의 빠른 속도로 응답
      • 1시간 동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이 하로 매우 작음
        • 예) 웹 브라우저에서 계속 연속해서 검색 버튼을 누르지는 않음
      • 서버 자원을 매우 효율적으로 사용할 수 있음
    • HTTP 메시지
      • HTTP 메시지 구조
        • 요청 메시지
          • 시작 라인
            • HTTP 메서드
              • 종류: GET, POST, PUT, DELETE...
              • 서버가 수행해야 할 동작 지정
                • GET: 리소스 조회
                • POST: 요청 내역 처리
            • 요청 대상
              • absolute-path[?query] (절대경로[?쿼리])
              • 절대경로= "/" 로 시작하는 경로
            • HTTP 버전
              • HTTP Version
        • 응답 메시지
          • 시작 라인 
            • HTTP 버전
            • HTTP 상태 코드: 요청 성공, 실패를 나타냄
              • 200: 성공
              • 400: 클라이언트 요청 오류
              • 500: 서버 내부 오류
            • 이유 문구: 사람이 이해할 수 있는 짧은 상태 코드 설명 글
          • 헤더
            • header-field = field-name ":" OWS field-value OWS (OWS:띄어쓰기 허용)
            • field-name은 대소문자 구분 없음
            • 용도
              • HTTP 전송에 필요한 모든 부가정보
              • 예) 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트(브라우저) 정보, 서버 애플리케이션 정보, 캐시 관리 정보...
              • 표준 헤더가 너무 많음
              • 필요시 임의의 헤더 추가 가능
                • helloworld: hihi
          • 메시지 바디
            • 용도
              • 실제 전송할 데이터
              • HTML 문서, 이미지, 영상, JSON 등등 byte로 표현할 수 있는 모든 데이터 전송 가능
    • 단순함, 확장 가능

 

 

 

HTTP 메서드

HTTP 메서드는 클라이언트와 서버 간의 요청과 응답에서 사용되는 명령어로, 특정 리소스에 대해 수행할 작업을 정의합니다. HTTP 메서드는 주로 RESTful API 설계에서 사용되며, 각 메서드는 고유한 목적과 동작 방식을 가집니다.

 

  • 종류
    • GET: 리소스를 조회합니다. 서버의 상태를 변경하지 않으며, 멱등성을 가집니다. (같은 요청을 여러 번 보내도 결과가 동일)
    • POST: 데이터를 서버에 전송하여 새로운 리소스를 생성하거나 서버에서 프로세스를 처리합니다. 멱등성을 가지지 않습니다.
    • PUT: 리소스를 완전히 대체하거나 없을 경우 새로 생성합니다. 멱등성을 가집니다.
    • PATCH: 리소스의 일부를 수정합니다. PUT과 달리 전체가 아닌 부분 업데이트를 수행합니다.
    • DELETE: 특정 리소스를 삭제합니다. 멱등성을 가집니다.
    • HEAD: GET과 동일하지만 응답 본문 없이 상태 줄과 헤더만 반환합니다.
    • OPTIONS: 서버가 지원하는 HTTP 메서드 목록을 반환하며, 주로 CORS 설정에 사용됩니다.
    • CONNECT: 클라이언트와 서버 간의 터널을 설정합니다(주로 HTTPS에서 사용).
    • TRACE: 요청 경로를 따라 메시지 루프백 테스트를 수행합니다.
  • HTTP 메서드의 속성
    • HTTP 메서드는 다음 세 가지 속성으로 구분됩니다.
      • 안전성(Safe)
        • 호출해도 서버의 상태를 변경하지 않는 메서드입니다.
        • 예: GET, HEAD, OPTIONS, TRACE
      • 멱등성(Idempotent)
        • 동일한 요청을 여러 번 보내도 결과가 동일한 메서드입니다.
        • 예: GET, PUT, DELETE, HEAD, OPTIONS
      • 캐시 가능(Cacheable):
        • 응답 데이터를 캐시할 수 있는 메서드입니다.
        • 예: GET, HEAD (일부 경우에 따라 POST와 PATCH도 가능)

 

 

 

HTTP 상태코드

HTTP 상태 코드는 클라이언트가 서버에 보낸 요청이 성공적으로 처리되었는지, 아니면 문제가 발생했는지를 나타내는 3자리 숫자로 구성된 응답 코드입니다. 이 코드는 웹 통신 과정에서 중요한 역할을 하며, 상태를 5가지 범주로 나눌 수 있습니다.

 

  • 종류
    • 1xx: 정보 응답 (Informational)
      • 요청이 수신되었으며 처리가 진행 중임을 나타냅니다.
      • 100 Continue: 요청의 초기 부분이 성공적으로 수신되었으며, 클라이언트는 나머지 요청을 계속 전송해야 함.
      • 101 Switching Protocols: 서버가 클라이언트 요청에 따라 프로토콜을 변경하고 있음.
      • 102 Processing: 요청이 처리 중이며 아직 완료되지 않음.
    • 2xx: 성공 응답 (Successful)
      • 요청이 성공적으로 처리되었음을 나타냅니다.
      • 200 OK: 요청이 성공적으로 처리됨.
      • 201 Created: 새로운 리소스가 생성됨.
      • 202 Accepted: 요청이 접수되었으나 처리가 완료되지 않았음.
        • 배치 처리 같은 곳에서 사용
      • 204 No Content: 요청은 성공했으나 반환할 콘텐츠가 없음.
        • save 버튼을 눌러도 같은 화면을 유지해야 할 경우
    • 3xx: 리다이렉션 (Redirection)
      • 클라이언트가 요청을 완료하기 위해 추가 작업을 수행해야 함.
      • 301 Moved Permanently: 리소스가 영구적으로 새로운 URI로 이동됨.
      • 302 Found: 리소스가 임시적으로 다른 URI에 있음.
      • 304 Not Modified: 캐시된 리소스를 사용할 수 있음.
    • 4xx: 클라이언트 오류 (Client Error)
      • 클라이언트의 요청에 문제가 있음을 나타냅니다.
      • 400 Bad Request: 잘못된 요청 구문.
      • 401 Unauthorized: 인증이 필요함.
      • 403 Forbidden: 접근 권한 없음.
      • 404 Not Found: 요청한 리소스를 찾을 수 없음.
    • 5xx: 서버 오류 (Server Error)
      • 서버가 유효한 요청을 처리하지 못했음을 나타냅니다.
      • 500 Internal Server Error: 서버 내부 오류 발생.
      • 502 Bad Gateway: 게이트웨이 또는 프록시 서버에서 잘못된 응답 수신.
      • 503 Service Unavailable: 서버가 일시적으로 사용 불가능함.

 

 

 

HTTP 헤더

HTTP 헤더는 클라이언트와 서버 간의 요청 또는 응답 메시지에 추가 정보를 전달하기 위해 사용되는 키-값 쌍입니다. 이 헤더는 HTTP 통신에서 중요한 메타데이터를 제공하며, 요청 및 응답의 동작을 제어하거나 부가 정보를 전달하는 데 사용됩니다.

 

  • 종류
    • 일반 헤더 (General Headers)
      • 요청과 응답 모두에 사용되며, 메시지 자체에 대한 일반적인 정보를 제공합니다.
        • Date: 메시지가 생성된 날짜와 시간
        • Connection: 연결을 유지할지 여부를 지정 (예: keep-alive)
    • 요청 헤더 (Request Headers)
      • 클라이언트가 서버로 보내는 요청과 관련된 정보를 포함합니다.
        • Accept: 클라이언트가 수용 가능한 MIME 타입(예: text/html, application/json)
        • Referer: 이전 웹 페이지 주소
        • User-Agent: 요청을 보낸 클라이언트 소프트웨어 정보
        • Authorization: 인증 자격 증명(예: 토큰 또는 사용자 ID/비밀번호)
        • Host: 요청 대상 서버의 도메인 이름과 포트 번호
    • 응답 헤더 (Response Headers)
      • 서버가 클라이언트에 응답할 때 제공하는 정보입니다.
        • Content-Type: 응답 본문의 MIME 타입(예: application/json)
        • Cache-Control: 캐싱 동작을 제어하는 지침
        • Set-Cookie: 클라이언트 브라우저에 쿠키 설정
        • Location: 웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면, Location 위치로 자동 이동 (리다이렉트)
    • 엔터티 헤더 (Entity Headers)
      • 메시지 본문(엔터티)에 대한 메타데이터를 제공합니다.
        • Content-Length: 본문의 크기(바이트 단위)
        • Content-Encoding: 본문 데이터의 인코딩 방식(예: gzip)
        • Content-Language: 본문이 사용하고 있는 언어

 

  • 협상
    • 클라이언트가 선호하는 표현 요청
    • Accept: 클라이언트가 선호하는 미디어 타입 전달
    • Accept-Charset: 클라이언트가 선호하는 문자 인코딩
    • Accept-Encoding: 클라이언트가 선호하는 압축 인코딩
    • Accept-Language: 클라이언트가 선호하는 자연 언어
    • 협상 헤더는 요청시에만 사용
  • 협상과 우선순위
    • Quality Values(q) 값 사용
    • 0~1, 클수록 높은 우선순위
    • 생략하면 1
    • Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
      • 1. ko-KR;q=1 (q생략)
      • 2. ko;q=0.9
      • 3. en-US;q=0.8
      • 4. en:q=0.7
    • 구체적인 것이 우선순위
    • Accept: text/*, text/plain, text/plain;format=flowed, */*
      • 1. text/plain;format=flowed
      • 2. text/plain
      • 3. text/*
      • 4. */*

 

 

 

HTTP 캐시

HTTP 캐시는 클라이언트(브라우저), 프록시 서버, CDN(Content Delivery Network) 등 다양한 위치에서 데이터를 저장하여 동일한 요청에 대해 빠르게 응답할 수 있도록 합니다. 캐싱된 데이터는 HTTP 헤더(Cache-Control, Expires, ETag 등)를 통해 관리되며, 유효 기간이나 검증 조건을 설정하여 최신 데이터를 유지하거나 불필요한 요청을 방지합니다.

 

  • HTTP 캐시의 종류
    • 프라이빗 캐시 (Private Cache)
      • 브라우저와 같은 클라이언트 단에서 동작하며, 특정 사용자만 사용할 수 있는 개인화된 데이터를 저장합니다.
      • 예: 브라우저 캐시.
    • 공유 캐시 (Shared Cache)
      • 프록시 서버나 CDN에서 동작하며, 여러 사용자 간에 데이터를 공유합니다.
      • 예: CDN 캐시, 프록시 서버 캐시.

 

  • HTTP 캐시 제어 헤더
    • 캐싱 동작은 HTTP 헤더를 통해 제어됩니다:
      • Cache-Control
        • max-age: 리소스가 유효한 시간(초 단위)을 지정.
        • no-cache: 매번 서버에서 유효성을 확인해야 함.
        • no-store: 데이터를 절대 저장하지 않음.
        • public/private: 리소스가 공유 가능한지 여부를 지정.
      • Expires
        • 리소스의 만료 날짜와 시간을 명시(HTTP/1.0에서 사용).
      • ETag 및 Last-Modified
        • 리소스 변경 여부를 확인하는 데 사용되는 검증 도구로, 조건부 요청을 지원
반응형

'HTML' 카테고리의 다른 글

[HTML] CSS 속성 및 설명  (0) 2023.06.25
[HTML] HTML 태그 종류 및 설명  (0) 2023.06.25