ホームページ  >  記事  >  ウェブフロントエンド  >  Nginx リバースプロキシを使用して Ajax クロスドメインリクエストを回避する方法

Nginx リバースプロキシを使用して Ajax クロスドメインリクエストを回避する方法

亚连
亚连オリジナル
2018-05-23 17:14:022213ブラウズ

この記事は主に、Ajax クロスドメインリクエストを回避するために Nginx リバースプロキシを使用する方法に関する関連情報を紹介します。これは非常に優れており、必要な友人は参照できます。

nginx がリッスンするサーバー上の nginx + tomcat。ポート 80 に接続すると、Tomcat はポート 8080 をリッスンします。

私はフロントエンドに詳しくないので、ajaxを使えばコールバックが不要になるのではないかと思っていましたが、フロントエンドのクラスメートがクロスドメインでなければコールバックは必要ないと言い、頼まれました。返された json に追加します。しかし、私は spring-mvc の最も基本的な使用法を学んだばかりで、コールバックを追加する方法がわかりません。次のような実行可能なコードをオンラインで見つけました。 URL マッピングが多すぎて、変更のコストが高すぎるためです。

それで私は賢明に nginx を考えたのですが、これはリバース プロキシに使用されているだけではないでしょうか。あなたは本当に私と同じくらい賢いですね

このアイデアを使えば、簡単に実行できます。ポート 80 でリッスンしているサーバーに場所を直接追加します:

@RequestMapping(method=RequestMethod.GET,value="getProjectStatusList",produces="text/html;charset=UTF-8")
@ResponseBody
public String getProjectStatusList(HttpServletRequest request, 
HttpServletResponse response){
Map<String,Object> map = new HashMap<String,Object>();
try{
String callback = request.getParameter("callback");
//System.out.println("token:"+request.getHeader("token"));
List<String> list = ss.getProjectStatusList();
map.put("status", "success");
map.put("data", list);
ObjectMapper mapper = new ObjectMapper();
//这个拼接是重点。。。
String result = callback+"("+mapper.writeValueAsString(map)+")";
//String result = mapper.writeValueAsString(map);
return result;
}catch(Exception e){
JSONObject jo = new JSONObject();
jo.put("status", "fail");
jo.put("data", e.getMessage());
return jo.toString();
}
}

nginx をリロードします:

location /myApp {
proxy_pass http://localhost:8080/myApp;
}

次に、前のクロスドメイン リクエストを http://site:8080/myApp から http://site/ Non- myApp へのクロスオリジン リクエスト。 上記は私があなたのためにまとめたものです。

関連記事:

AJAXクロスドメインリクエストの問題のNginx実装の詳細な分析

Ajaxをクリックしてデータリストを継続的にロードする(グラフィックチュートリアル)

Ajax+Struts2で検証コード検証を実装する関数 (グラフィックチュートリアル)

以上がNginx リバースプロキシを使用して Ajax クロスドメインリクエストを回避する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。