[javascript] CORB (Cross-Origin Read Blocking)

Jquery AJAX를 사용하여 타사 API를 호출했습니다. 콘솔에서 다음과 같은 오류가 발생합니다.

CORB (Cross-Origin Read Blocking) 가 MIME 유형 application / json을 사용하여 교차 출처 응답 내 URL 을 차단했습니다 . 참조 https://www.chromestatus.com/feature/5629709824032768을 자세한 내용은.

Ajax 호출에 다음 코드를 사용했습니다.

$.ajax({
  type: 'GET',
  url: My Url,
  contentType: 'application/json',
  dataType:'jsonp',
  responseType:'application/json',
  xhrFields: {
    withCredentials: false
  },
  headers: {
    'Access-Control-Allow-Credentials' : true,
    'Access-Control-Allow-Origin':'*',
    'Access-Control-Allow-Methods':'GET',
    'Access-Control-Allow-Headers':'application/json',
  },
  success: function(data) {
    console.log(data);
  },
  error: function(error) {
    console.log("FAIL....=================");
  }
});

Fiddler를 체크인했을 때 Ajax 성공 방법이 아닌 응답으로 데이터를 얻었습니다.

제발 도와주세요.



답변

 dataType:'jsonp',

JSONP 요청을하고 있지만 서버가 JSON으로 응답하고 있습니다.

브라우저는 보안 위험이 있으므로 JSON을 JSONP로 취급하는 것을 거부합니다. (브라우저 JSON을 JSONP로 처리하려고하면 기껏해야 실패합니다).

참조 이 질문 JSONP가 무엇인지에 대한 자세한 내용을. CORS가 사용 가능하기 전에 사용 된 동일한 출처 정책을 해결하기위한 불쾌한 해킹입니다. CORS는 문제에 대한 훨씬 깨끗하고 안전하며 강력한 솔루션입니다.


출처 간 요청을 시도하고 있으며 충돌하는 명령의 거대한 더미에 생각할 수있는 모든 것을 던지고있는 것 같습니다.

동일한 출처 정책이 어떻게 작동하는지 이해해야합니다.

자세한 가이드는 이 질문 을 참조하세요 .


이제 코드에 대한 몇 가지 참고 사항 :

contentType: 'application/json',
  • JSONP를 사용할 때 무시됩니다.
  • GET 요청을하고 있습니다. 유형을 설명하는 요청 본문이 없습니다.
  • 이렇게하면 원본 간 요청이 단순하지 않게됩니다. 즉, 기본 CORS 권한뿐 아니라 사전 비행도 처리해야합니다.

그것을 제거하십시오.

 dataType:'jsonp',
  • 서버가 JSONP로 응답하지 않습니다.

이것을 제거하십시오. (서버가 대신 JSONP로 응답하도록 만들 수 있지만 CORS가 더 좋습니다).

responseType:'application/json',

이것은 jQuery.ajax에서 지원하는 옵션이 아닙니다. 이것을 제거하십시오.

xhrFields : {withCredentials : false},

이것이 기본값입니다. ajaxSetup으로 true로 설정하지 않는 한 이것을 제거하십시오.

  headers: {
    'Access-Control-Allow-Credentials' : true,
    'Access-Control-Allow-Origin':'*',
    'Access-Control-Allow-Methods':'GET',
    'Access-Control-Allow-Headers':'application/json',
  },
  • 이들은 응답 헤더입니다. 그들은 요청이 아니라 응답에 속합니다.
  • 이렇게하면 원본 간 요청이 단순하지 않게됩니다. 즉, 기본 CORS 권한뿐 아니라 사전 비행도 처리해야합니다.

답변

대부분의 경우 차단 된 응답은 웹 페이지의 동작에 영향을주지 않아야하며 CORB 오류 메시지는 무시해도됩니다. 예를 들어 차단 된 응답의 본문이 이미 비어 있거나 응답이 처리 할 수없는 컨텍스트 (예 : 404 오류 페이지와 같은 HTML 문서)로 전달 될 때 경고가 발생할 수 있습니다. 태그로 전달됨).

https://www.chromium.org/Home/chromium-security/corb-for-developers

내 브라우저의 캐시를 정리해야했는데이 링크를 읽고 있는데 요청이 빈 응답을 받으면이 경고 오류가 발생합니다. 요청에 대한 CORS를 받고 있었기 때문에이 요청의 응답이 비었으므로 브라우저의 캐시를 지우고 CORS가 사라졌습니다. 크롬이 캐시에 PORT 번호를 저장했기 때문에 CORS를 받고 있었기 때문에 서버는 캐시로 인해 수락 localhost:3010하고 localhost:3002.


답변

헤더가 ‘Access-Control-Allow-Origin : *’인 응답을 반환합니다. 아래 코드에서 Php 서버 응답을 확인하십시오.

<?php header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json');
echo json_encode($phparray); 


답변

서버 측에 CORS를 추가해야합니다.

nodeJS 를 사용 하는 경우 :

먼저 아래 명령을 사용하여 설치해야합니다 cors .

npm install cors --save

이제 ( ) 와 같은 앱 시작 파일에 다음 코드추가하십시오.app.js or server.js

var express = require('express');
var app = express();

var cors = require('cors');
var bodyParser = require('body-parser');

//enables cors
app.use(cors({
  'allowedHeaders': ['sessionId', 'Content-Type'],
  'exposedHeaders': ['sessionId'],
  'origin': '*',
  'methods': 'GET,HEAD,PUT,PATCH,POST,DELETE',
  'preflightContinue': false
}));

require('./router/index')(app);


답변

질문에서 명확하지 않지만 이것이 개발 또는 테스트 클라이언트에서 발생하는 일이라고 가정하고 이미 Fiddler를 사용하고 있다면 Fiddler가 허용 응답으로 응답하도록 할 수 있습니다.

  • Fiddler에서 문제 요청 선택
  • AutoResponder탭 열기
  • Add Rule규칙을 클릭 하고 편집하여 다음을 수행하십시오.
    • 방법 : OPTIONS 서버 URL 여기 , 예Method:OPTIONS http://localhost
    • *CORSPreflightAllow
  • 검사 Unmatched requests passthrough
  • 검사 Enable Rules

몇 가지 참고 사항 :

  1. 분명히 이것은 API 서비스를 수정하는 것이 불가능하거나 실용적이지 않은 개발 / 테스트를위한 솔루션 일뿐입니다.
  2. 타사 API 제공 업체와 맺은 계약이이를 수행하도록 허용하는지 확인합니다.
  3. 다른 사람들이 언급했듯이 이것은 CORS 작동 방식의 일부이며 결국 헤더는 API 서버에 설정되어야합니다. 해당 서버를 제어하는 ​​경우 헤더를 직접 설정할 수 있습니다. 이 경우 타사 서비스이므로 원래 사이트의 URL을 제공 할 수있는 일부 메커니즘이 있다고 가정 할 수 있으며 올바른 헤더로 응답하도록 서비스를 업데이트 할 것입니다.

답변

localhost에서 작업하는 경우 이것을 시도하십시오. 이것은 나를 위해 일한 유일한 확장 및 방법입니다 (Angular, 자바 스크립트 만, PHP 없음)

https://chrome.google.com/webstore/detail/moesif-orign-cors-changer/digfbfaphojjndkpccljibejjbppifbc/related?hl=ko


답변

dataTypeajax 요청을에서 jsonp로 변경해 보셨습니까 json? 그것은 내 경우에 그것을 고쳤습니다.