IT story

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

hot-time 2020. 4. 11. 10:14
반응형

모든 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는 이것에 대해 한동안 글을 올렸습니다. 그러나 블로그 게시물 더미에서 길을 잃었습니다.

참고 URL : https://stackoverflow.com/questions/4831741/can-i-change-all-my-http-links-to-just

반응형