2017-03-03 10 views
1

사용자 에이전트가 자바 스크립트를 사용하여 말려 올 때 브라우저에서 다른 응답을 반환하려면 어떻게해야합니까? 예를 들어 대한사용자 에이전트가 말려있을 때 브라우저에서 다른 응답을 반환합니다.

는 :

if user agent is curl 
return /feed.json 
else 
return index.html 

이것은 내가 가지고있는 코드입니다,하지만 난 명령을 실행할 때 curl http://example.com 그냥 HTML 응답을 사용중인

<script> 
     function browserRedirect(){ 
     var userAgent = navigator.userAgent.toLowerCase(); 
     console.log(userAgent); 
     var curl = userAgent.match(/curl|PycURL/i) == "curl"; 
     var chrome = userAgent.match(/chrome/i) == "chrome"; 

     // Check that the user agent is curl 
     if(curl) { 
      window.location.href = "/feed.json" 
     } 
     } 

     browserRedirect() 
</script> 

답변

1

코드를 반환 Javascript 기반이 아닌 Javascript 기반 환경에서 Javascript 기반 리디렉션을 사용하려고 할 때 작동하지 않습니다. 컬 한 경우에도 컬링은 리디렉션을 따르지 않을 것입니다. 컬링은 HTTP 헤더와 응답을 반환하기 때문입니다. -is 및 redire ct는 단지 HTTP 헤더입니다.

리디렉션을 사용하는 대신 사용자 에이전트에 따라 다른 MIME 유형 (HTTP 헤더에 있음)과 다른 출력 내용을 출력해야합니다.

예를 들어 기본적으로 페이지가 HTML (따라서 text/html MIME 유형)을 반환하는 경우 수신 된 사용자 에이전트 헤더가 사용중인 "curl"정규 표현식과 일치하면 "Content- MIME 형식에 대한 application/json "HTTP 헤더를 입력하고 페이지의 기본 HTML 출력 대신 feed.json 파일에서 콘텐츠를 출력하고 거기에서 페이지의 실행을 종료하십시오. 따라서이 코드는 서버 측 코드의 시작점에 위치해야합니다.

사실이 컨텍스트를 고려하지 않고 자바 스크립트 코드를 관찰 할 때 match()은 문자열 일치 (단일 문자열이 아닌) 배열을 반환하기 때문에 IF 블록이 실행되지 않습니다. 일치하지 않으면 null이 반환됩니다. Javascript가 지원되는 표준 브라우저에 대한 사용자 에이전트 기반 리디렉션의 경우 코드를 if(navigator.userAgent.match(/safari/i)){ // Code goes here } (이 예에서는 일치하는 브라우저로 사파리 사용)으로 변경해야합니다. 또한 toLowercase()에 대한 호출은 regexp 끝에 "i"플래그를 사용하여 대소 문자를 구분하지 않고 검색 할 때 필요하지 않습니다.