[http] 모든 http : // 링크를 // //로 변경할 수 있습니까?

데이브 워드 는 말합니다.

정확하게 읽는 것은 아니지만 RFC 3986의 섹션 4.2는 프로토콜 (HTTP 또는 HTTPS)을 완전히 생략하는 정규화 된 URL을 제공합니다. URL의 프로토콜이 생략되면 브라우저는 기본 문서의 프로토콜을 대신 사용합니다.

간단히 말해, 이러한 “프로토콜이없는”URL을 사용하면 시도 할 모든 브라우저에서 다음과 같은 참조가 작동합니다.

//ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js

처음에는 이상해 보이지만이 “프로토콜없는”URL은 HTTP 및 HTTPS를 통해 사용 가능한 타사 컨텐츠를 참조하는 가장 좋은 방법입니다.

이렇게하면 자산이 HTTP와 HTTPS를 통해 사용 가능하다는 가정하에 HTTP 페이지에서 발생하는 많은 혼합 컨텐츠 오류를 확실히 해결할 수 있습니다.

이 브라우저는 완전히 크로스 브라우저와 호환됩니까? 다른 경고가 있습니까?



답변

게시하기 전에 철저히 테스트했습니다. Browsershots 에서 테스트 할 수있는 모든 브라우저 중에서 프로토콜 상대 URL을 올바르게 처리하지 못하는 브라우저 만 찾을 수 있습니다 : Dillo 라는 모호한 * nix 브라우저 .

피드백을받은 두 가지 단점이 있습니다.

  1. 페이지의 기본 프로토콜은 file : ///이므로 브라우저에서 로컬 파일을 “열 때”프로토콜이없는 URL이 예상대로 작동하지 않을 수 있습니다. 특히 CDN 호스팅 자산과 같은 외부 리소스에 프로토콜이없는 URL을 사용하는 경우. Apache 또는 IIS와 같은 로컬 웹 서버를 사용하여 http : // localhost 주소 를 테스트하는 것이 좋습니다.
  2. 프로토콜이없는 URL을 올바르게 처리하지 않는 iPhone 피드 리더 앱이 하나 이상있는 것 같습니다. 어떤 문제가 있는지 또는 얼마나 인기가 있는지 잘 모르겠습니다. JavaScript 파일 호스팅의 경우 RSS 리더는 일반적으로 JavaScript 내용을 무시하므로 큰 문제는 아닙니다. 그러나 RSS를 통해 신디케이트해야하는 콘텐츠 내의 이미지와 같은 미디어에이 URL을 사용하는 경우 문제가 될 수 있습니다 (단일 플랫폼의이 단일 판독기 앱은 매우 적은 수의 판독기를 차지할 수 있습니다).

답변

사람이 있는지 여부의 문제 수있는 모든 링크를 변경 한 여부의 문제 고려, 프로토콜 상대가 논쟁 할 수있다 할 수 있어야 그렇게합니다. 폴 아일랜드 에 따르면 :

2014.12.17 : 이제 모든 사람에게 SSL을 권장하고 성능에 대한 우려가 없으므로이 기술은 이제 안티 패턴입니다. 필요한 자산이 SSL에서 사용 가능한 경우 항상 https : //
자산을 사용하십시오 .


답변

프로토콜이없는 URL을 사용하여 스타일 시트를로드하면 IE 7 및 8에서 두 번 다운로드합니다.
http://www.stevesouders.com/blog/2010/02/10/5a-missing-schema-double-download/

따라서 좋은 성능을 원한다면 CSS에서는 피해야합니다.


답변

예, 네트워크 경로 참조는 이미 RFC 1808에 지정되어 있으며 모든 브라우저에서 작동해야합니다.


답변

이 브라우저는 완전히 크로스 브라우저와 호환됩니까? 다른 경고가 있습니까?

로컬 서버에서 개발하는 경우 믹스에 이것을 던져 넣으면 작동하지 않을 수 있습니다. 당신은 그렇지 않으면 브라우저가 있다고 가정 할 수있다하는 방식을 지정할 필요가 src="//cdn.example.com/js_file.js"있습니다 src="file://cdn.example.com/js_file.js"로컬이 리소스를 호스팅하지 않는 때문에 휴식 것이다.

Microsoft Internet Explorer는 이것에 특히 민감한 것 같습니다.이 질문을 참조하십시오 : localhost (WAMP)의 Internet Explorer에서 jQuery를로드 할 수 없습니다

아마도 최소한의 수정만으로도 모든 환경에서 작동하는 솔루션을 찾으려고 노력할 것입니다.

HTML5Boilerplate에서 사용하는 솔루션 은 리소스가 올바르게로드되지 않은 경우 폴백을 수행하는 것이지만 확인을 통합 한 경우에만 작동합니다.

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<!-- If jQuery is not defined, something went wrong and we'll load the local file -->
<script>window.jQuery || document.write('<script src="js/vendor/jquery-1.10.2.min.js"><\/script>')</script>

이 답변도 여기에 게시했습니다 .

업데이트 : HTML5Boilerplate은 이제 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">프로토콜 상대 URL을 더 이상 사용하지 않기로 결정한 후 사용합니다 ( here 참조) .


답변

: //domain.com을 사용할 때 이러한 문제가 없었지만 처음에 콜론을 추가해야합니다. Yoast는 이것에 대해 한동안 글을 올렸습니다. 그러나 블로그 게시물 더미에서 길을 잃었습니다.


답변

모든 요청이 프로토콜을 보호하기 위해 업그레이드되도록하려면 Content Security Policy 헤더 업그레이드 비보안 요청 을 사용하는 간단한 옵션이 있습니다.

Content-Security-Policy: upgrade-insecure-requests;

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/upgrade-insecure-requests