[iframe] 리소스를로드하지 못했습니다 : net :: ERR_INSECURE_RESPONSE

이 오류가 발생하지 않도록 서버를 속일 수있는 방법이 있습니까?

유효한 보안 인증서로 서명되지 않았기 때문에 컨텐츠가 차단되었습니다.

html 웹 사이트의 iframe을 다른 웹 사이트로 가져오고 있지만이 질문의 제목과 인터넷 탐색기에서 콘솔 (크롬) 오류가 계속 발생합니다.

유효한 보안 인증서로 서명되지 않았기 때문에 컨텐츠가 차단되었습니다.



답변

리소스는 아마도 HTTPS 프로토콜을 통한 자체 서명 SSL 인증서를 사용합니다. Chromium이므로 Chrome은 기본적으로 이러한 종류의 리소스를 안전하지 않은 것으로 간주합니다.

이 방법으로 우회 할 수 있습니다 :

  • 프레임의 URL이이라고 가정하면 https://www.domain.com크롬에서 새 탭을 열고로 이동하십시오 https://www.domain.com.
  • Chrome에서 SSL 인증서 수락을 요청합니다. 받아들입니다.
  • 그런 다음 프레임과 함께 페이지를 다시로드하면 이제 작동합니다.

당신이 짐작할 수있는 문제는 웹 사이트의 각 방문자 가이 작업을 수행하여 프레임에 액세스해야한다는 것입니다.

크롬은 각 탐색 세션에 대한 URL을 차단하지만 크롬은이 도메인을 신뢰한다는 사실을 기억할 수 있습니다.

HTTPS가 아닌 HTTP로 프레임에 액세스 할 수 있으면이 프레임을 사용하는 것이 좋습니다. 따라서이 문제가 해결됩니다.


답변

때로는 Chrome이이 오류를 발생시키지 않아야합니다. Chrome에 새 버전이있을 때 문제가 발생하여 다시 시작해야했습니다. 동일한 페이지를 다시 시작한 후 오류없이 작동했습니다. 콘솔의 오류는 다음과 같습니다.

net::ERR_INSECURE_RESPONSE


답변

여전히 최신 및 Edge 브라우저 용 Asus T100 Windows 10 테스트 장치에서 위에서 설명한 문제가 발생했습니다.

솔루션이 장치날짜 / 시간 설정에있었습니다 . 어떻게 든 날짜가 올바르게 설정되지 않았습니다 (과거의 날짜). 올바른 날짜를 설정하고 브라우저를 다시 시작하여 이것을 복원하면 문제가 해결되었습니다. 이 문제를 디버깅하는 데 어려움을 겪지 않기를 바랍니다.


답변

콘솔을 열고 내부 URL을 누르십시오. API 페이지로 이동 한 다음 페이지에서 SSL 인증서를 수락하고 앱 페이지로 돌아가서 다시로드하십시오. 이전에 Dev 환경에 대해 SSL 인증서가 발행되었음을 기억하십시오.


답변

Windows 시스템으로 개발 중이거나 개발중인 경우 localhost 신뢰할 수있는 사이트로 추가 하기 만하면 됩니다 .

그리고 예, DarrylGriffiths의 의견에 따르면 Internet Explorer 설정을 추가하는 것처럼 보일 수 있습니다 …

나는 이것이 IE 설정이 아니라 Windows라고 생각합니다. MS는 그들이 단지 IE라고 가정하는 경향이 있지만 (따라서 “보호 모드 사용”옆의 경고는 IE를 다시 시작해야 함을 경고합니다) …


답변

이 오류에 대한 다른 잠재적 솔루션을 제공합니다.

백엔드에 대한 API 호출을 수행하는 프론트 엔드 애플리케이션이있는 경우 인증서가 발행 된 도메인 이름을 참조하십시오.

예 :

https://example.com/api/etc

그리고 아닙니다

https://123.4.5.6/api/etc

필자의 경우 인증서가있는 보안 서버로 API를 호출했지만 도메인 이름 대신 IP를 사용했습니다. 이것은을 던졌다 Failed to load resource: net::ERR_INSECURE_RESPONSE.


답변

이 코드를 사용하여 가능한 것을보고보고하십시오. net::ERR_INSECURE_RESPONSE

Chrome 서명에 저장하지 않기로 선택한 자체 서명 인증서를 사용 하여이 문제도 발생했습니다. https 도메인에 액세스하고 인증서를 수락하면 ajax 호출이 제대로 작동합니다. 그러나 수락 시간이 초과되거나 처음 수락되기 전에는 jQuery.ajax()호출이 자동으로 실패합니다. timeout매개 변수가 도움이되지 않고 error()함수가 호출되지 않습니다.

따라서 내 코드는 결코 success()또는 error()전화를 받지 않으므로 중단됩니다. jquery 가이 오류를 처리하는 데 버그가 있다고 생각합니다. 내 해결책은 error()지정된 시간 초과 후 전화 를 강제하는 것 입니다.

이 코드는 jquery ajax 호출 형식을 가정합니다 jQuery.ajax({url: required, success: optional, error: optional, others_ajax_params: optional}).

참고 :를 setTimeout호출하는 대신 UI와 가장 잘 통합되도록 내부에서 함수를 변경하려고 할 수 있습니다 alert().

const MS_FOR_HTTPS_FAILURE = 5000;
$.orig_ajax = $.ajax;
$.ajax = function(params)
{
  var complete = false;
  var success = params.success;
  var error = params.error;
  params.success = function() {
    if(!complete) {
      complete = true;
      if(success) success.apply(this,arguments);
    }
  }
  params.error = function() {
    if(!complete) {
      complete = true;
      if(error) error.apply(this,arguments);
    }
  }
  setTimeout(function() {
    if(!complete) {
      complete = true;
      alert("Please ensure your self-signed HTTPS certificate has been accepted. "
        + params.url);
      if(params.error)
        params.error( {},
          "Connection failure",
          "Timed out while waiting to connect to remote resource. " +
          "Possibly could not authenticate HTTPS certificate." );
    }
  }, MS_FOR_HTTPS_FAILURE);

  $.orig_ajax(params);
}