2010-11-18 3 views
7

이전에 질문을 받았다면 사과 드리지만 검색하기 어려운 문제입니다. 나는 웹 개발의 모든 년 동안 이것을 처음 접했고, 그래서 나는 매우 흥미 롭다."?" HTML 스크립트 태그의 src 속성에 대해?

웹 사이트의 일부 HTML 파일을 편집 중이며 스크립트 태그의 src 속성에서 이전 작성자가 물음표 뒤에 데이터를 추가했다는 것을 알았습니다.

예 : <script src="./js/somefile.js?version=3.2"></script>

나는이가 PHP와 같은 GET 요청, 가치 전달에 대한 몇 가지 언어로 사용된다는 것을 알고 있지만, 나는 내가 아는까지로,이는 자바 스크립트에서 수행되지 않았다 - 적어도 javascript 파일을 호출 할 때 아무도 이것이 무엇을하는지 아는가?

편집 : 와우, 많은 답변. 모두에게 감사드립니다. 그리고 많은 사람들이 비슷한 것을 말하고 있기 때문에 나는 모든 사람의 의견을 말하는 대신 글로벌 업데이트를 게시 할 것입니다.

이 경우 자바 스크립트 파일은 정적이어서 내 호기심입니다. 또한 파일을 열었고 파일로드시 변수에 액세스하려고 시도하지 않았습니다. 필자는 캐싱이나 일반 버전 제어에 대해 생각해 본 적이 없습니다.

+0

URL이 ".js"로 끝나기 만해도 웹 서버가 정적 JavaScript 파일을 반환하는 것은 아닙니다. 그것은 동적으로 무언가를 리턴하는 핸들러에 요청을 전달할 수 있습니다. –

+0

웹 서버로 전달됩니다 (전체 URL은). 웹 서버는 URL로 원하는 모든 작업을 수행 할 수 있습니다. IIRC는 Bing에서이 접근법을 사용합니다! 지도. –

+0

맙소사,이 질문에는 많은 응답이 빠릅니다. 거의 똑같은 것을 전반적으로. #StackOverflowFlaws –

답변

10

필자는 자신의 스크립트 버전 3.3을 만들면 스크립트의 URL에서 버전을 변경하여 사용자가 이전 스크립트를 실행하지 않고 새 파일을 다운로드하도록 할 수 있다고 확신합니다. 브라우저에 캐시됩니다.

이 경우 캐싱 전략의 일부입니다.

5

기억해야 할 점은이 ./js/somefile.js?version=3.2은 실제 파일 일 필요가 없다는 것입니다. 즉석에서 파일을 만드는 페이지가 될 수 있습니다. 따라서 요청에 "이 js 파일의 버전 3을 제공하십시오"라는 메시지가 표시 될 수 있으며 서버 측 코드가이를 작성하여 출력 스트림에 씁니다.

다른 옵션은 브라우저가 파일을 캐시하지 않고 요청할 때 새 파일을 강제 종료하는 것입니다. URI가 변경 되었기 때문에 파일이 완전히 새로운 것으로 생각할 것입니다.

+0

고마워,하지만이 경우 그들은 정적 자바 스크립트 파일입니다. 또한 파일을 열었을 때 전달 된 값에 액세스하려고 시도하는 아무 것도 볼 수 없습니다. –

1

이 경우에는 소스 파일이 버전간에 캐시되지 않도록하기 위해 사용 된 것입니다.

물론, 요청의 반대쪽에 무엇이 있는지 모른 채 서버 측에서 javascript 파일을 생성 할 수도 있습니다. 결정적인 것은 어렵습니다. URL의 ?... 부분은 쿼리 문자열이라고합니다.

1

사용 가능한 경우 브라우저에서 새 버전의 스크립트를 다운로드하는 데 사용됩니다. 새로운 버전이 배포 될 때마다 url의 버전 번호가 증가하여 브라우저가이를 다른 파일로 볼 수 있습니다.

1

파일 확장자가 .js 인 것만으로는 대상이 실제 .js 파일이 아닙니다. 그들은 요청 된 URL을 스크립트에 전달하도록 웹 서버를 설정하고 (또는 somefile.js라는 이름의 스크립트가 있음) 파일 이름과 버전을 해석하도록 할 수 있습니다.

6

JavaScript 파일의 새 버전을 게시하면 HTML 문서에서 해당 버전을 범할 수 있습니다.요청시 서버 측에서 아무 작업도 수행하지 않지만 브라우저가이를 다른 파일로 취급하게되어 브라우저가 스크립트를 다시 가져 와서 파일의 로컬 캐시를 우회하도록 만듭니다.

이렇게하면 캐시 시간을 매우 길게 설정할 수 있지만 필요한 경우 스크립트를 자주 업데이트하는 기능은 희생시키지 않습니다.

2

(잘 구성된) 웹 서버는 JavaScript 소스 코드와 같은 정적 파일을 한 번 보내고 웹 브라우저에 해당 파일을 특정 기간 동안 캐시하도록 지시합니다 (하루, 한 주, 한 달 또는 한 달이 될 수 있음). 더 길게). 브라우저가 동일한 파일에 대한 다른 요청을 보게되면 서버에서 새 코드를받는 대신 해당 버전을 사용하게됩니다.

URL이 변경되면 (예 : 쿼리 문자열 추가) 브라우저는 캐시 된 버전이 좋지 않으며 새로운 버전을 얻는다고 의심합니다. 따라서 ?은 개발자가 "죄송합니다.이 파일을 변경 했으므로 브라우저에 새 복사본이 있는지 확인하십시오."라고 말합니다.

1

검색어 문자열은 자바 스크립트와 아무 관련이 없습니다. 일부 서버 측 코드는 나타나는 해당 쿼리 문자열에 따라 다른 버전을 호스팅합니다.

URL의 경로에 대해 아무 것도 가정하지 마십시오. URL의 경로를 확장해도 실제로는 아무 것도 알려주지 않습니다. URL은 완전히 동적이며 일부 서버 측 코드에 의해 제공되거나 웹 서버에서 동적으로 다시 작성할 수 있습니다.

이제 클라이언트 측 캐싱을 방지하기 위해 javascript 파일을로드 할 때 url에 쿼리 문자열을 추가하는 것이 일반적입니다. 페이지가 새 버전의 스크립트를 업데이트하고 참조하면 페이지가 바스 트되고 클라이언트가 스크립트를 새로 고칠 수 있습니다.

관련 문제