왜 일반 // 접두사 URL 대신 document.location.protocol을 사용합니까?


12

예를 들어 Google 웹 로그 분석은 상용구에서 document.location.protocol을 사용하여 추적합니다.

<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-XXXXX-X']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

</script>

대신에

<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-XXXXX-X']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = '//www.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

</script>

SSL. https://www.google-analytics.com/ga.js 가 완벽하게 작동 하므로 하위 도메인은 음소거 인수 입니다.

구글을 아는 것은 감독이 아닙니다. 특정 브라우저에서 // 프로토콜 명예를 지원하지 않는 문제가 있거나 누락 된 것이 있습니까?

수정 : Google 애널리틱스에만 적용되는 것은 아닙니다 (다른 하위 도메인 예). Font Loader API 페이지 에도 같은 내용이 나타납니다 .

wf.src = ('https:' == document.location.protocol ? 'https' : 'http') +
    '://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js';

Google이 무언가를하는 이유보다는 기술적 인 문제에 대해 묻는 질문에 더 나은 답변을 얻을 수 있습니다. 당신은 두 번째에 대한 진정한 대답을 얻지 못할 것입니다 (우리가 다른 Google 직원의 응답을 보지 않으면).
— JasonBirch

좀 더 무의미하게 만들기 위해 약간의 편집. 다른 제안?
— Metalshark

답변:


3

실제로 GA 팀 의 감독 은 아니 었습니다 !
GA 로더로드 스크립트, 그가에 이중 다운로드 버그의 영향을받지 않습니다 그래서 <link>나 @importIE7 / IE8에서 스타일 시트에 대한.

Paul Irish가 설명 한 것처럼 , document.location.protocol 비 -ssl '하위 도메인에서 요청할 때 특정 보안 설정에서 보안 대화 상자가 팝업되는 IE6의 엣지 케이스 버그로 인해 조건부 (삼항) 연산자를 사용합니다. 그의 블로그 : https://www.paulirish.com/2010/the-protocol-relative-url/ 에서 Google Analytics 자바 스크립트 리드 개발자와 함께 아래에서 인용하십시오.
IE6 보안 보안 대화 상자 이미지, 출처 : http://paulirish.com/i/7b01.png

2011.01.23 :하지만 ... Google 웹 로그 분석 스 니펫에서이를 사용하는 것은 어떻습니까?
예, 물론 좋지 않을 것입니다 ... 그래서 Google Analytics 자바 스크립트 리더 개발자 (God, Google에서 일하는 것을 좋아합니다)와 함께 우리가 이것을 할 수 있는지 확인했습니다 ... 우리는 할 수 없습니다. IE6에는 non'ssl '하위 도메인에서 요청할 때 일부 보안 설정 (기본 설정인지 확실하지 않음)에서 대화 상자가 작동하지 않는 엣지 케이스 버그가 있습니다. 여기에 스크린 샷 . IE6에 신경 쓰지 않는다면 GA 스 니펫에서 40 바이트를 자유롭게 가져 가십시오. 그렇지 않으면 삼항 연산자가 필요합니다. `:)`
2011.12.24. IE 팀의 Eric Law가 IE6이 GA를 잘 재생하지 못하는 이유에 대해 설명합니다.
이것이 IE6에서 작동하지 않는 이유는 서버가 SNI를 사용하여 반환 할 인증서를 추론하기 때문입니다. XP (및 IE6)는 HTTPS 스택에서 SNI를 지원하지 않습니다 . 자세한 내용을 참조하십시오 .


1

Google 웹 로그 분석의 경우 보안 버전이 https://ssl.대신에 있음을 이미 지적했습니다 http://www.. www의 보안 버전이 작동 할 수 있지만 SSL 버전과 다를 수도 있습니다.

  • SSL 버전과 www 버전에 대한 다른 인증서.
  • 각 버전마다 다른 코드.
  • SSL 도메인에 따라 다른 쿠키 세트.

그래도 Google에 적용되는지 모르겠습니다. 한 눈에 코드는 동일 해 보였습니다.


또 다른 예는 font loader code.google.com/apis/webfonts/docs/webfont_loader.html입니다. 여기서 도메인에는 차이가 없습니다. 코드의 모든 상용구 예제는 동일한 패턴을 따릅니다.
— Metalshark

이 경우 동일한 도메인을 사용하고 있습니다. //프로토콜을 인식하지 못하는 일부 오래된 브라우저가 있습니까?
— DisgruntledGoat

그것은 생각이지만, 어떤 것, 더 중요한 것은 웹 폰트를 지원하는 것입니까? 더 많은 병렬 동작을 허용합니까 (양자 물리 스타일, 프로토 타입을 읽어서 브라우저의 상태를 변경 함)? 나는 철저히 테스트했지만 논리를 아직 보지 못했습니다 ...
— Metalshark

0

이 스택 오버플로 답변 은 좋은 지적입니다.

대상 자산이 로컬 드라이브 ( file:) 에서 열린 문서 내에 또는 "iframe magic"( about:)을 사용할 때 올바르게로드되도록 프로토콜을 명시 적으로 지정하는 것이 중요합니다 .


0

//www.google-analytics.com/ga.js필수 구성표가 없으므로 표준에 따라 URL이 아닙니다. 작동하고 사용되지만 URL 표준을 준수하지 않습니다.

RFC3986 §3 참조 :

경로가 비어있을 수 있지만 구성표와 경로 구성 요소가 필요합니다 (문자 없음). 권한이 있으면 경로는 비어 있거나 슬래시 ( "/") 문자로 시작해야합니다. 권한이 없으면 경로는 두 개의 슬래시 문자 ( "//")로 시작할 수 없습니다.


브라우저에서 동일한 구성표는 필요하지 않습니다.
— Metalshark

RFC를 읽으십시오 : 모든 URL에서 체계가 필수입니다. 이것은 작동하는 방식에 관계없이 표준은 다르게 말하고 야생에 편차가 있습니다.
— 패트릭 Mevzek
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.