Chrome 50의 API 지원 중단 및 삭제

거의 모든 Chrome 버전에서 제품, 성능, 웹 플랫폼 기능과 관련된 수많은 업데이트와 개선사항이 확인됩니다.

Chrome 50 (예상 베타 날짜: 3월 10~17일)에는 Chrome에 여러 가지 변경사항이 있습니다. 이 목록은 언제든지 변경될 수 있습니다.

안전하지 않은 컨텍스트에서 AppCache 지원 중단

요약: 교차 사이트 스크립팅을 방지하기 위해 안전하지 않은 출처에서 AppCache가 지원 중단됩니다. Chrome 52에서는 HTTPS를 통해 콘텐츠를 제공하는 출처에서만 작동할 것으로 예상됩니다.

삭제 의도 | Chromestatus Tracker | Chromium 버그

AppCache는 출처에 대한 오프라인 및 영구 액세스를 허용하는 기능으로 교차 사이트 스크립팅 공격에 대한 강력한 권한 에스컬레이션입니다. 안전하지 않은 출처에서 강력한 기능을 삭제하기 위한 대규모 노력의 일환입니다.

Chrome은 HTTPS를 통해서만 공격 벡터를 허용함으로써 공격 벡터를 삭제하고 있습니다. Chrome 50에서 HTTP 지원이 중단되며 Chrome 52에서는 완전히 삭제될 예정입니다.

Document.defaultCharset을 삭제했습니다.

요약: 사양 준수를 개선하기 위해 document.defaultCharset가 삭제되었습니다.

삭제 의도 | Chromestatus Tracker | CRBug 문제

Chrome 49에서 지원 중단된 document.defaultCharset는 지역 설정에 따라 사용자 시스템의 기본 문자 인코딩을 반환하는 읽기 전용 속성입니다. 이 값을 유지하는 것은 브라우저가 HTTP 응답 또는 페이지에 삽입된 메타 태그에서 문자 인코딩 정보를 사용하는 방식으로 인해 유용하지 않은 것으로 나타났습니다.

대신 document.characterSet를 사용하여 HTTP 헤더에 지정된 첫 번째 값을 가져오세요. 이 속성이 없으면 <meta> 요소의 charset 속성에 지정된 값을 가져옵니다 (예: <meta charset="utf-8">). 마지막으로 사용할 수 있는 값이 없으면 document.characterSet는 사용자의 시스템 설정이 됩니다.

이를 지정하지 않는 이유에 대한 자세한 내용은 이 github 문제를 참조하세요.

TL;DR: HTMLLinkElementrel 속성에 관한 subresource 값 지원이 삭제되었습니다.

삭제 의도 | Chromestatus Tracker | Chromium 버그

<link>에서 subresource 속성의 인텐트는 브라우저의 유휴 시간 동안 리소스를 미리 가져오는 것이었습니다. 브라우저는 페이지를 다운로드한 후 다른 페이지와 같은 리소스를 미리 다운로드하여 사용자가 요청했을 때 브라우저 캐시에서 리소스를 검색할 수 있습니다.

subresource 속성에 여러 문제가 있습니다. 첫째, 의도한 대로 작동하지 않았습니다 참조된 리소스가 낮은 우선순위로 다운로드되었습니다. 이 속성은 Chrome 이외의 다른 브라우저에서는 구현되지 않았습니다. Chrome 구현에는 리소스가 두 번 다운로드되는 버그가 있습니다.

콘텐츠를 미리 로드하여 사용자 환경을 개선하려는 개발자에게는 다양한 옵션이 있으며, 가장 맞춤설정이 가능한 옵션은 사전 캐싱과 Caches API를 활용할 수 있는 서비스 워커를 빌드하는 것입니다. 추가 솔루션에는 preconnect, prefetch, preload, prerenderrel 속성의 다른 값이 포함됩니다. 이러한 옵션 중 일부는 실험용이며 광범위하게 지원되지 않을 수 있습니다.

안전하지 않은 TLS 버전 대체 삭제

요약: 보안 수준이 낮은 TLS 버전 또는 비보안 버전의 TLS를 사용하여 서버에서 데이터를 반환하도록 강제하는 메커니즘을 삭제합니다.

삭제 의도 | Chromestatus Tracker | Chromium 버그

전송 계층 보안 (TLS)은 버전 협상 메커니즘을 지원하므로 호환성을 손상시키지 않고 새 TLS 버전을 도입할 수 있습니다. 일부 서버는 브라우저에서 안전하지 않은 엔드포인트를 대체 수단으로 사용해야 하는 방식으로 이를 구현했습니다. 이로 인해 공격자는 잘못 구성된 웹사이트뿐만 아니라 모든 웹사이트가 약한 버전의 TLS를 협상하도록 강제할 수 있습니다.

영향을 받는 사이트가 ERR_SSL_FALLBACK_BEYOND_MINIMUM_VERSION에 연결할 수 없게 됩니다. 관리자는 서버 소프트웨어가 최신 상태인지 확인해야 합니다. 그래도 해결되지 않으면 서버 소프트웨어 공급업체에 문의하여 수정사항이 있는지 확인하세요.

