파일에서 실행 중인 응용 프로그램에 대한 CORS 오류:// 구성표
각도가 있습니다.원격 서버에서 JSON 서비스를 폴링하는 JS/Cordova 앱:
$http({method: 'GET', url: 'http://example.com/index.php'})
하고 내 아파치것.http://dev
) "'라는 메시지가되므로 다음을 Access-Control-Allow-Origin' 헤더가 없습니다"라는 메시지가 표시되므로 다음을 추가하여 이 문제를 해결합니다.
Header set Access-Control-Allow-Origin "http://dev"
모든 것이 잘 작동합니다. 알겠습니다.Origin:http://dev
Chrome 개발 도구에서.
그래서 처음으로 생각해봐야 할 것은 앱이 안드로이드/iOS 웹뷰에서 실행될 때 오리진이 무엇이 될지 궁금합니다.장치에서 빌드 및 배포를 수행하기로 결정하고 원격 디버깅(iOS의 경우 Safari, Android의 경우 Weinre)에서 동일한 오류가 발생할 것으로 예상하지만, 놀랍게도 (CORS 헤더를 보내지 않고) 작동합니다!저는 또한 두 장치 모두에서 앱이 전화 OS에서 제공하는 어떤 종류의 http 서버가 아닌 파일:// 방식으로 웹 뷰에서 실행된다는 것을 발견했습니다.
따라서 연구에 따르면 파일://에 CORS가 필요하지 않습니다. 이러한 "사이트"는 모든 도메인의 XHR 리소스에 액세스할 수 있습니다.하지만 데스크톱 브라우저에서 테스트해보니 Safari는 파일에 CORS가 필요하지 않지만 Chrome은 필요하고 FireFox는 CORS 없이도 작동합니다.
그래서 제 질문은:
Android/iOS에서 내 앱이 CORS 없이 작동하는 이유는 무엇입니까? 파일://에 CORS가 적용되지 않기 때문입니까? 아니면 Cordova가 기기에서 작동하기 위해 무언가를 하고 있습니까?
있습니다<access origin="*"/>
에서 내황에는.
Q1에 대한 답변을 기다리는 동안 안전한 사이트에 있고 앱의 요청을 명시적으로 허용해야 하는 경우, 파일:// "hosts"에 대한 액세스-제어-허용-오리진 값은 얼마입니까?디버깅에 파일의 요청에 오리진 헤더가 없습니다.//
원격 서버에 대한 XHR 요청을 차단하는 것 외에도 Chrome은 내 앱 템플릿도 차단합니다(별도의 파일을 사용하고 있습니다). 아래를 참조하십시오.이것이 내 앱의 잠재적인 문제입니까, 아니면 단지 걱정할 필요가 없는 크롬 문제입니까?
XMLHttpRequest cannot load file:///Volumes/projects/phonegap/www/templates/tabs.html. Cross origin requests are only supported for HTTP.
CORS 헤더가 교차 도메인 XHR이 허용되어야 한다는 신호를 보내는 두 가지 방법이 있습니다.
- 내기
Access-Control-Allow-Origin: *
호스트 호스트 이름) - 를 용할호를에에 .
Origin
에 file://
null을 생성할 URL Origin
두 번째 옵션(슬립백)을 통해 승인할 수 없습니다.
언급된 바와 같이:
교차 도메인 정책은 PhoneGap에 적용되지 않습니다(다양한 이유로, 기본적으로 앱이 기본적으로 장치의 파일에서 실행되고 있기 때문입니다://URI).
이러한 외부 도메인에 액세스하려면 앱에 대한 화이트리스트를 설정해야 합니다.
개발자 콘솔에서 볼 수 있는 크롬 문제에 대해서는:
Failed to load resource: net::ERR_FILE_NOT_FOUND file:///C:/2.html
XMLHttpRequest cannot load file:///C:/2.html. Received an invalid response. Origin 'null' is therefore not allowed access.
크롬 프로젝트의 이슈 추적기 #40787에 대한 논의가 있었습니다.그들은 그 행동이 의도적으로 일어나고 있기 때문에 문제를 해결할 수 없는 것으로 표시합니다.
개발 목적으로 크롬에서 CORS를 간단히 끄는 해결책이 제안되어 있습니다. 크롬을 시작할 때는--allow-file-access-from-files --disable-web-security
예: 윈도우즈용
`C:\Users\YOUR_USER\AppData\Local\Google\Chrome\Application\chrome.exe --allow-file-access-from-files --disable-web-security`
다음은 코르도바와 관련된 답변입니다.
- CORS 및 폰갭 앱
- Apache Cordova의 도메인 화이트리스트 - 외부 도메인에 대한 액세스를 제어하는 보안 모델입니다.
CORS에 대한 자세한 내용은 다음 리소스를 참조하십시오.
- 출처 간 리소스 공유 및 파일://
- 멋진 CORS 튜토리얼: http://www.html5rocks.com/en/tutorials/cors/
- 오리진 정책 해결
- HTTP 액세스 제어(CORS)(Mozilla)
CORS에 대한 브라우저 지원도 확인합니다.
그리고 W3C에 공식적인 CORS 사양을 기록하기 위해 :)
언급URL : https://stackoverflow.com/questions/25914071/cors-error-for-application-running-from-file-scheme
'programing' 카테고리의 다른 글
CSS에서 "!important"를 사용하면 어떤 의미가 있습니까? (0) | 2023.08.17 |
---|---|
채팅에서 "사용자가 입력 중" 기능 (0) | 2023.08.17 |
마스터 분기를 업스트림으로 되돌리는 방법 (0) | 2023.08.17 |
HTML/CSS의 전체 div에 대한 href 링크 (0) | 2023.08.17 |
View Model Providers는 1.1.0에서 더 이상 사용되지 않습니다. (0) | 2023.08.17 |