2017-12-28 8 views
10

Internet Explorer에서 MIME 형식이 일치하지 않아 요청한 URL이 차단되었습니다. 시나리오는 프록시 서버를 통해 클라이언트에서 대상 서버로 요청을 보내는 것입니다. A (클라이언트), B (프록시 서버), C (대상 서버)가 있다고 가정합니다. 요청은 A (클라이언트)에서 B (프록시 서버)로 이동하고 B (프록시 서버)에서 C (대상 서버)로 이동합니다. 마찬가지로 응답은 C (대상 서버)에서 B (프록시 서버)로, B (프록시 서버)에서 요청이 시작된 A (클라이언트)로도 제공됩니다. 이제 문제는 응답 Content-type이 "application/liquid"이지만 클라이언트는 "script src = proxyserver/test"를 사용하여 요청을 실행하므로 응답을위한 예외 Content-Type은 "text/javascript"가됩니다. 대상 서버의 "application/liquid"에서 응답의 Content-type을 변경하는 것은 허용되지 않습니다. 전체 시나리오는 다른 모든 브라우저에서 완벽하게 작동하며 응답에 쉽게 액세스 할 수 있습니다. 그러나 IE에서는 "MIME 형식 불일치로 인해 요청이 차단되었습니다"라는 오류가 발생합니다. 그렇다면 우리가 어떻게 작동하게 할 수있는 솔루션을 제공 할 수 있습니까? 다음은 오류의 스크린 샷입니다.프록시를 사용하는 InternetExplorer의 MIME 형식 문제

+0

해당 요청에 대한 "수락"헤더 란 무엇입니까? AJAX 요청입니까 아니면 정기적 요청입니까? –

+0

일반 요청 !!! 스크립트 태그를 통해 호출되었습니다 ... –

+0

"스크립트 태그를 통해 호출되었습니다"-이 요청을 발행 한 코드를 추가 할 수 있습니까? 아래에 적어 놓은 답변을 고려 했습니까? –

답변

1

ajax 호출 또는 xmlhttprequest를 사용하여 원하는 코드를 호출하는 외부 스크립트 스크립트를 만들어야합니다. 여기서 accept 헤더를 원하는 MIME 유형으로 설정해야합니다. 따라서 클라이언트에서 스크립트 태그를 사용하여 외부 스크립트를 호출합니다.이 스크립트 태그는 프록시 서버를 통해 실행되며 실제 데이터에 대한 호출을 제공하고 응답을 수신하여 클라이언트에 다시 보냅니다. 그러나 스크립트를 호출 할 때 기본적으로 헤더는 text/javascript로 반환되므로 오류가 해결됩니다.

3

TL

enter image description here

, DR - 당신이 MIME 형식을 변경해야합니다.

이 문제는 요청 예상 유형이 응답 내용 유형 (헤더에 표시된대로)과 다를 때 나타납니다. 올바른 해결책은 응답을 만들고 헤더를 서로 호환되도록 요청하는 것입니다. 다시 말해 스크립트 태그을 통해 ""이라고하는 전화 번호가 content-type 헤더와 동일한 accept 헤더로 변경되어야합니다.

NOSNIFF 블록 요청 요청 유형이 "스타일"과 MIME 형식이 없습니다 "텍스트/CSS는"또는 "스크립트"및 인 경우도

은 문서를 살펴 MIME 유형이 JavaScript MIME 유형이 아닙니다.

here을 참조하십시오.

나는 URL을 볼 : Content-Type:text/html; charset=utf-8자바 스크립트 - 마임 타입되지 않습니다 : https://nirma.myshopify.com/apps/GeoShippingBar/geoShippingBarProxy이 콘텐츠 유형이 있습니다.

+0

당신의 솔루션을 시도했지만 작동하지 않습니다. 네스 niffniff 정확하게 mime 형식 일치를 묻는 있지만 여기에 문제가 프록시 코드 액체 코드 및 자바 스크립트 코드가 있음을 이해하므로 액체 코드를 실행하려면 content-type을 "application/liquid"로 설정합니다. 기본적으로 content type은 "text/html"로 읽습니다. 이 경우 MIME 형식과 일치시키기 위해 무엇을해야합니까? 오류는 Internet Explorer에서만 발생하며 Chrome이나 FireFox에서는 발생하지 않습니다. 그것은 다른 사람들에게도 올바르게 작동하고 있습니다. –

0

기본적으로이 작업을 수행 할 수 없습니다. App Proxys는 스크립트 파일이 아닌 페이지를 만드는 데 사용됩니다. 액체 부분에서

동적는 니펫에 넣을 수 다음과 같이 당신이 가고 싶은 곳을 얻을 것이다

가능한 전략이다.

<script type="text/javascrpt"> 
    geoShippingConfig = { 
     somevalue: '{{ shop.X }}', 
     etc 
    }; 
</script> 

앱을 설치할 때 주 레이아웃에 삽입합니다. 다양한 앱이 이런 종류의 일을합니다. 당신은 당신이 그것에 가고 있다는 것을 고객에게 경고해야하지만, 그것은 상당히 양심적입니다. 테마가 변경되면 스 니펫과 포함을 다시 주입하기 위해 새로 고침 버튼이나 다른 방법이 필요합니다.

그런 다음 앱은 앱 프록시를 호출하는 대신 코드로 스크립트 태그를 설치합니다. 스크립트 태그는 URL에 상점을 포함하므로 반환 된 스크립트 파일에 대한 앱 별 설정을 할 수 있습니다. 스크립트 태그 스크립트는로드시 geoShippingConfig를 사용합니다.

+0

앱 프록시는 다른 서버의 스토어에서 변경 작업을 수행하기위한 용도로도 사용됩니다. 스 니펫을 만드는 것이 가능하다는 것을 알고 있지만 앱 프록시를 사용하여이를 수행하고 싶습니다. 이미 IE를 제외한 다른 모든 브라우저에서 작동합니다. 만약 당신이 IE를위한 해결책을 제공 할 수 있지만 더 좋을 것이지만 그것은 불가능하다고 말하지 말아주세요. –

+0

할 수없는 일은 MIME 형식을 변경하는 것입니다. 프록시 응답의 content-type을 applicationéliquid로 설정하면 Shopify가이를 브라우저에 texthtml로 반환합니다. 시도 할 수있는 한 가지는 요청에 .js 확장자가있는 URL을 작성하는 것입니다. 이로 인해 Shopify는 .js.liquid 자산 파일과 같은 응답을 처리 할 수 ​​있습니다. – bknights

2

이 시도 :

response.addHeader를 ("텍스트/자바 스크립트" "동의 함");

은 호출 된 위치에서 스크립트 태그의 응답으로 설정됩니다.