同域名 http站点调用https接口 跨域问题

本文记录了一次项目部署中遇到的跨域问题,详细分析了前后端分离部署在不同协议下导致的CORS策略冲突,并给出了将前端调整至与后端相同HTTPS协议的解决方案。

错误

今天有个项目部署时碰到个怪问题,记录一下

业务场景是一个前后分离的项目,由不同的部门开发

在部署时,前端部署在 http://a.com/a 后端部署在 https://a.com/b

预期调用接口时是不会跨域的,但是实际请求时出现了跨域问题

options请求发送并返回200 ok,但后续post请求无法正常提交

询问后端表示已经添加了支持跨域的代码,并且也支持options请求,能确定不是后端接口的问题

原因

没有找到相关文档,如果有文档的大神麻烦留言一下!!!

猜测是因为浏览器的CORS策略禁止了同源站点的http直接调用https接口

解决方案

把前端部署到同站点的 https://a.com/b 下即可正常访问接口

总结

在项目上线阶段要了解清楚后端部署的接口地址是http还是https的,前端也要做对应部署

### 解决PC端前端应用调用后端API时遇到的CORS资源共享问题 当处理PC端前端应用与后端服务之间的通信时,如果两者部署在不域名下,则会触发浏览器的安全机制——源策略。为了使不源之间能够安全地交换资源,可以通过配置服务器返回特定HTTP头部来实现资源共享(CORS)[^2]。 #### 配置服务器以支持CORS 对于大多数Web框架而言,在响应中加入`Access-Control-Allow-Origin`头是最基本也是最常用的方法之一。此头部指定了哪些来源被允许访问资源;设置为通配符`*`表示任何站点都可以发起请求,但在涉及凭证(如Cookies)的情况下不建议这样做,而应该明确指出信任的具体域名[^3]。 ```http Access-Control-Allow-Origin: https://example.com ``` 除了上述必要项外,视需求还可能需额外添加如下几个重要头部: - `Access-Control-Allow-Methods`: 定义可使用的HTTP方法列表。 ```http Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS ``` - `Access-Control-Allow-Headers`: 列举客户端可以在预检请求中携带的自定义头部名称。 ```http Access-Control-Allow-Headers: Content-Type, Authorization ``` - `Access-Control-Max-Age`: 设置预检请求的结果缓存时间长度,单位秒。 ```http Access-Control-Max-Age: 86400 ``` 针对具体技术栈的不,实际操作方式也会有所差异。例如,在基于Python的Django项目里,可通过安装并配置`django-headers`中间件轻松达成目的。 另外值得注意的是,某些情况下即使正确设置了这些头部也可能无法解决问题,这时应当排查是否存在其他因素干扰正常流程,比如代理服务器的存在或是HTTPS证书验证失败等特殊情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值