2016-11-23 2 views
1

안녕하세요, XMLHttpRequest을 사용하여 https://www.instagram.com/USERNAME으로 GET을 요청합니다. 내 목표는 사용자가 입력 한 Instagram 사용자 이름이 실제로 존재하는지 확인하는 것이고 클라이언트 측에서이를 확인할 수 있다면 좋을 것입니다.'Access-Control-Allow-Origin'헤더가없는 리소스에서 상태 코드를 가져 오는 중

예를 들어, GET 요청을 https://www.instagram.com/9gag으로 만들면 200이 다시 생깁니다. https://www.instagram.com/sakjafkhdsafd 그리고 당신은 404 등을 맞이합니다.

XMLHttpRequest cannot load https://www.instagram.com/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access. 

좋아, 서버가 알아서해야 할 것 같아요 : 인스 타 그램이 CORS를 허용하지 않는 것처럼 나는 다음과 같은 오류가 XMLHttpRequest.send()을 실행할 때 때문에

지금, 지금 ... ... 보인다 이 ...하지만! 내 네트워크 탭을 확인하면 실제로 요청이 만들어진 것을보고 예상 된 상태 코드와 함께 응답을 얻고 있습니다. 나는 또한 모든 HTML을 얻는다. 뭐야 ...?

브라우저 (내 경우에는 크롬)가 어떻게 캡처 할 수 있습니까?하지만 내 응용 프로그램은 캡처 할 수 없습니까?

의 요청에 따라 내 코드를 추가 :

var xhr = new XMLHttpRequest(); 

xhr.open("GET", "https://www.instagram.com/" + username, false); 
xhr.onreadystatechange = function() { 
     if (xhr.readyState == 4 && xhr.status == 200) { 
      // do something... 
     } 
    } 
xhr.send() 

편집 :

난 그냥 파이어 폭스에서이 테스트 나는 301 다시 얻을. 제 질문은 "네트워크 탭에서 예상되는 상태 코드를 얻기 위해 크롬이 수행하는 작업은 무엇입니까?"라고 생각합니다.

+0

여기에서 테스트하십시오. 내 경우에는 모두가 301 http 상태 코드를 반환합니다. 여기에 xmlHttpRequest 코드를 게시 할 수 있습니까? –

+0

@BrunoPeres - 질문에 추가되었습니다. 그냥 단순한 원시 xmlhttprequest, 동기식입니다.하지만 아무 것도 변경해서는 안된다고 생각합니다. – jgozal

+0

크롬 콘솔에서 '9gag'대신 'username'을 사용하고 네트워크 탭에 20050을 다시 가져온 코드를 확인하려면 – jgozal

답변

0

브라우저가 콘텐츠를 성공적으로 가져 왔지만 CORS으로 인해 브라우저에서 내용을 읽을 수 없습니다.

CORS는 다소 혼란 스럽습니다. 서버가 요청을 처리해도 괜찮 으면 브라우저가 차단하는 이유는 무엇입니까? 하지만 괜찮습니다. 이전 버전과 호환되는 보안 제한 사항입니다.

더 놀라운 것은 이것이 오류에도 해당된다는 것입니다. 서버는 클라이언트가 상태 코드 또는 오류 메시지를 읽을 수 있도록하기 위해 응답에 특수 헤더를 추가해야합니다!

하지만 브라우저는 브라우저 콘솔 및 네트워크 탭에 표시합니다.

관련 문제