왜 일반 // 접두사 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.