问题
1 . 在跨域请求(经常是在用到别人的接口时)会遇到一些限制,对方会检查http请求携带的来源,比如检查host,referer等.
代理
1 .
我们可以在本地起一个node服务,比如vue开发中的dev-server,使用其发http请求,通过修该请求信息,能够被对方接口通过返回数据,又因为同源策略是浏览器安全的范畴,所以在node上不用考虑跨域问题.
2 .
项目中只需发一个ajax请求(因为向本地node服务发,故同源,不用考虑跨域).vue中使用axios作为ajax工具,其既可以在浏览器中使用,也可以在node中使用.
import axios from 'axios',
let url = '/api/getData',
let data = {....},
axios.get(url, {
params: data
}).then((res) => {
...........................
})
3 .
在本地node服务中对请求’/api/getData’做代理,发请求到实际的接口
var axios = require('axios')
var app = express()
var apiRoutes = express.Router()
apiRoutes.get('/getData', function (req, res) {
//实际接口
var url = 'https://c.y.qq.com/splcloud/fcgi-bin/fcg_get_diss_by_tag.fcg'
//修改请求头信息
axios.get(url, {
headers: {
referer: 'https://c.y.qq.com/',
host: 'c.y.qq.com'
},
params: req.query
}).then((response) => {
res.json(response.data)
}).catch((e) => {
console.log(e)
})
})
app.use('/api', apiRoutes)