왜 src = "../ cnt.js? ver = 4.0"과 같은 CSS 및 JavaScript 링크 파일에 매개 변수를 전달합니까?



3 Answers

다른 사람들이 말했듯이 캐싱을 제어하려는 시도 일 것입니다.하지만 캐싱의 버전보다는 실제 리소스 이름 ( foo.v2.js 가 아니라 foo.js?v=2 아닌)을 변경하여 캐싱을 제어하는 ​​것이 가장 좋습니다. 쿼리 문자열. 파일 이름을 변경해야한다는 것은 아닙니다. 이 URL을 기본 파일에 매핑하는 더 좋은 방법이 있습니다. 이 기사 는 웹 세상에서 4 년이 되었기 때문에 고대 에는 여전히 유용한 토론입니다. 이 글에서 작성자는 다음과 같은 이유로 인해 버전에 대해 쿼리 문자열을 사용하지 않으려한다고 주장합니다.

HTTP 캐싱 사양의 문자에 따르면 사용자 에이전트는 URL을 쿼리 문자열로 캐시해서는 안됩니다 . Internet Explorer와 Firefox는 이것을 무시하지만 Opera와 Safari는 그렇지 않습니다 ...

이 명세서는 실제로 정확하지 않을 수 있습니다. 스펙이 실제로 말하는 것은

... 일부 응용 프로그램에서는 전통적으로 중요한 부작용이있는 작업을 수행하기 위해 쿼리 URL (rel_path 부분에 "?"가 포함 된 URL)이있는 GET 및 HEAD를 사용했기 때문에 서버가 해당 URL에 대한 응답을 처리 하지 않으면 안됩니다 명시 적 만료 시간 ...

(결국 그 강조는 제 것이기 때문에) 명시 적 캐싱 헤더를 포함하는 한 쿼리 문자열에서 버전을 사용하는 것이 좋습니다. 제공된 브라우저가 위 사항을 올바르게 구현합니다. 프록시도 마찬가지입니다. 왜 당신은 쿼리 매개 변수가 아닌 실제 리소스 로케이터의 버전을 사용하는 것이 더 나을 것이라고 생각하는지 알 수 있습니다. 파일 이름을 계속 바꾸어야한다는 의미 는 아니며 자세한 내용은 위에 링크 된 기사를 참조하십시오. 길을 따라 브라우저, 프록시 등이 이름을 변경하면 업데이트 된 리소스를 가져올 것이라는 것을 알고 있습니다. 즉, 이전의 "이름"에 중간 캐시의 이점을 최대화하기 위해 끝이없는 캐시 시간을 부여 할 수 있습니다.

에 관해서:

Js / CSS 파일이 매개 변수를 가져올 수 없다고 확신합니다.

결과가 자바 스크립트 또는 CSS 리소스이므로 서버의 파일 시스템에 리터럴 파일이라는 의미는 아닙니다. 서버는 쿼리 문자열 매개 변수를 기반으로 처리하고 사용자 정의 된 JavaScript 또는 CSS 응답을 생성 할 수 있습니다. 모든 .js 파일을 질의 문자열을보고 지정된 필드와 일치하도록 사용자 정의 된 값을 반환하는 PHP 처리기에 전달하도록 서버를 구성 할 수있는 이유는 없습니다. 따라서 foo.js?v=2 는 서버를 설정하면 foo.js?v=1 과 다를 수 있습니다.

Question

많은 사이트의 소스 코드를 보았을 때 매개 변수가 링크 파일 (CSS / JavaScript)에 전달되었습니다.

스택 오버플로 소스에서, 나는

<script type="text/javascript" src="http://sstatic.net/js/master.js?v=55c7eccb8e19"></script> 

master.js?v=55c7eccb8e19 가 왜 master.js?v=55c7eccb8e19 사용 되었습니까?

JavaScript / CSS 파일이 매개 변수를 가져올 수 없다고 확신합니다.

그 이유는 무엇입니까?




" JavaScript / CSS 파일이 매개 변수를 가져올 수 없다"

function getQueryParams(qs) {
    qs = qs.split("+").join(" ");
    var params = {},
        tokens, re = /[?&]?([^=]+)=([^&]*)/g;
    while (tokens = re.exec(qs)) {
        params[decodeURIComponent(tokens[1])] = decodeURIComponent(tokens[2]);
    }
    return params;
}



이는 업데이트가있을 경우 브라우저가 .js 파일을 다시 캐시하도록 강제하는 것입니다.

사이트에서 JS를 업데이트 할 때 일부 브라우저에서는 이전 버전을 캐시했을 수도 있습니다 (성능 향상을 위해). Sicne 당신이 그들에게 당신의 새로운 하나를 사용하기를 원한다면, 당신은 이름의 질의 필드에 무엇인가를 추가 할 수 있고, voíla! 브라우저가 파일을 다시 가져옵니다!

이것은 btw 서버에서 보낸 모든 파일에 적용됩니다.




CSS 또는 JavaScript 코드를 생성하는 서버 측 스크립트가이 코드를 사용할 수는 있지만 캐시 된 이전 버전이 문제를 일으키지 않도록 파일의 내용이 변경 될 때 URI를 변경하는 데 사용됩니다.



Related