一次前端接口报错net::ERR_HTTP2_PROTOCOL_ERROR的问题记录

问题描述

4月1日系统部署上线,发现上传图片功能跟报错,报错的是获取阿里云OSS签名接口,接口中并没有文件的上传操作,报错信息如图:
image.png
检查参数传值正常.于是使用Postman尝试请求生产环境,发现接口返回正常.检查日志并没有发现错误日志.查找了一些关于此错误信息的资料.发现有提到反向代理的问题,然而在尝试之后并没有解决问题.最后还是在接口入口处,发现比其他借口多了一行代码

header(“Access-Control-Allow-Origin : *”)

将此行代码注释后,接口果然正常了.

为什么添加了这行代码会导致Ajax请求报错?而Postman却可以正常访问?
Access-Control-Allow-Origin 是用来设置接口跨域访问的.设置为*表示接受任何域的请求.
根据W3C标准,如果支持用户凭证,设置Access-Control-Allow-Origin为当前域,并且设置Access-Control-Allow-Credentials为true;
否则当设置Access-Control-Allow-Origin为*时,是不允许设置Access-Control-Allow-Credentials为true的.
参考链接:https://www.w3.org/TR/cors/#resource-requests
在这里插入图片描述
Access-Control-Allow-Credentials 是用来设置浏览器是否需要将服务器返回值暴露给用户.浏览器遵循W3C准则,当请求Response头的Access-Control-Allow-Origin不是当前域,就不会将返回数据给js . 所以接口设置Access-Control-Allow-Originv为*时,前端无法获取到接口返回的数据.
而Postman工具并没有遵循W3C准则,会忽略http header的设置,所以在postman中接口是正常的.

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值