이미지와 영상을 글에 넣으려면 업로드 이후의 전달도 생각해야 했다. 특히 원하는 구간을 읽는 요청이 왔을 때 어떤 바이트를 돌려주는지가 중요하다. 나는 현재 미디어 응답 코드를 다시 읽고 이미 공개한 익명 파일로 실제 범위 응답을 확인했다. 이 검사를 영상 재생 완료로 부르지는 않는다.
부분 요청과 전체 요청의 결과를 먼저 구별한다
현재 미디어 전달은 일반 요청에는 전체 내용을, 유효한 단일 범위 요청에는 선택한 부분을 돌려준다. 선택한 부분의 응답에는 시작과 끝, 전체 크기를 함께 적는다. 받은 내용이 전체인지 부분인지 확인하지 않고 작은 조각이라고 취급하면 다음 처리에서 위치를 잘못 읽을 수 있다. 상태와 헤더, 실제 바이트를 함께 비교하는 이유다.
이번에는 공개된 익명 SVG의 처음 일부와 끝 일부를 요청해 전체 파일의 같은 구간과 비교했다. 응답의 길이와 범위도 함께 맞는지 확인했다. 영상 파일의 디코더와 재생바를 실행한 검사가 아니라 미디어 경로가 요청한 바이트를 제공하는지 확인한 것이다. 같은 전달 방식에서 무엇을 확인했는지 먼저 한정한다.
열린 끝과 잘못된 범위를 다른 결과로 처리한다
현재 범위 해석기는 시작 이후를 읽는 요청과 마지막 몇 바이트를 읽는 요청을 처리한다. 파일 크기 밖에서 시작하거나 끝이 시작보다 앞서는 조건은 거절한다. 한 요청에 여러 범위를 적는 형식도 현재 구현의 지원 범위 밖이다. 모든 형태를 받는다고 설명하기보다 지원하는 단일 범위와 거절 조건을 그대로 남겼다.
잘못된 범위에는 전체 크기를 알리는 오류 응답을 반환하고 오래 보관하지 않도록 한다. HEAD 요청은 해당 길이와 상태를 보여주면서 본문을 보내지 않는다. 로컬에서는 실제 범위 함수를 검사했고 공개 경로에서도 길이와 빈 HEAD 본문, 범위 밖 요청을 확인했다. 응답 형식과 실제 전달의 두 층을 이어서 보는 방법이다.
다른 버전의 조각을 같은 파일처럼 이어 붙이지 않는다
부분 요청을 이어갈 때 파일이 바뀌면 예전 조각과 새 조각이 섞일 수 있다. 현재 코드는 If-Range가 객체의 ETag와 맞는지 확인한다. 맞으면 부분을 돌려주고 맞지 않으면 전체 응답으로 돌아간다. 검사에서도 같은 버전 조건에는 부분 응답이 오고 다른 조건에는 전체 바이트가 오는지 확인했다.
따라서 재개하는 도구는 항상 부분 응답이 올 것으로 가정하지 않아야 한다. 전체 응답이 왔다는 사실도 코드가 읽어야 할 상태다. 로컬 파일과 서버의 파일 조건을 비교하는 업로드 재개와 마찬가지로 내려받는 조각에도 어떤 버전의 바이트인지 기준이 필요하다. 이 기준은 재생 형식이나 접근 권한을 대신하는 조건은 아니다.
압축된 응답과 바이트 진단의 조건을 따로 적는다
이번 실제 확인에서 일반 요청의 SVG 응답은 전송 압축과 약한 ETag를 가지고 있었고 범위 안내 헤더가 보이지 않았다. 같은 파일을 압축하지 않는 진단 조건으로 요청했을 때는 바이트 범위 안내와 강한 ETag가 보였다. 두 요청을 해제해 읽은 파일 내용은 같았다. 헤더 한 개의 부재만으로 구현 전체가 범위를 지원하지 않는다고 결론 내리기 어려웠다.
범위 진단은 압축하지 않는 조건으로 나누어 수행하고 일반 응답의 관찰도 함께 보존했다. 이 결과를 모든 영상과 모든 전송 계층의 규칙으로 일반화하지 않는다. 실제로 검사한 파일과 요청 조건을 적어 두면 같은 현상을 다시 확인하기 쉬워진다. 진단 조건을 정하는 것과 모든 방문자의 전송 방식을 바꾸는 것도 다른 작업이다.
재생 품질에는 응답 검사 다음의 확인이 남는다
현재 읽기 전용 검사 열두 개에는 익명 파일의 실제 범위 응답과 두 언어의 실행 프레임 전달, 현재 블록 목록을 포함했다. 영상의 코덱과 실제 탐색, 소리와 자막, 모바일 재생은 새로 실행하지 않았다. 파일 형식이 맞는지와 부분 바이트가 맞는지, 사용자가 실제로 재생할 수 있는지는 연결되지만 같은 결과가 아니다.
실제 영상을 적용할 때는 사용할 기기와 파일, 길이와 재생 기능을 정하고 그 파일로 이어서 확인해야 한다. 나는 작동하는 전달 경로를 만들고 관찰한 요청과 결과를 남겼다. 그 기록을 아직 보지 않은 재생 화면의 승인으로 바꾸지 않는 편이 다음 작업에도 정확한 출발점을 준다.