• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

api服务器与前端服务器之间如何解决跨域问题?

php 搞代码 4年前 (2022-01-23) 18次浏览 已收录 0个评论
文章目录[隐藏]

浏览器请求前端服务器的静态资源,HTML、CS)本文来(源gaodai#ma#com搞@@代~&码*网2

搞代gaodaima码

S之类的,
然后浏览器再进行ajax请求api服务器,产生了跨域问题。

我目前想的方案,
一是把前后端资源都置于同一域名下,但是感觉不是太合理。
二是使用反向代理,但是没弄过不清楚是不是合适。

请问如何通过后端解决此问题呢?

回复内容:

浏览器请求前端服务器的静态资源,HTML、CSS之类的,
然后浏览器再进行ajax请求api服务器,产生了跨域问题。

我目前想的方案,
一是把前后端资源都置于同一域名下,但是感觉不是太合理。
二是使用反向代理,但是没弄过不清楚是不是合适。

请问如何通过后端解决此问题呢?

跨域基本上有以下几种解决方案

  1. JSONP

  2. CORS

  3. window.name

  4. document.domain

  5. 5.location.hash

  6. 6.window.postMessage()

具体可参考以下文章https://github.com/rccoder/bl…

api服务器设置跨域头即可,如果你是spring写的,可以用类似如下的代码

<code>@Componentpublic class CorsFilter implements Filter {    @Override    public void destroy() {    }    @Override    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)        throws IOException, ServletException {        HttpServletResponse response = (HttpServletResponse) res;        HttpServletRequest request = (HttpServletRequest) req;        response.setHeader("Access-Control-Allow-Origin", "你的前端服务器地址");        response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE, HEAD, PATCH");        response.setHeader("Access-Control-Max-Age", "3600");        response.setHeader("Access-Control-Allow-Headers", "X-Requested-With, X-Auth-Token, Content-Type");        response.setHeader("Access-Control-Expose-Headers", "X-Requested-With, X-Auth-Token, Content-Type, X-TOTAL-COUNT");        response.setHeader("Access-Control-Allow-Credentials", "true");        if (!"OPTIONS".equalsIgnoreCase(request.getMethod())) {            chain.doFilter(req, res);        }    }    @Override    public void init(FilterConfig config) throws ServletException {    }}</code>

举例,有两个项目:P 以及 API

那么调用方式类似:P前端 -》P后端 -》API

题主后端Nodejs的,可以采用一下代码实现跨域,如果是express,建议包装成middleware

<code>res.setHeader('Access-Control-Allow-Origin', req.headers.origin);res.setHeader('Access-Control-Allow-Credentials', true);res.setHeader('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS');res.setHeader('Access-Control-Allow-Headers','x-requested-with,content-type');</code>

最佳答案已经有了,别忘了请求的时候 withCredentials: true 以带上 cookie

jsonp 可以参考下

Access-Control-Allow-Origin:前端域名

个人觉得还是利用反向代理最靠谱

可能使用nginx进行反向代理比较方便,设置跨域响应头并不能全部兼容IE

反向代理比较简单

node 写的后台代码采用express/koa的话直接在后端代码里引入cors()中间件即可

用nginx做反向代理比较方便呢

随便在API服务器上放个js文件,前端引用一下,之后是不是就没有跨域问题了,就像调用外部统计那种逻辑。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:api服务器与前端服务器之间如何解决跨域问题?

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址