KeyboardEvent.prototype.keyLocation 삭제

요약: Keyboard.prototype.location 속성의 불필요한 별칭을 삭제합니다.

삭제 의도 | Chromestatus Tracker | Chromium 버그

이 속성은 단순히 Keyboard.prototype.location 속성의 별칭으로, 키보드의 여러 위치에 있는 키를 구별할 수 있습니다. 예를 들어 두 속성 모두 개발자가 확장 키보드에 있는 두 개의 Enter 키를 구별할 수 있습니다.

RTCPeerConnection 메서드에 필요한 오류 및 성공 핸들러

TL;DR: 이제 WebRTC RTCPeerConnection 메서드 createOffer()createAnswer()에 오류 핸들러와 성공 핸들러가 필요합니다. 이전에는 성공 핸들러만 사용하여 이러한 메서드를 호출할 수 있었습니다. 이 사용법은 지원 중단되었습니다.

삭제 의도 | Chromestatus Tracker | Chromium 버그

Chrome 49에서는 오류 핸들러를 제공하지 않고 setLocalDescription() 또는 setRemoteDescription()를 호출하는 경우 경고가 추가되었습니다. 오류 핸들러 인수는 Chrome 50부터 필수입니다.

이는 WebRTC 사양에서 요구하는 대로 이러한 메서드에 프로미스를 도입하는 방법을 지우기 위한 일부입니다.

다음은 WebRTC RTCPeerConnection 데모의 예입니다(main.js, 126행).

    function onCreateOfferSuccess(desc) {
      pc1.setLocalDescription(desc, function() {
         onSetLocalSuccess(pc1);
      }, onSetSessionDescriptionError);
      pc2.setRemoteDescription(desc, function() {
        onSetRemoteSuccess(pc2);
      }, onSetSessionDescriptionError);
      pc2.createAnswer(onCreateAnswerSuccess, onCreateSessionDescriptionError);
    }

setLocalDescription()setRemoteDescription()에는 모두 오류 핸들러가 있습니다. 성공 핸들러만 필요로 하는 이전 브라우저는 오류 핸들러 인수가 있는 경우 이를 무시합니다. 이전 브라우저에서 이 코드를 호출해도 예외가 발생하지 않습니다.

일반적으로 프로덕션 WebRTC 애플리케이션의 경우 WebRTC 프로젝트에서 유지관리하는 shim인 adapter.js을 사용하여 앱을 사양 변경 및 접두사 차이로부터 격리하는 것이 좋습니다.

XMLHttpRequestProgressEvent가 더 이상 지원되지 않습니다.

요약: XMLHttpRequestProgressEvent 인터페이스가 positiontotalSize 속성과 함께 삭제됩니다.

삭제 의도 | Chromestatus Tracker | Chromium 버그

이 이벤트는 Gecko 호환성 속성 positiontotalSize를 지원하기 위해 존재했습니다. Mozilla 22에서는 이 세 가지에 대한 지원이 모두 중단되었으며 이 기능은 오래 전부터 ProgressEvent로 대체되었습니다.

     var progressBar = document.getElementById("p"),
          client = new XMLHttpRequest()
      client.open("GET", "magical-unicorns")
      client.onprogress = function(pe) {
        if(pe.lengthComputable) {
          progressBar.max = pe.total
          progressBar.value = pe.loaded
        }
      }

접두어가 붙은 암호화된 미디어 확장 프로그램 삭제

요약: 프리픽스가 지정된 암호화된 미디어 확장 프로그램이 삭제되었으며 사양 기반의 접두사가 없는 대체로 대체되었습니다.

삭제 의도 | Chromestatus Tracker | Chromium 버그

Chrome 42에서는 암호화된 미디어 확장 프로그램의 사양 기반 프리픽스가 없는 버전을 출시했습니다. 이 API는 HTMLMediaElement와 함께 사용할 디지털 권한 관리 시스템을 검색하고 선택하고 상호작용하는 데 사용됩니다.

불과 1년 전이었는데, 접두사가 없는 버전의 기능이 접두사가 붙은 버전보다 더 많으므로 이제 접두사가 붙은 버전의 API를 삭제해야 합니다.

SVGElement.offset 속성 지원 삭제

요약: SVGElement의 오프셋 속성이 삭제되었으며 HTMLElement에서 더 광범위하게 지원되는 속성으로 대체됩니다.

삭제 의도 | Chromestatus Tracker | Chromium 버그

오프셋 속성은 오랫동안 HTMLElementSVGElement에서 지원되었지만, Gecko와 Edge는 HTMLElement에서만 이 속성을 지원합니다. 브라우저 간 일관성을 개선하기 위해 이러한 속성은 Chrome 48에서 지원 중단되었으며 이제 삭제됩니다.

동일한 속성이 HTMLElement의 일부이지만, 대안을 찾는 개발자는 getBoundingClientRect()를 사용할 수도 있습니다.