HTTP Error 416

"The requested range is not satisfiable" ????????????????????
범위를 잘못 입력했거나 끝 범위를 입력한 경우.
🔸 발생하게 된 상황:
작업을 하던 중... 파일을 받다가 중간에 멈췄을 경우(강종 등등 예상하지 못한 종료) 다음에 다시 파일을 이어받고 싶어서 코드를 작성하다. 발생한 에러였다.
HTTP에 특정 범위(byte)부터 파일을 받겠다고 요청을 보냈었다.
HTTP에 연결은 되지만 전달 받은 내용에는 위와 같은 텍스트가 포함된 buffer를 받았다.
요청문법이 잘못되면 "Error 400 : Bad Request - Invalid Header" 을 뱉어낸다. 즉 문법에는 문제가 없었다.
("HTTP 범위 요청" 키워드로 구글링 하면 문법 나옴.)
참고로 사용했던 문법 형태는 아래와 같았는데 dataLength가 서버에 링크하여 받을 데이터의 총합 크기와 동일할 때 Error 416을 뱉어냈다.
"Range:bytes=%d-" , dataLength
🔹 문제해결 방법:
위 문제는 예를 들어 파일의 끝이 512인데 현재까지 받은 데이터의 양(dataLength)의 길이가 512 일때 발생했던 문제이였다. 이는 끝 위치의 파일 크기가 1을 뺀 것보다 클수가 없기 때문에 나타난 현상이였다.
만약 파일을 다 받았으니 totalsize == dataLength일때 예외처리를 해주거나 dataLength-1을하여 서버에 연결하여 1byte를 한 번더 받는 식으로 코드를 수정하면 된다.
1. "Range:bytes=%d-" , dataLength-1
2. "Range:bytes=%d-%d" , dataLength-1, totalLength
3. if(dataLength == totalLength)
{ /* ... 예외처리 ... */ };
안 하는 것 보다 낫겠지
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!