programing

파일에서 실행 중인 응용 프로그램에 대한 CORS 오류:// 구성표

oldcodes 2023. 8. 17. 21:51
반응형

파일에서 실행 중인 응용 프로그램에 대한 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://devChrome 개발 도구에서.

그래서 처음으로 생각해봐야 할 것은 앱이 안드로이드/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에 대한 자세한 내용은 다음 리소스를 참조하십시오.

CORS에 대한 브라우저 지원도 확인합니다.

그리고 W3C에 공식적인 CORS 사양을 기록하기 위해 :)

언급URL : https://stackoverflow.com/questions/25914071/cors-error-for-application-running-from-file-scheme

반응형