您的位置:首页 > 其它

探讨跨域请求资源的几种方式

2016-06-21 15:34 323 查看
什么是跨域

JSONP

proxy代理

cors

xdr

  由于浏览器同源策略,凡是发送请求url的协议、域名、端口三者之间任意一与当前页面地址不同即为跨域。具体可以查看下表(来源

  

1 var http = require('http');
2 var url = require('url');
3 var fs = require('fs');
4 var qs = require('querystring');
5 var request = require('request');
6
7 http.createServer(function(req, res){
8     var _url = url.parse(req.url);
9     if (_url.pathname === '/jsonp') {
10         var query = _url.query;
11         console.log(query);
12         var params = qs.parse(query);
13         console.log(params);
14         var f = "";
15
16         f = params.callback;
17
18         res.writeHead(200, {"Content-Type": "text/javascript"});
19         res.write(f + "({name:'hello world'})");
20         res.end();
21     } else if (_url.pathname === '/proxy') {
22       var proxyUrl = "";
23       if (req.url.indexOf('?') > -1) {
24           proxyUrl = req.url.substr(req.url.indexOf('?') + 1);
25           console.log(proxyUrl);
26       }
27       if (req.method === 'GET') {
28           request.get(proxyUrl).pipe(res);
29       } else if (req.method === 'POST') {
30           var post = '';     //定义了一个post变量,用于暂存请求体的信息
31
32         req.on('data', function(chunk){    //通过req的data事件监听函数,每当接受到请求体的数据,就累加到post变量中
33             post += chunk;
34         });
35
36         req.on('end', function(){    //在end事件触发后,通过querystring.parse将post解析为真正的POST请求格式,然后向客户端返回。
37             post = qs.parse(post);
38             request({
39                       method: 'POST',
40                       url: proxyUrl,
41                       form: post
42                   }).pipe(res);
43         });
44       }
45     } else if (_url.pathname === '/index') {
46         fs.readFile('./index.html', function(err, data) {
47           res.writeHead(200, {"Content-Type": "text/html; charset=UTF-8"});
48             res.write(data);
49             res.end();
50         });
51     } else if (_url.pathname === '/cors') {
52         if (req.headers.origin) {
53
54             res.writeHead(200, {
55                 "Content-Type": "text/html; charset=UTF-8",
56                 "Access-Control-Allow-Origin":'http://localhost',
57                 'Access-Control-Allow-Methods': 'GET,POST,OPTIONS',
58                 'Access-Control-Allow-Headers': 'X-Requested-With, Content-Type,aaaa'/**/
59             });
60             res.write('cors');
61             res.end();
62         }
63     }
64
65 }).listen(8888);


参考文献:

javascript跨域资源总结与解决办法

jsonp跨域原理解析

Ajax进行跨域资源方法详解

Ajax POST&跨域 解决方案

HTTP access control

POST请求失败,变成options请求

XDomainRequest - Restrictions, Limitations and Workarounds

XDomainRequest object

来源:探讨跨域请求资源的几种方式

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: