[개발] 프로그램 지식

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

  • -
반응형

 

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

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

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

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

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

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

Range: bytes=0-499

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

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

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

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

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)
  • 200 OK: 요청이 성공적으로 처리되었을 때.
  • 206 Partial Content: Range 요청이 성공적으로 처리되었을 때.
  • 404 Not Found: 요청한 리소스를 찾을 수 없을 때.

반응형

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

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