[개발] 프로그램 지식

[server] 416 Requested Range Not Satisfiable 에러란? 원인 및 해결방법

  • -
반응형

 

416 Requested Range Not Satisfiable: 원인과 해결 방법

1. 416 Requested Range Not Satisfiable란?

416 Requested Range Not Satisfiable는 클라이언트가 서버에 요청한 콘텐츠 범위가 유효하지 않을 때 반환되는 HTTP 상태 코드입니다. 예를 들어, 클라이언트가 요청한 파일의 크기보다 큰 범위를 지정하거나, 파일이 비어 있는 경우 이 오류가 발생합니다.

 

 

 

 

 

 

 

 

2. 주요 원인

  • 유효하지 않은 Range 헤더: 요청 헤더에서 지정한 범위가 콘텐츠의 실제 크기를 초과한 경우.
  • 빈 리소스: 요청한 파일이나 리소스가 비어 있을 때.
  • 잘못된 요청: 클라이언트가 서버에 잘못된 형식의 Range 헤더를 보낸 경우.

 

 

 

 

 

 

 

 

3. 416 에러의 영향

이 에러는 클라이언트가 요청한 데이터를 정상적으로 수신할 수 없음을 나타냅니다. 다음과 같은 부정적인 영향을 미칠 수 있습니다:

  • 파일 다운로드 실패: 요청한 파일의 특정 부분을 받을 수 없음.
  • 미디어 스트리밍 문제: 스트리밍 중 필요한 범위를 가져오지 못함.

 

 

 

 

 

 

 

 

4. 해결 방법

1) 클라이언트 요청 수정

클라이언트가 서버에 올바른 Range 헤더를 보내야 합니다. 예를 들어:


Range: bytes=0-499

위 예제는 파일의 처음 500바이트를 요청하는 올바른 형식입니다.

 

 

 

 

 

 

 

 

2) 서버 설정 확인

서버가 Range 요청을 적절히 처리하도록 설정되어 있는지 확인합니다. 예를 들어:

  • Apache: EnableSendfileAccept-Ranges 설정 확인.
  • Nginx: accept_ranges 설정이 활성화되어 있는지 확인.

 

 

 

 

 

 

 

3) 콘텐츠 유효성 확인

요청한 리소스가 실제로 존재하며, 요청 범위가 유효한지 확인합니다.

 

 

 

 

 

 

 

 

 

 

5. 예제 코드

Python Flask에서 Range 요청을 처리하는 예제:


from flask import Flask, request, Response

app = Flask(__name__)

@app.route('/file')
def download_file():
    file_content = b"이것은 테스트 파일입니다."  # 예제 파일
    range_header = request.headers.get('Range', None)
    if range_header:
        byte_range = range_header.replace("bytes=", "").split("-")
        start = int(byte_range[0])
        end = int(byte_range[1]) if byte_range[1] else len(file_content) - 1
        if start >= len(file_content):
            return Response("Requested range not satisfiable", status=416)
        return Response(file_content[start:end+1], status=206, headers={"Content-Range": f"bytes {start}-{end}/{len(file_content)}"})
    return Response(file_content, status=200)

if __name__ == '__main__':
    app.run(debug=True)

 

 

 

 

 

 

 

6. 관련 HTTP 상태 코드

  • 200 OK: 요청이 성공적으로 처리되었을 때.
  • 206 Partial Content: Range 요청이 성공적으로 처리되었을 때.
  • 404 Not Found: 요청한 리소스를 찾을 수 없을 때.

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.