거의 모든 Chrome 버전에서 제품, 성능, 웹 플랫폼 기능에 대한 상당한 수의 업데이트와 개선사항이 적용됩니다.
Chrome 50 (예상 베타 날짜: 3월 10~17일)에는 Chrome에 몇 가지 변경사항이 있습니다. 이 목록은 언제든지 변경될 수 있습니다.
비보안 컨텍스트에서 AppCache 지원 중단
요약: 교차 사이트 스크립팅을 방지하기 위해 안전하지 않은 출처에서 AppCache가 지원 중단됩니다. Chrome 52에서는 HTTPS를 통해 콘텐츠를 제공하는 출처에서만 작동할 것으로 예상됩니다.
삭제 의도 | Chromestatus 추적기 | Chromium 버그
AppCache는 출처에 대한 오프라인 및 지속적인 액세스를 허용하는 기능으로, 교차 사이트 스크립팅 공격에 강력한 권한 에스컬레이션이 됩니다. 안전하지 않은 출처에서 강력한 기능을 삭제하기 위한 대규모 작업의 일환입니다.
Chrome에서는 HTTPS를 통해서만 허용하여 이 공격 벡터를 삭제하고 있습니다. Chrome 50에서 HTTP 지원이 지원 중단되며 Chrome 52에서 완전히 삭제될 예정입니다.
Document.defaultCharset가 삭제됨
요약: 사양 준수를 개선하기 위해 document.defaultCharset
가 삭제되었습니다.
삭제 의도 | Chromestatus 추적기 | CRBug 문제
Chrome 49에서 지원 중단된 document.defaultCharset
는 지역 설정에 따라 사용자 시스템의 기본 문자 인코딩을 반환하는 읽기 전용 속성입니다. 브라우저가 HTTP 응답 또는 페이지에 삽입된 메타 태그에서 문자 인코딩 정보를 사용하는 방식으로 인해 이 값을 유지하는 것이 유용하지 않은 것으로 확인되었습니다.
대신 document.characterSet
를 사용하여 HTTP 헤더에 지정된 첫 번째 값을 가져옵니다. <meta>
요소의 charset
속성에 지정된 값 (예: <meta
charset="utf-8">
)이 없는 경우 이 값을 가져옵니다. 마지막으로 이러한 값을 사용할 수 없는 경우 document.characterSet
이 사용자의 시스템 설정이 됩니다.
이를 지정하지 않는 이유에 관한 자세한 내용은 이 GitHub 문제에서 확인하세요.
링크 요소에서 하위 리소스 속성이 삭제됨
요약: HTMLLinkElement
의 rel
속성에 대한 subresource
값 지원을 삭제합니다.
삭제 의도 | Chromestatus 추적기 | Chromium 버그
<link>의 subresource
속성의 의도는 브라우저의 유휴 시간 동안 리소스를 미리 로드하는 것이었습니다. 브라우저가 페이지를 다운로드한 후에는 다른 페이지와 같은 리소스를 미리 다운로드하여 사용자가 요청하면 브라우저 캐시에서 간단히 가져올 수 있습니다.
subresource
속성에는 여러 문제가 있었습니다. 첫째, 의도한 대로 작동하지 않았습니다. 참조된 리소스가 낮은 우선순위로 다운로드되었습니다. 이 속성은 Chrome 이외의 브라우저에서 구현된 적이 없습니다. Chrome 구현에 리소스가 두 번 다운로드되는 버그가 있었습니다.
콘텐츠 미리 로드를 통해 사용자 환경을 개선하려는 개발자에게는 여러 옵션이 있습니다. 그중 가장 맞춤설정이 가능한 옵션은 미리 캐싱 및 Caches API를 활용하는 서비스 작업자를 빌드하는 것입니다. 추가 솔루션에는 preconnect
, prefetch
, preload
, prerender
을 비롯한 rel
속성의 다른 값이 포함됩니다. 이러한 옵션 중 일부는 실험용이며 광범위하게 지원되지 않을 수 있습니다.
안전하지 않은 TLS 버전 대체 삭제
요약: 보안 수준이 낮거나 보안이 없는 버전의 TLS를 사용하여 서버가 데이터를 반환하도록 강제하는 메커니즘을 삭제합니다.
삭제 의도 | Chromestatus 추적기 | Chromium 버그
전송 계층 보안 (TLS)은 버전 협상 메커니즘을 지원하므로 호환성을 손상시키지 않고 새 TLS 버전을 도입할 수 있습니다. 일부 서버는 브라우저가 안전하지 않은 엔드포인트를 대체로 사용해야 하는 방식으로 이를 구현했습니다. 따라서 공격자는 잘못 구성된 웹사이트뿐만 아니라 모든 웹사이트가 더 약한 버전의 TLS를 협상하도록 강제할 수 있습니다.
영향을 받는 사이트는 ERR_SSL_FALLBACK_BEYOND_MINIMUM_VERSION
에 연결할 수 없습니다. 관리자는 서버 소프트웨어가 최신 버전인지 확인해야 합니다. 그래도 문제가 해결되지 않으면 서버 소프트웨어 공급업체에 문의하여 해결 방법이 있는지 확인하세요.
KeyboardEvent.prototype.keyLocation 삭제
요약: Keyboard.prototype.location
속성의 불필요한 별칭을 삭제합니다.
삭제 의도 | Chromestatus 추적기 | Chromium 버그
이 속성은 단순히 Keyboard.prototype.location
속성의 별칭으로, 키보드의 여러 위치에 있는 키 간에 구분을 허용합니다. 예를 들어 두 속성을 모두 사용하면 개발자가 확장 키보드의 두 Enter
키를 구분할 수 있습니다.
RTCPeerConnection 메서드에 필요한 오류 및 성공 핸들러
요약: 이제 WebRTC RTCPeerConnection 메서드 createOffer()
및 createAnswer()
에 성공 핸들러와 함께 오류 핸들러가 필요합니다. 이전에는 성공 핸들러만 사용하여 이러한 메서드를 호출할 수 있었습니다. 이 사용법은 지원 중단되었습니다.
삭제 의도 | Chromestatus 추적기 | 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
인터페이스가 position
및 totalSize
속성과 함께 삭제됩니다.
삭제 의도 | Chromestatus 추적기 | Chromium 버그
이 이벤트는 Gecko 호환성 속성 position
및 totalSize
를 지원하기 위해 존재했습니다. 세 가지 모두에 대한 지원은 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 추적기 | Chromium 버그
Chrome 42에서는 암호화된 미디어 확장 프로그램의 접두사가 없는 사양 기반 버전을 출시했습니다. 이 API는 HTMLMediaElement
에서 사용할 디지털 권한 관리 시스템을 검색, 선택, 상호작용하는 데 사용됩니다.
거의 1년 전입니다. 접두사가 없는 버전에는 접두사가 있는 버전보다 더 많은 기능이 있으므로 API의 접두사가 있는 버전을 삭제할 때입니다.
SVGElement.offset 속성 지원 삭제
요약: SVGElement의 오프셋 속성이 HTMLElement
에서 더 광범위하게 지원되는 속성으로 대체되었습니다.
삭제 의도 | Chromestatus 추적기 | Chromium 버그
오프셋 속성은 오랫동안 HTMLElement
와 SVGElement
에서 모두 지원되었지만 Gecko와 Edge는 HTMLElement
에서만 지원합니다. 브라우저 간의 일관성을 개선하기 위해 Chrome 48에서 이러한 속성이 지원 중단되었으며 이제 삭제됩니다.
이에 상응하는 속성은 HTMLElement
에 포함되어 있지만, 개발자가 대안을 찾는 경우 getBoundingClientRect()
를 사용할 수도 있습니다.