[http] URL에서 프로토콜을 상속하기 위해 선행 이중 슬래시를 사용하는 데 단점이 있습니까? 즉 src =“// domain.com”

외부 도메인에서 이미지를로드하는 스타일 시트가 있으며 현재 URL을 기반으로 보안 주문 페이지의 https : // 및 다른 페이지의 http : //에서로드해야합니다. 이중 슬래시로 URL을 시작하면 현재 프로토콜이 상속됩니다. 모든 브라우저가이 기술을 지원합니까?

html 예 :

<img src="//cdn.domain.com/logo.png" />

CSS 예 :

.class { background: url(//cdn.domain.com/logo.png); }



답변

브라우저가 RFC 1808 섹션 4 , RFC 2396 섹션 5.2 또는 RFC 3986 섹션 5.2 를 지원하는 경우 실제로 “//”로 시작하는 참조에 페이지 URL 체계를 사용합니다.


답변

link또는 @import에서 사용될 때 IE7 / IE8은 http://paulirish.com/2010/the-protocol-relative-url/에 따라 파일을 두 번 다운로드합니다 .

2014 년 업데이트 :

이제 SSL이되어 모든 사람들에게 격려성능 문제가없는 , 이 기술은 이제 안티 패턴이다 . 필요한 자산이 SSL에서 사용 가능한 경우 항상https:// 자산을 사용하십시오 .


답변

웹 페이지 컨텍스트 외부에서 URL을 볼 경우 단점이 있습니다. 예를 들어 전자 메일 클라이언트 (예 : Outlook)에있는 전자 메일 메시지에는 사실상 URL이 없으며 프로토콜 기준 URL이 포함 된 메시지를 볼 때 프로토콜 컨텍스트가 전혀 없습니다 (메시지 자체는 독립적 임) POP3, IMAP, Exchange, uucp 등 무엇이든 가져 오기 위해 사용 된 프로토콜) URL에 상대적인 프로토콜이 없습니다. 누락 된 프로토콜 핸들러가 제공 될 때 이메일 클라이언트와의 호환성을 조사하지 않았습니다. 대부분의 경우 http를 추측 할 것입니다. Apple Mail은 프로토콜없이 URL 입력을 거부합니다. 컨텍스트가 비슷하지 않기 때문에 상대 URL이 전자 메일에서 작동하지 않는 방식과 유사합니다.

트윗, SMS 메시지, Word 문서 등과 같은 다른 비 HTTP 컨텍스트에서도 유사한 문제가 발생할 수 있습니다.

더 일반적인 설명은 익명의 프로토콜 URL이 분리되어 작동 할 수 없다는 것입니다. 관련 컨텍스트 가 있어야합니다 . 일반적인 웹 페이지에서는 이런 방식으로 스크립트 라이브러리를 가져 오는 것이 좋지만 모든 외부 링크는 항상 프로토콜을 지정해야합니다. 하나의 간단한 테스트를 시도했습니다. 내가 시도한 모든 브라우저에서 //stackoverflow.com매핑 file:///stackoverflow.com되므로 실제로 는 작동하지 않습니다.


답변

그 이유는 휴대용 웹 페이지를 제공하기위한 것일 수 있습니다. 외부 페이지가 암호화되어 전송되지 않은 경우 (http) 링크 된 스크립트를 암호화해야하는 이유는 무엇입니까? 이것은 불필요한 성능 손실로 보입니다. 외부 페이지가 안전하게 암호화 된 (https) 경우 링크 된 컨텐츠도 암호화되어야합니다. 페이지가 암호화되어 있으면 연결된 콘텐츠가 아닌 IE에서 혼합 콘텐츠 경고를 표시 하는 것 같습니다 . 공격자가 도중에 스크립트를 조작 할 수 있기 때문입니다. 자세한 내용은 http://ie.microsoft.com/testdrive/Browser/MixedContent/Default.html?o=1 을 참조하십시오 .

EFF 의 HTTPS Everywhere 캠페인은 가능할 때마다 https를 사용하도록 제안합니다. 요즘에는 항상 암호화 된 웹 페이지를 제공 할 수있는 서버 용량이 있습니다.


답변

완전성을 위해. 이것은 다른 스레드에서 언급되었습니다.

“두 개의 슬래시”는 “현재 사용중인 프로토콜”의 일반적인 약어입니다.

if (plain http environment) {
    use 'http://example.com/my-resource.js'
} else {
    use 'https://example.com/my-resource.js'
}

전체 나사산을 확인하십시오.


답변

지금은 매우 일반적인 기술인 것 같습니다. 단점은 없으며 페이지의 모든 자산에 대한 프로토콜을 통합하는 데 도움이되므로 가능한 모든 곳에서 사용해야합니다.


답변