2017-03-03 6 views
1

ユーザエージェントがJavaScriptを使用してカールしているときに、ブラウザから異なる応答を返すにはどうすればよいですか?例えばのためのユーザエージェントがカールしているときにブラウザから異なる応答が返される

は:

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レス環境で使用しようとしているときには機能しません。また、カールしたとしても、curlはHTTPヘッダーとレスポンスを返すだけなので、リダイレクトは行われません-is、リダイレctは単なるHTTPヘッダです。

リダイレクトを使用するのではなく、ユーザーエージェントに応じて異なるMIMEタイプ(HTTPヘッダー)と異なる出力コンテンツを出力する必要があります。

たとえば、デフォルトでページがHTML(したがってtext/html MIMEタイプ)を返した場合、使用しているユーザーエージェントヘッダーが使用している「カール」正規表現と一致する場合は、 type:application/json "MIMEタイプのHTTPヘッダーを開き、ページのデフォルトのHTML出力ではなくfeed.jsonファイルからコンテンツを出力し、そこでページの実行を終了します。したがって、このコードは、サーバー側のコードが非常にうまく配置されている必要があります。

match()は、このコンテキストを考慮せずにJavaScriptコードの観測として、match()が文字列一致の配列(単一の文字列ではなく)を返すため、実行されません。 Javascriptをサポートしている標準ブラウザ用のユーザーエージェントベースのリダイレクトの場合は、コードをif(navigator.userAgent.match(/safari/i)){ // Code goes here }(この例では一致するブラウザとしてSafariを使用)に変更する必要があります。また、正規表現の最後に "i"フラグを使用して大文字小文字を区別しない検索を行っているので、toLowercase()の呼び出しは不要です。

関連する問題