jsonp跨域的理解

1: 跨域的理解
说起跨域就必须要提同源策略,浏览器问了安全,制定了同源策略,即同协议、同域名、同端口号,若其中有一点存在不同就会违背同源策略,导致无法获得数据。(若是非同源的,其实浏览器会向服务器发起请求,但是会拒绝接收服务器返回的数据)
举例:在本地存在2个项目,web1和web2,同时运行在两个端口3000和3001,当web1向web2发起请求http://localhost:3001/ajax/deal时,就会造成跨域问题。

2:jsonp
既然这么容易跨域,那就得想解决方法。我们发现,当在web1中,使用


发现script标签并没有同源的限制,我们可以正常获得test.js。jsonp就是利用script标签的这个特点,在本地创建一个回调函数,然后在远程服务上调用这个函数,并且将需要的数据拼接成json数据的形式作为参数传递,完成回调。
其实jsonp的实质就是将json数据填充进回调函数,jsonp = json+padding。
举例:web2中服务端的一段代码

public class MyService : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            //获取回调函数名
            string callback = context.Request.QueryString["callback"];
            //json数据
            string json = "{\"name\":\"chopper\",\"sex\":\"man\"}";

            context.Response.ContentType = "application/json";
            //输出:回调函数名(json数据)
            context.Response.Write(callback + "(" + json + ")");
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }

web1中页面中代码

 

3: 由于script的原理 所以jsonp只适用于get方法请求。
4:强烈推荐深入浅出jsonp, 很赞

你可能感兴趣的:(jsonp跨域的理解)