现有一API接口,使用jsonp调用该接口,返回格式依然为json格式不是函数类型,所有无法获取数据,请问各位大佬还有没有其他的解决办法,网上搜有人用getjson可以解决,但是测试依然报错,求助,API地址为:http://cdn.apc.360.cn/index.php?c=WallPaper&a=getAllCategoriesV2&from=360chrome,请各位大佬指正
<p>服务端解决方案,就是在响应头中写入如下几个参数:</p>
Access-Control-Allow-Origin 值为 "*"或者其它域名
Access-Control-Allow-Methods 值为"GET,POST,OPTIONS,DELETE,PUT,HEAD"
Access-Control-Allow-Credentials 值为"true"
就是不想用服务端处理,想在客户端处理
<p>当前的解决方案,跨域请求都需要服务端配合的,jsonp方式,是需要服务器支持的,你这个接口,服务器有特别的参数或者请求头指定返回类型吗,或许有指定jsonp返回类型的方法,如果可以修改服务器的话,楼上的方法就可以加CORS跨域,不需要对接口数据进行更改,如果服务器不支持,只能加中转服务器了</p>
<p>如果是你调用他们的接口,让他们改成jsonp挺难的,你可以从JAVA代码中请求接口,然后再把数据返回给前端就行了</p>
<p>自己在服务端封一层,绕过跨域;其他方式都不太好使,页面是人家的,也不能通过变更页面参数和内容来绕过跨域</p>
<p>反向代理走起</p>
upstream apachephp {
server cdn.apc.360.cn:80;
}
server {
listen 80;
server_name apc.360.1008.com;
access_log /var/log/nginx/apc.360.access.log;
error_log /var/log/nginx/apc.360.error.log;
root html;
index index.html index.htm index.php;
location / {
proxy_pass http://apachephp;
proxy_redirect off;
proxy_set_header Host cdn.apc.360.cn;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS,DELETE,PUT,HEAD;
add_header Access-Control-Allow-Credentials true;
}
}
# 这个接口 360 有检查其他的头信息 curl 不过的,用浏览器玩儿
<p>如果api服务器不在你那儿,可以尝试楼上的反向代理方案,如果api服务器是你自己的,可以修改服务端,修改的方式参照顶楼是没问题的,但是唯一要注意的是,服务端在吐数据的时候,一定要带上callback,因为jsonp的格式是由一个【回调函数调用一串json】组成,如:callback( {json} ) </p>
<div class='ref'><h4>引用来自“溪涧顽石”的评论</h4><p>反向代理走起</p>
upstream apachephp {
server cdn.apc.360.cn:80;
}
server {
listen 80;
server_name apc.360.1008.com;
access_log /var/log/nginx/apc.360.access.log;
error_log /var/log/nginx/apc.360.error.log;
root html;
index index.html index.htm index.php;
location / {
proxy_pass http://apachephp;
proxy_redirect off;
proxy_set_header Host cdn.apc.360.cn;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS,DELETE,PUT,HEAD;
add_header Access-Control-Allow-Credentials true;
}
}
# 这个接口 360 有检查其他的头信息 curl 不过的,用浏览器玩儿
回复<a class="referer" target="_blank">@sunkejava</a> : 服务中转也是把请求往后放,本质上个反向代理一样~ 一个是配置,一个是自己写~ 还不如撸个反向代理安生.
很多服务都需要负载均衡,加个代理你还可以顺便把负载均衡做了,哈哈。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。