내용

    서버 응답 206 Partial Content

    HTTP 상태 코드 206 (Partial Content) 정의

    HTTP 상태 코드 206은 서버가 클라이언트의 부분 요청을 성공적으로 처리했음을 나타내며, 요청된 리소스의 일부만 반환합니다. 이 코드는 클라이언트가 파일의 일부만 요청할 때 사용되며, 이는 대용량 파일 다운로드나 데이터 스트리밍 시 유용합니다.

    206 - Partial Content

    상태 코드 206의 사용 예시

    • 대용량 파일 다운로드: 클라이언트가 파일의 일정 부분만 다운로드할 수 있습니다.
    • 비디오 및 오디오 스트리밍: 사용자에게 매끄러운 재생을 제공하기 위해 데이터의 일부를 전송합니다.
    • CDN(콘텐츠 전송 네트워크): CDN은 최적화된 로딩을 위해 206 코드를 활용합니다.

    실제 사용 사례

    대용량 파일 다운로드

    클라이언트는 전체 파일 대신 특정 부분만 요청할 수 있습니다. 이는 대역폭을 절약하고 다운로드 시간을 단축시킵니다. 클라이언트는 HTTP 요청의 헤더에서 Range를 사용하여 원하는 범위를 지정합니다.

    Range 헤더 사용 예

    GET /example-file.zip HTTP/1.1
    Host: example.com
    Range: bytes=0-1023
    

    비디오 및 오디오 스트리밍

    스트리밍 서비스는 데이터 버퍼링을 통해 매끄럽게 재생됩니다. 서버는 사용자가 요청한 특정 구간의 데이터를 전송합니다.

    CDN에서의 사용

    CDN은 여러 서버를 통해 콘텐츠를 제공하여 사용자에게 더 빠른 응답을 제공합니다. 206 코드는 클라이언트가 필요한 데이터만 요청할 수 있도록 하여 최적화를 촉진합니다.

    Range 헤더를 사용한 요청 예시

    요청 방법 설명
    GET 특정 바이트 범위를 요청합니다.
    Response HTTP/1.1 206 Partial Content와 함께 반환됩니다.

    여러 프로그래밍 언어에서의 206 처리

    PHP

    PHP에서 부분 파일 다운로드를 구현할 수 있습니다. 헤더를 설정하고 요청된 범위를 처리하는 방법은 다음과 같습니다.

    header('HTTP/1.1 206 Partial Content');
    header('Content-Type: application/octet-stream');
    header('Content-Length: ' . $length);
    header('Content-Range: bytes ' . $start . '-' . $end . '/' . $total);
    readfile($file);
    

    Python

    Flask를 사용하여 부분 요청을 처리할 수 있습니다. 다음은 파일의 일부를 전송하는 예시 코드입니다.

    @app.route('/download')
    def download():
        range_header = request.headers.get('Range', None)
        if range_header:
            start, end = parse_range_header(range_header)
            return send_file(file_path, range=(start, end))
    

    Node.js

    Express 프레임워크를 사용하여 Range 요청을 처리하는 방법도 있습니다.

    app.get('/file', function(req, res) {
        const range = req.headers.range;
        if (!range) {
            res.status(416).send('Range Not Satisfiable');
            return;
        }
        // 처리 로직...
    });
    

    가능한 오류 및 수정 방법

    • 잘못된 Range 헤더: 클라이언트가 요청한 범위가 유효하지 않을 때 발생합니다. 서버는 416 상태 코드를 반환해야 합니다.
    • 부분 다운로드 구현 시 오류: 서버가 범위를 제대로 처리하지 못할 수 있습니다. 요청을 정확히 파악하고 범위를 확인하세요.
    • 테스트 및 디버깅 권장사항: 다양한 클라이언트에서 요청을 테스트하여 오류를 조기에 발견하고 수정합니다.