로컬 JavaScript 파일의 연결된 참조를 GitHub 원시 버전으로 변경하려고하면 테스트 파일이 작동하지 않습니다. 오류는 다음과 같습니다
MIME 유형 (
text/plain
)을 실행할 수없고 엄격한 MIME 유형 검사가 활성화되어 스크립트 실행을 거부했습니다 .
이 동작을 비활성화하는 방법이 있습니까, 아니면 GitHub 원시 파일에 링크 할 수있는 서비스가 있습니까?
작업 코드 :
<script src="bootstrap-wysiwyg.js"></script>
작동하지 않는 코드 :
<script src="https://raw.github.com/mindmup/bootstrap-wysiwyg/master/bootstrap-wysiwyg.js"></script>
답변
이 인 좋은 해결 방법은 사용하여, 지금,이에 대한 jsdelivr.net을 .
단계 :
- GitHub에서 링크를 찾아 “Raw”버전을 클릭하십시오.
- URL을 복사하십시오.
- 변경
raw.githubusercontent.com
에cdn.jsdelivr.net
/gh/
사용자 이름 앞에 삽입하십시오 .branch
이름을 제거하십시오 .- (선택 사항) 링크하려는 버전을 다음과 같이 삽입하십시오
@version
(이를 수행하지 않으면 최신 버전 이 제공되므로 장기 캐싱이 발생할 수 있음)
예 :
http://raw.githubusercontent.com/<username>/<repo>/<branch>/path/to/file.js
이 URL을 사용하여 최신 버전을 얻으십시오.
http://cdn.jsdelivr.net/gh/<username>/<repo>/path/to/file.js
이 URL을 사용하여 특정 버전을 얻거나 해시를 커밋하십시오.
http://cdn.jsdelivr.net/gh/<username>/<repo>@<version or hash>/path/to/file.js
프로덕션 환경의 경우 지점이 아닌 특정 태그 또는 커밋 해시를 타겟팅하는 것이 좋습니다. 최신 링크를 사용하면 파일이 장기간 캐싱되어 새 버전을 푸시 할 때 링크가 업데이트되지 않을 수 있습니다. commit-hash 또는 tag로 파일에 링크하면 링크가 버전에 고유합니다.
왜 이것이 필요한가요?
2013 년에 GitHub는을 사용하기 시작했으며 X-Content-Type-Options: nosniff
, 이는 최신 브라우저에서 엄격한 MIME 유형 검사를 시행하도록 지시합니다. 그런 다음 서버가 리턴 한 MIME 유형으로 원시 파일을 리턴하여 브라우저가 의도 한대로 파일을 사용하지 못하게합니다 (브라우저가 설정을 준수하는 경우).
이 주제에 대한 배경 지식은 이 토론 스레드 를 참조하십시오 .
답변
더 이상 불가능합니다. GitHub는 JavaScript 핫 링크를 명시 적으로 비활성화했으며 최신 버전의 브라우저는 해당 설정을 준수합니다.
답변
rawgithub.com
에 리디렉션 rawgit.com
위의 예는 지금 것이다 그래서
http://rawgit.com/user/package/master/link.min.js
답변
GitHub Pages 는이 문제에 대한 GitHub의 공식 솔루션입니다.
raw.githubusercontent
text/plain
파일이 CSS 또는 JavaScript 파일 인 경우에도 모든 파일이 MIME 유형을 사용하도록 합니다. 따라서 https://raw.githubusercontent.com/‹user›/‹repo›/‹branch›/‹filepath›
올바른 MIME 형식이 아닌 일반 텍스트 파일이되고이를 통해 링크 <link href="..."/>
하거나 <script src="..."></script>
작동하지 않습니다. CSS가 적용되지 않습니다 / JS가 실행되지 않습니다.
GitHub Pages 는 리포지토리를 특수 URL로 호스팅하므로 파일을 체크인하고 푸시하기 만하면됩니다. 대부분의 경우, GitHub Pages에서는 특수 분기에 커밋해야합니다 gh-pages
.
일반적으로의 새 사이트 https://‹user›.github.io/‹repo›
에서 gh-pages
브랜치에 커밋 된 모든 파일 (가장 최근 커밋)이이 URL에 있습니다. 따라서를 통해 js 파일에 연결할 수 <script src="https://‹user›.github.io/‹repo›/file.js"></script>
있으며 이것이 올바른 MIME 유형입니다.
빌드 파일이 있습니까?
개인적으로이 분기를에 병렬로 실행하는 것이 좋습니다 master
. 온 gh-pages
지점, 당신은 당신의 편집 할 수 있습니다 .gitignore
할 파일을 체크인 하는 동안, 당신이 당신의 위치 (예를 들어, 당신이 어떤 축소 된 경우 / 컴파일 된 파일)에 필요한 모든 DIST / 빌드 파일 무시를 유지하는 당신에 master
지점입니다. 일반적으로 일반 리포지토리에서 빌드 파일의 변경 내용을 추적하지 않기 때문에 유용합니다. 당신은 단순히 병합, 호스팅 된 파일을 업데이트 할 때마다 master
로 gh-pages
, 다시, 커밋 한 다음 누릅니다.
(팁 : 다음 단계를 통해 동일한 커밋에서 병합 및 재 구축 할 수 있습니다.)
$ git checkout gh-pages
$ git merge --no-ff --no-commit master # prepare the merge but don’t commit it (as if there were a merge conflict)
$ npm run build # (or whatever your build process is)
$ git add . # stage the newly built files
$ git merge --continue # commit the merge
$ git push origin gh-pages
답변
위의 답변은 분명히 질문에 대답하지만 다른 대안을 제공하고 싶습니다-비슷한 문제를 해결하기위한 다른 견해 / 접근법.
브라우저 확장을 사용 X-Content-Type-Options
하여 raw.githubusercontent.com
파일의 응답 헤더 를 제거 할 수도 있습니다 . 응답 헤더를 수정하기위한 몇 가지 브라우저 확장이 있습니다.
Requestly를 사용하면 두 가지 해결책을 제안 할 수 있습니다.
해결 방법 1 : 헤더 수정 규칙 사용 및 응답 헤더 제거
단계
- http://www.requestly.in 에서 Requestly 설치
- 규칙 페이지로 이동
- 규칙 추가를 위해 아이콘 추가를 클릭하십시오
- 헤더 수정을 선택하십시오.
- 이름과 설명을 해주세요
- 선택
Remove
->Response
->X-Content-Type-Options
- 소스 필드에
Url
->Contains
->를 입력하십시오.raw.githubusercontent.com
해결 방법 2 : 호스트 규칙 교체 사용
- http://www.requestly.in 에서 Requestly 설치
- 규칙 페이지로 이동
- 규칙 추가를 위해 아이콘 추가를 클릭하십시오
- 교체
raw.githubusercontent.com
로rawgit.com
테스트하는 방법
코드에서 원시 github 파일을 스크립트로 사용할 수 있는지 테스트하기 위해 간단한 JS Fiddle을 만들었습니다.
다음 코드 가있는 바이올린 입니다.
<center id="msg"></center>
<script src="https://raw.githubusercontent.com/sachinjain024/practicebook/master/web-extensions-master/storage/background.js"></script>
<script>
try {
if (typeof BG.Methods !== 'undefoned') {
document.getElementById('msg').innerHTML = 'Script evaluated successfully!';
}
} catch (e) {
document.getElementById('msg').innerHTML = 'Problem evaluating script';
}
</script>
이 표시 Script evaluated successfully!
되면 코드에서 원시 github 파일을 사용할 수 있음을 의미합니다. 그렇지 않으면 Problem evaluating script
원시 github 소스에서 스크립트를 실행하는 동안 문제가 있음을 나타냅니다.
또한 Requestly 블로그 에 이것에 관한 기사 를 썼습니다 . 자세한 내용은 참조하십시오.
그것이 도움이되기를 바랍니다!
면책 조항 : 나는 Requestly의 저자이므로 원하지 않는 것을 비난 할 수 있습니다.
답변
이 사이트에서
nosniff
http 헤더 제거mime type
내선 이름으로 수정
이 사이트 :
참고 : RawGit의 수명이 다했습니다
답변
일을 명확하고 짧게 만들려면
//raw.githubusercontent.com
-> //rawgit.com
이는 프로덕션 호스팅을위한 cdn이 아니라 rawgit의 개발 호스팅에 의해 처리됩니다.