2014-02-15 2 views
1

이 같은 자신의 자바 스크립트에 포함 많은 웹 사이트와 CSS 외부 자원의 일을 보았다 :왜 외부 자바 스크립트 파일이 있습니까?

filename.js?v=3cc1b79c2abb 

그리고 :

filename.css?v=7bbb71ecd5eb 

을 "? V = ..."말 것. .. 이것은 무엇입니까? 그리고이게 무슨 도움이 되었습니까?

감사합니다. 건배 :

+1

캐싱을 방지하려면 ... – sinisake

+0

키워드 : 캐시 차단기. – CBroe

+0

프록시 서버는 이러한 쿼리 문자열을 좋아하지 않을 수 있습니다. 나는 파일의 수정 시간을 가지고'/ path/to/file.js/t = 1234567'을 선호한다. 그런 다음 서버는'mod_rewrite'를 사용하여 수정 시간을 제거합니다. 이렇게하면 프록시와 오래된 브라우저 버전과의 호환성이 보장됩니다. –

답변

4

이들은 "캐시 무효화"의 한 형태로, 캐시에서 이전 파일을로드 할 기회가 아니라 브라우저가 파일의 최신 버전을 다운로드하도록합니다.

+1

+1 - 답변 속도가 약간 빠름에도 불구하고 다른 답변과 달리 일관된 문장을 입력했습니다 ... –

0

이것은 고유 한 버전/키워드 및 css입니다. 사용 후 이전 자바 스크립트 및 CSS와 함께 브라우저에는 캐시가 없습니다.

즉, 캐시가 없으면 새 css 및 javascript 업데이트가 적용됩니다.

0

브라우저가 캐시에서 가져 오는 대신 파일을 다운로드하도록 강제하는 것입니다.

는 예를 들어, CSS를이 URL이 있습니다 styles.css?v=blablabla을하지만, 나중에는 CSS를 변경하고 이러한 변경 대신 Ctrl + F5을 눌러 사용자가 브라우저 캐시가 만료 될 때 기다리거나 강제로 (즉시 볼 수 있습니다 싶어) 당신은 styles.css?v=otherblablabla과 같은 것으로 그것을 바꾼다. 브라우저는 그것을 다른 URL로보고 있으므로 다운로드해야합니다.

이것은 단지 query string의 매개 변수이며 url은 정적 리소스를 가리키기 때문에 이러한 매개 변수는 웹 서버에서 무시됩니다. image.png?1392469113262과 같은 것을 볼 수도 있습니다. 값이없는 1392469113262이라는 매개 변수 일뿐입니다. image.png는 정적 리소스이므로이 매개 변수는 서버에서 무시됩니다. 이 숫자는 일반적으로 일부 타임 스탬프이며 브라우저가 이미지 (또는 다른 리소스)를 캐시하지 않도록하는 가장 좋은 방법입니다.

1

더 깊은 것이 있습니다. 왜 캐시 무효화가 필요한가요?

효율성을 높이기 위해 브라우저에서 리소스 파일을 캐시해야합니다. 이를 위해 마지막으로 수정 한 날짜를 매우 오래된 날짜 (예 : 1970 년 1 월 1 일 00 : 00 : 00.000)로 설정하고 만료 날짜를 미래로 설정합니다. 이 두 가지는 브라우저가 파일을 캐시하여 서버에서 다시 요청하지 않도록합니다. 그것은 매우 효율적입니다. 그러나 응용 프로그램을 업데이트 할 때 문제가 발생합니다. 리소스를 다시 다운로드 할 수 없습니다! 이를 해결하기 위해 빌드 도구를 구성하여 리소스 URL 끝에 빌드에 고유 한 버전 번호 쿼리 문자열을 추가합니다. build timestamp 또는 uuid 나 소스 저장소 버전 번호 (모든 커밋에 고유 한 버전 번호를 부여하는 SVN과 같은 버전 제어 도구의 경우)를 리소스 URL의 끝에 추가 된 버전 번호 문자열로 사용하는 것이 일반적입니다. 따라서 응용 프로그램이 업데이트 될 때마다 브라우저가 새 버전을 다운로드해야합니다.

관련 문제