跨域问题

paswar 2020-06-10 11:05:55
目前开发需要调用第三方项目的接口,ajax post 调用时出现了跨域问题,但对方不愿意在服务器端做相应的配置解决,那我要怎样解决呢?
...全文
7527 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
by_封爱 2020-07-15
  • 打赏
  • 举报
回复
对方无解的情况下你有3个解决方案. 第一,前台使用路由,vue什么的 里面会有代理之类的东西.. 比如/api 就访问其他站点 配置一下之后. 看起来就是一个site 你在ajax就不会有问题了. 第二,你ajax你自己的服务端,然后通过服务端的代码 去请求对方的接口,你的服务端作为一个中转(这种比较常见). 第三,后端使用ng,设置一个路径,让ng指向另外的站点, root指向你的站点.. 这样访问 就跟第一个是一样的了.
秋的红果实 2020-07-15
  • 打赏
  • 举报
回复
总之,你这属于服务器跨域
了解下 反向代理,跨域资源共享
秋的红果实 2020-07-15
  • 打赏
  • 举报
回复
最好还是跟第三方商量
zhanglong_longlong 2020-07-14
  • 打赏
  • 举报
回复
nginx可以解决
mirrorspace 2020-07-05
  • 打赏
  • 举报
回复
对方不愿意改服务器,其实对方要解决就是一句话的事情,加个header允许. 死活不愿意的话,可以自己加个代理服务器,客户端请求它,代理在服务端请求对方.不过这还是不必要的麻烦. 最佳方案还是对方改,这个也是有道理的. 如果对方做接口服务的,连这个小问题都没解决,那还怎么提供接口服务,那些大厂的公共API服务,在调用的时候还能有这问题?
  • 打赏
  • 举报
回复
引用 6 楼 paswar 的回复:
[quote=引用 3 楼 以专业开发人员为伍 的回复:]
是的,跨域只是现代 html5 浏览器的标准。你的前端访问你自己的服务器,然后你的服务器中转一下“问、答”环节,就不存在跨域了。


我后端语言是用C#,请问可以写个C#例子给我参考一下吗?[/quote]

例如你的服务器端写一个通用调用,例如
var web = new WebClient();

var result = web.UploadData(url, Encoding.UTF8.GetBytes(body));
var resultStr = Encoding.UTF8.GetString(result);
其中 url 是目标服务地址,body 是你要 post 提交的数据,这样就能获得返回结果 string。而你自己的 web 服务网站让自己的前端页面访问,网站从请求内容中封装出 url 和 data,再把 resultStr 封装(或则解析、封装)之后返回给自己的前端。

如果对方服务器有什么特别的“癖好”,你可以加上一些消息控制信息。例如
var web = new WebClient();
web.Headers.Set(HttpRequestHeader.Cookie, cookie);
if (referer == null)
referer = "http://10.134.111.111:8000/business/Edit.do?bizType=NEW";
web.Headers.Set(HttpRequestHeader.Referer, referer);
web.Headers.Set(HttpRequestHeader.Host, "10.134.111.111:8000");
web.Headers.Set(HttpRequestHeader.Accept, "*/*");
web.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-CN");
web.Headers.Set("x-requested-with", "XMLHttpRequest");
web.Headers.Set(HttpRequestHeader.ContentType, "application/x-www-form-urlencoded; charset=UTF-8");
web.Headers.Set(HttpRequestHeader.Host, "10.134.111.111:8000");
web.Headers.Set(HttpRequestHeader.UserAgent, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)");
var result = web.UploadData(url, Encoding.UTF8.GetBytes(body));
var resultStr = Encoding.UTF8.GetString(result);
这样将你的服务器作为一个中台系统。
paswar 2020-06-10
  • 打赏
  • 举报
回复
引用 3 楼 以专业开发人员为伍 的回复:
是的,跨域只是现代 html5 浏览器的标准。你的前端访问你自己的服务器,然后你的服务器中转一下“问、答”环节,就不存在跨域了。
我后端语言是用C#,请问可以写个C#例子给我参考一下吗?
paswar 2020-06-10
  • 打赏
  • 举报
回复
引用 2 楼 闭包客 的回复:
你可以在服务器端调用他们的接口。
我后端语言是用C#,请问可以写个C#例子给我参考一下吗?
  • 打赏
  • 举报
回复
再说明白一点儿,要知道“跨域”是你自己的应用系统,跑在你的客户浏览器上,这个时候出现的提示。也就是说其实用户终端才是限制跨域的根本机制,对方服务器端只是没有配合来输出一个标志(配置一下“随便的一个字符串”)。也就是说对方服务器端人员可以认为是他们懒得支持,这是可以想象得到的。说白了就是对方服务器人员接入的太少,经验太少。但是不影响他们狭隘认为跨域,这并没有任何技术。
  • 打赏
  • 举报
回复
是的,跨域只是现代 html5 浏览器的标准。你的前端访问你自己的服务器,然后你的服务器中转一下“问、答”环节,就不存在跨域了。
闭包客 2020-06-10
  • 打赏
  • 举报
回复
你可以在服务器端调用他们的接口。
快乐起航2020 2020-06-10
  • 打赏
  • 举报
回复
好像只能对方配置了,架设可以随便跨域提交数据,网站入侵岂不是很容易

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