뉴스 웹 사이트의 피드를 가져 오려고합니다. Google의 피드 API를 사용하여 feedburner 피드를 json으로 변환 할 것이라고 생각했습니다. 다음 URL은 json 형식으로 피드에서 10 개의 게시물을 반환합니다. http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=10&q=http://feeds.feedburner.com/mathrubhumi
위 URL의 내용을 가져 오기 위해 다음 코드를 사용했습니다.
$.ajax({
type: "GET",
dataType: "jsonp",
url: "http://ajax.googleapis.com/ajax/services/feed/load",
data: {
"v": "1.0",
"num": "10",
"q": "http://feeds.feedburner.com/mathrubhumi"
},
success: function(result) {
//.....
}
});
하지만 작동하지 않고 다음과 같은 오류가 발생합니다.
XMLHttpRequest는 http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=10&q=http%3A%2F%2Ffeeds.feedburner.com%2Fmathrubhumi를 로드 할 수 없습니다
. 요청 된 리소스에 ‘Access-Control-Allow-Origin’헤더가 없습니다. 따라서 원본 ‘ http : // localhost ‘는 액세스가 허용되지 않습니다.
이 문제를 어떻게 해결합니까?
답변
나는이 힘 가능성이 크롬은 지원하지 않습니다 할 생각 localhost
관통 이동 Access-Control-Allow-Origin
– 참조 크롬 문제
Chrome Access-Control-Allow-Origin
이 헤더를 보내도록하려면 / etc / hosts 파일의 localhost를 다음과 같은 다른 도메인으로 별칭을 지정하면됩니다.
127.0.0.1 localhost yourdomain.com
그런 다음 yourdomain.com
대신을 사용하여 스크립트에 액세스 localhost
하면 호출이 성공합니다.
답변
Google 크롬 브라우저를 사용하는 경우 확장 프로그램으로 해킹 할 수 있습니다.
애플리케이션에서 즉시 CORS 헤더를 수정 하는 Chrome 확장 프로그램 을 찾을 수 있습니다 . 분명히 이것은 Chrome 전용이지만 전혀 변경 사항이 전혀없이 작동하는 것이 좋습니다.
로컬 머신에서 앱을 디버깅하는 데 사용할 수 있습니다 (모든 것이 프로덕션에서 작동하는 경우).
참고 : URL이 깨지면 확장 이름은 Access-Control-Allow-Origin : * 입니다. 예를 들어 youtube는이 확장 프로그램에서 작동하지 않기 때문에 작업하지 않을 때는이 확장 프로그램을 비활성화하는 것이 좋습니다.
답변
이것을 시도하십시오-다음과 같이 헤더를 설정하여 Ajax 호출을 설정하십시오.
var uri = "http://localhost:50869/odata/mydatafeeds"
$.ajax({
url: uri,
beforeSend: function (request) {
request.setRequestHeader("Authorization", "Negotiate");
},
async: true,
success: function (data) {
alert(JSON.stringify(data));
},
error: function (xhr, textStatus, errorMessage) {
alert(errorMessage);
}
});
그런 다음 다음 명령 줄로 Chrome을 열어 코드를 실행합니다.
chrome.exe --user-data-dir="C:/Chrome dev session" --disable-web-security
답변
참고로이 문제에 적용되는 jQuery 문서에서이 정보를 발견했습니다.
브라우저 보안 제한으로 인해 대부분의 “Ajax”요청에는 동일한 출처 정책 이 적용됩니다 . 요청이 다른 도메인, 하위 도메인, 포트 또는 프로토콜에서 데이터를 성공적으로 검색 할 수 없습니다.
@thanix와 같은 호스트 파일을 변경하는 것은 저에게 효과가 없었지만 @dkruchok에서 언급 한 확장명이 문제를 해결했습니다.
답변
Chrome에서는 두 개의 서로 다른 로컬 호스트를 통합 할 수 없으므로이 오류가 발생합니다. Nuget Manager의 Microsoft Visual Studio Web Api Core 패키지를 포함하고 WebApiConfig.cs
파일 의 WebApi 프로젝트에 두 줄의 코드를 추가하기 만하면 됩니다.
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
그런 다음 모두 완료되었습니다.
답변
봄 부팅 서비스를 호출하는 경우. 아래 코드를 사용하여 처리 할 수 있습니다.
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "POST", "PUT", "DELETE", "HEAD", "OPTIONS")
.allowedHeaders("*", "Access-Control-Allow-Headers", "origin", "Content-type", "accept", "x-requested-with", "x-requested-by") //What is this for?
.allowCredentials(true);
}
};
}
답변
개발의 경우 https://cors-anywhere.herokuapp.com 을 사용할 수 있으며 프로덕션의 경우 자체 프록시를 설정하는 것이 좋습니다.
async function read() {
let r= await (await fetch('https://cors-anywhere.herokuapp.com/http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=10&q=http://feeds.feedburner.com/mathrubhumi')).json();
console.log(r);
}
read();