2010-05-18 7 views
0

http://www.w3.org/TR/access-control/네트워크 오류를 교차 원점 오류와 구별 할 수 있습니까?

위에서 링크 된 CORS 스펙을 읽으면 일반적인 "네트워크 오류"와 원본 교차 액세스 거부 오류를 확실하게 구분할 수없는 것 같습니다. 사양에서 :

네트워크 오류가있는 경우 네트워크 오류 단계를 적용하십시오.

리소스 공유 확인을 수행하십시오. 실패 할 경우 네트워크 오류 단계를 적용하십시오. 내 테스트에서

http://www.w3.org/TR/access-control/#simple-cross-origin-request0 , 나는 자원 공유 검사가 확실히 실패했음을 시사한다 파이어 폭스의 구현의 기능을 찾을 수 없습니다. readyState를 4로 전환하고 상태를 0으로 설정합니다.

궁극적으로 성공 콜백, 일반 실패 콜백 및 선택적 크로스 기점 실패 콜백을 내 기능에 전달할 수 있기를 바랍니다. 어떤 도움이나 통찰력에 감사드립니다.

답변

0

원본 교차 오류가 발생할 때를 알기 위해 XHR 요청을하지 않아도됩니다. jQuery의 $.get을 기반으로 다음을 시도해보십시오.

var xhr = { 
    get: function(url, data, callback, dataType) { 
     if (!this.isSameOrigin(url)) { 
      callback(null, "Same-origin error or whatever", null); 
     } 

     $.get(url, data, callback, dataType); 
    }, 

    isSameOrigin: function(url) { 
     // Do a string comparison against window.location. Get as complicated 
     // as you'd like 
     return !!(
      // Url doesn't contain a valid protocol (relative to domain)) 
      !url.match(/^https?:\/\//i) || 
      // Url contains a protocol but the request is to the current domain 
      url.match(new RegExp("^https?://" + window.location.host, "i")) 
     ); 
    } 
}; 
+0

저는 전통적인 아약스가 아닌 교차 출처 자원 공유에 대해 이야기합니다. 클라이언트가 교차 원점 오류가 있는지 판별하기 전에 응답 헤더가 필요하기 때문에 요청을해야합니다. – greim

+0

당신은 xhr과 xmlhttprequest로 태그를 붙였습니다. 둘 다 AJAX입니다. 그렇지 않으면 어떻게 자원을 회수하고 있습니까? 어쨌든, AJAX 요청을하지 않아도되는 표준 브라우저 보안 측정 값이므로 동일한 출처 정책으로 인해 실패합니다. 유일한 예외는 JSONP 요청을하는지 여부를 모르는 경우입니다. –

+0

XHR의 최신 버전은 동일 출처 정책에 대한 예외를 허용합니다. 그러나 예외가 있으려면 특정 응답 헤더가 있어야합니다. 내 OP 상단에있는 링크를 참조하십시오. – greim

관련 문제