用nginx测试AJAX接口

自从有了evernote后,好久没有更新这里了。打算日后把evernote记录的知识点陆续的搬上来。开始正题。

最近在做一个关于新闻推荐的内部项目,和之前的一些项目一样,也是富前端的应用,基本上都是后台提供数据接口,由前端这边完成页面的渲染。这次后台的接口多为json格式的。对比jsonp格式的数据,json格式只能用XHR的方式请求获取数据,在开发的时候就造成了跨域的问题。比如在开发时,页面的测试地址是htttp://localhost/page.html,而后台提供的接口地址是http://iread.ws.netease.com/article/reply,localhost和iread.ws.netease.com是两个不同的域,虽然高级的浏览器提供了XHR 2去解决跨域问题,但是老版本的IE不支持这个API,如果用XHR 2去实现的话,IE在开发时是没有办法测试到的,而且项目上线前还要将XHR 2改为XHR,这样就造成了不必要的工作量。最理想的解决办法就是在localhost做后台代理,将http://localhost/article/reply代理到http://iread.ws.netease.com/article/reply,这样我在请求数据接口的时候,只需要写相对路径就好了。比如在这个例子中,我直接请求/article/reply,在测试环境中就是请求http://localhost/article/reply,正式环境中变成请求http://iread.ws.netease.com/article/reply

做后台代理,最方便的就是用nginx了,只需要几行代码就能满足需求,配置的代码如下:

server {
	listen	*:80;

	location / {
		ssi	on;
		autoindex on;
		root  "/Users/Michael/制作/个性化新闻推荐/source";
		index  index.html index.htm;
	}

	location /article/reply {
		proxy_pass "http://iread.ws.netease.com/article/reply";
	}

}

这样我们请求http://localhost/article/reply的时候通过nginx的帮助就能从后台取到正确的数据了。但是问题又来了,http://iread.ws.netease.com/article/reply是一个需要cookie的接口,这就意味着nginx代理的时候需要将浏览器的cookie一同发送过去。浏览器向服务器发送cookie的时候,其实就是发送一个名为Cookie的request header。我的做法是打开浏览器,切换到firebug的“网络”选项卡,然后打开http://iread.ws.netease.com/article/reply,在“请求头信息”中将Cookie的值复制下来,然后加到nginx的配置节中,如下:

location /article/reply {
	proxy_pass "http://iread.ws.netease.com/article/reply";
	proxy_set_header Cookie 你刚才复制的内容;
}

用nginx测试AJAX接口》上有1条评论

发表评论