美文网首页我爱编程
Http访问跨域解决

Http访问跨域解决

作者: ui设计好分享 | 来源:发表于2018-03-27 10:28 被阅读0次

一、跨域科普

跨域,即跨站HTTP请求(Cross-site HTTP request),指发起请求的资源所在域不同于请求指向资源所在域的HTTP请求。

二、如何产生跨域

当使用前后端分离,后端主导的开发方式进行前后端协作开发时,常常有如下情景:

a、后端开发完毕在服务器上进行部署并给前端API文档。

b、前端在本地进行开发并向远程服务器上部署的后端发送请求。

c、在这种开发过程中,如果前端想要一边开发一边测试接口,就需要使用跨域的方式。

三、解决方案

1、JQuery+ajax+jsonp 跨域访问

Jsonp(JSON with Padding)是资料格式 json 的一种“使用模式”,可以让网页从别的网域获取资料。

下面给出例子:

html 前端代码:

[html]view plaincopy

    

Insert title here    

    

    

$(function(){       

 /*    

 //简写形式,效果相同    

$.getJSON("http://app.example.com/base/json.do?sid=1494&busiId=101&jsonpCallback=?",    

         function(data){    

             $("#showcontent").text("Result:"+data.result)    

 });    

 */    

 $.ajax({    

     type : "get",    

     async:false,    

url : "http://app.example.com/base/json.do?sid=1494&busiId=101",    

     dataType : "jsonp",//数据类型为jsonp    

     jsonp: "jsonpCallback",//服务端用于接收callback调用的function名的参数    

     success : function(data){    

         $("#showcontent").text("Result:"+data.result)    

     },    

     error:function(){    

         alert('fail');    

     }    

 });     

});    

Result:    

服务器端:

[java]view plaincopy

import java.io.IOException;    

import java.io.PrintWriter;    

import java.util.HashMap;    

import java.util.Map;    

import javax.servlet.http.HttpServletRequest;    

import javax.servlet.http.HttpServletResponse;    

import net.sf.json.JSONObject;    

import org.springframework.stereotype.Controller;    

import org.springframework.web.bind.annotation.RequestMapping;    

@Controller    

public class ExchangeJsonController {    

@RequestMapping("/base/json.do")    

public void exchangeJson(HttpServletRequest request,HttpServletResponse response) {    

try {    

response.setContentType("text/plain");    

response.setHeader("Pragma", "No-cache");    

response.setHeader("Cache-Control", "no-cache");    

response.setDateHeader("Expires", 0);    

Map map =new HashMap();     

map.put("result", "content");    

     PrintWriter out = response.getWriter();         

JSONObject resultJSON = JSONObject.fromObject(map);//根据需要拼装json    

String jsonpCallback = request.getParameter("jsonpCallback");//客户端请求参数    

out.println(jsonpCallback+"("+resultJSON.toString(1,1)+")");//返回jsonp格式数据    

     out.flush();    

     out.close();    

}catch (IOException e) {    

    e.printStackTrace();    

   }    

 }    

}    

2、通过注解的方式允许跨域

在Controller类或其方法上加@CrossOrigin注解,来使之支持跨域。

举例:

[java]view plaincopy

@CrossOrigin(origins = "*", maxAge = 3600)  

@RestController  

@RequestMapping("/User")  

public class UserController {  

}  

其中origins为CrossOrigin的默认参数,即跨域来源,*即任何来源,也可以是其他域名。即可以以以下形式:

[java]view plaincopy

@CrossOrigin("http://test.com")  

@CrossOrigin(origins="http://test.com",maxAge=3600)  

该注解用于方法上,写法相同,处理时,SpringMVC会对类上标签和方法上标签进行合并。

3、通过配置文件的方式允许跨域

在web.xml中添加如下配置:

[html]view plaincopy

   

CorsFilter   

/*   

使用这个Filter即可让整个服务器全局允许跨域。

阅读全文

相关文章

  • 跨域

    参考资料 HTTP访问控制(CORS)跨域解决方案跨域详解

  • Http访问跨域解决

    一、跨域科普 跨域,即跨站HTTP请求(Cross-site HTTP request),指发起请求的资源所在域不...

  • C# Web直接上传视频或者文件到OSS

    代码 解决本地调试跨域问题 设置跨域规则:找到OSS存储——Bucket列表——基础设置——跨域访问——设置 暴露...

  • 同源策略及跨域访问方案

    同源与跨域 浏览器同源策略 允许跨源访问使用CORS: 是HTTP的一部分 如何解决跨域读取Cookie二级域名不...

  • 跨域解决方向

    跨域解决方向 1、被调用方解决 基于支持跨域的解决思路 基于http协议支持跨域方面的一些规定 在响应头中添加支持...

  • koa设置跨域访问以及跨域验证cookie

    环境 后端框架: koa2 前端请求框架: axios 解决跨域访问 koa加上如下代码: 解决跨域验证cooki...

  • H5跨域访问

    跨域访问是源于浏览器的同源策略而引申出来的概念 1、先了解什么是同源策略和跨域访问 同源策略、跨域解决方案 - R...

  • ajax

    ajax 跨域 跨域:http 协议 域名 端口 三者只要有一个不同,就是跨域 服务端解决跨域: res.setH...

  • 本地调试 -- Mac Chrome 解决跨域-CORS-问题

    一般本地调试的时候,某些资源需要开启跨域访问mac chrome浏览器解决跨域(CORS)问题, 跨域直接使用插件...

  • jq跨域问题解决(兼容ie8+)

    在http://a.com 访问 http://b.com接口就属于跨域的情况。

网友评论

    本文标题:Http访问跨域解决

    本文链接:https://www.haomeiwen.com/subject/jnejcftx.html