2014-09-22 3 views
4

도메인 간 요청을 허용하지만 서버 코드를 제어 할 수없는 서버에 대해 Ajax 요청을 수행하고 있습니다. 내 욕망은 응답에서 HTTP 링크 헤더를 추출하는 것입니다.Ajax를 사용하여 HTTP 300 코드 응답에서 HTTP 헤더 추출

HTTP/1.1 302 Found 
Link: <http://thedataIwant.com>;rel="foo" 
Location: http://someothersite.com 

브라우저는 HTTP 3XX 코드를 다음과 내가 내용을 얻을 : 예를 들어 : (URL이 컬로 조회 할 때 관찰 등)

$.ajax({ 
url: theURL 
}).done(function(data,textStatus,xhr){}); 

는 다음과 같이 응답하는 서버 안타 HTTP 헤더의 http://someothersite.com에서 done() 처리기; 그러나 먼저 3XX 코드를 사용하여 초기 HTTP 응답의 링크 헤더 내용을 추출하고 싶습니다.

3XX 상태 코드가있는 HTTP 응답에서 HTTP 링크 헤더의 내용을 추출하려면 어떻게해야합니까?

답변

3

나는 귀하의 질문에 흥미가 있었지만 해결책을 찾기 위해 주위를 둘러 보았습니다. 불행히도 직접적인 것은 없습니다. 지금까지 읽은 모든 게시물 (How to manage a redirect request after a jQuery Ajax call 및 그 비슷한 것들)에 따르면 브라우저는 일반적으로 콘텐츠를 가져 와서 사용자에게 엔드 포인트를 제공하기 때문에 301 리디렉션을 단순히 잡을 수는 없습니다. 따라서 사용자 대신에 200 상태 코드가 표시됩니다. 302. 이 문제를 해결하기 위해 사람들은 사용자 지정 헤더를 사용하도록 제안하고 있습니다. Ajax 요청 후 헤더를 수신하면 자신의 조작 즉 Link 헤더를 저장 한 다음 두 번째 ajax 요청을 수행하여 MyRedirectLocationHeader: http://someothersite.com에서 콘텐츠를 가져올 수 있습니다.

코드는 다음과 비슷한 보일 것이다

$.ajax({ 
    url: theURL, 
    success: function(response, status, xhr) { 
     var link = xhr.getResponseHeader('Link'); 
     if(link != null) { 
      // my second ajax request to the link in the MyRedirectLocationHeader 
     } 
    } 
}); 

이 끔찍한 찾고 해킹이다,하지만 그건 내가 지금까지 실제로 작동하는 찾은 유일한 해결 방법입니다. 또 다른 방법은 PHP, Java 또는 다른 유사한 언어를 사용하여 proxy 스크립트/서비스를 만들고 리디렉션을 따르지 않고 요청을 받아 JSON 또는 XML으로 LinkLocation 만 인쇄하는 것입니다. 무엇이 나에게 흥미 이후 자바 스크립트가 응답을 분석하고 someothersite.com

를 진행 것입니다,하지만, 공식 jQuery를 ajax documentation 페이지합니다 (statusCode에 대한 문서 옆) 3xx 리디렉션에 대한 지원이 의미하는 것입니다하지만 '아무튼 작동하지 않는 것 같습니다.

+0

success()를 사용하지 않으려했으나 사용하지 않으려했으나 여기에서 검색 한 링크 헤더가 여전히 최종 목적지에서 200 코드로 데이터를 가져오고 3XX로 응답의 헤더가 아닌 것처럼 보입니다. –

+0

아마'302' 리디렉션 응답을하고 있기 때문일 것입니다. 상태 코드는'200'이고 사용자 정의 헤더는'MyRedirectHeader : http : // someothersite.com'이어야합니다. – tftd

+0

서버에서 사용자 정의 헤더를 리턴 할 수 있습니까? 그렇다면 "나는 서버 코드를 제어 할 수 없다"라는 질문에 따라 그렇지 않은 경우 명확히하십시오. 감사. –