跨域问题

跨域:浏览器有一个规定,在不同的域名下访问,Ajax回调函数会被拒绝执行。
跨域常见的解决方案:
1、服务器端在响应头中设置运行跨域即可。(适合小型企业使用)
2、使用jsonp完成跨域。(不建议使用,因为jsonp只支持get请求)
3、搭建网管系统,使用nigix来进行代理。(适合大型企业使用)
4、在本地服务器中,通过httpclient来发送请求,那么浏览器接收数据就是在同一域名下了。(不建议使用,虽然安全性较高,但是非常占用带宽资源)

演示跨域问题

Ajax之跨域问题

解决办法(使用设置响应头和jsonp来讲解跨域问题)

1、在服务器端设置响应头

/**
 * 服务器B中的跨域类
 * @author 紫炎易霄
 */
@WebServlet("/crossServlet")
public class CrossServlet extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setCharacterEncoding("UTF-8");
		resp.setContentType("text/html;charset=utf-8");
		//接收参数
		String username = req.getParameter("username");
		String password = req.getParameter("password");
		System.out.println(username+"----"+password);
		resp.setHeader("Access-Control-Allow-Origin", "*");
		resp.getWriter().write("回调成功!");
	}
}

运行结果
Ajax之跨域问题
2、使用jsonp解决跨域
一、jsp代码

<script type="text/javascript">
	$(function(){
		$.ajax({
	        type:"get",
	        url:"http://www.bbb.com/serverB/crossServlet",
	        dataType:"jsonp",
			jsonp:"jsonpCallback",
			data:"username=紫炎易霄&password=123456",
	        success:function(data){
				alert(data.result);
	        },
		});
	})
</script>

二、服务器端代码

/**
 * 服务器B中的跨域类
 * @author 紫炎易霄
 */
@WebServlet("/crossServlet")
public class CrossServlet extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setCharacterEncoding("UTF-8");
		resp.setContentType("text/html;charset=utf-8");
		//接收参数
		String username = req.getParameter("username");
		String password = req.getParameter("password");
		System.out.println(username+"----"+password);
		//接收jsonpCallback
		String jsonpCallback = req.getParameter("jsonpCallback");
		System.out.println(jsonpCallback);
		JSONObject jsonObject = new JSONObject();
		jsonObject.put("result", "紫炎易霄回来了!");
		resp.getWriter().write(jsonpCallback+"("+jsonObject.toJSONString()+")");
	}
}

运行结果
Ajax之跨域问题

相关文章:

  • 2021-07-17
  • 2021-05-02
  • 2021-06-30
  • 2021-09-09
  • 2022-01-19
  • 2021-10-23
  • 2021-04-18
  • 2021-11-12
猜你喜欢
  • 2021-12-29
  • 2021-04-20
  • 2021-11-14
  • 2021-04-20
  • 2021-11-01
  • 2022-01-04
相关资源
相似解决方案