ajax跨域问题的解决方法:1、响应头添加Header允许访问;2、jsonp只支持get请求不支持post请求;3、httpClient内部转发;4、使用nginx搭建企业级接口网关方式。
相关免费学习推荐:ajax(视频)
ajax跨域问题的解决方法:
解决方式1:响应头添加Header允许访问
跨域资源共享(CORS)Cross-Origin Resource Sharing
这个跨域访问的解决方案的安全基础是基于"JavaScript无法控制该HTTP头"
它需要通过目标域返回的HTTP头来授权是否允许跨域访问。
response.addHeader(‘Access-Control-Allow-Origin:*’);//允许所有来源访问 response.addHeader(‘Access-Control-Allow-Method:POST,GET’);//允许访问的方式
解决方式2:jsonp 只支持get请求不支持post请求
用法:①dataType改为jsonp ②jsonp : "jsonpCallback"————发送到后端实际为http://a.a.com/a/FromServlet?userName=644064&jsonpCallback=jQueryxxx ③后端获取get请求中的jsonpCallback ④构造回调结构
$.ajax({ type : "GET", async : false, url : "http://a.a.com/a/FromServlet?userName=644064", dataType : "jsonp",//数据类型为jsonp jsonp : "jsonpCallback",//服务端用于接收callback调用的function名的参数 success : function(data) { alert(data["userName"]); }, error : function() { alert('fail'); } }); //后端 String jsonpCallback = request.getParameter("jsonpCallback"); //构造回调函数格式jsonpCallback(数据) resp.getWriter().println(jsonpCallback+"("+jsonObject.toJSONString()+")");
JSONP实现原理
在同源策略下,在某个服务器下的页面是无法获取到该服务器以外的数据的,即一般的ajax是不能进行跨域请求的。但 img、iframe 、script等标签是个例外,这些标签可以通过src属性请求到其他服务器上的数据。利用