这次从 angular 15 升级到 angular 17 后遇到的问题,HttpClient 请求的代码如下
downloadImage(imageSrc: string, muteAlert = false): Promise<string | false> {
return firstValueFrom(
this.http
.jsonp<string>(
`${uploadApi()}/ImageUploader/DownloadImage?imgSrc=${encodeURIComponent(
htmlDecode(imageSrc)
)}&app=blog`,
'callback'
)
.pipe(this.falseOnError(muteAlert))
);
}
angular 应用所用的域名是 i.cnblog.com,HttpClient 请求的域名是 upload.cnblogs.com, 升级之前正常,升级后 HttpClient 请求时没有带 .cnblogs.com 的 cookie
需要在 app.config.js 中,给 provideHttpClient 加上 withJsonpSupport
provideHttpClient(withJsonpSupport(), withFetch())
添加了出现了新的错误
JSONP requests do not support headers
angular 中对应的源码 jsonp.ts#L125
对于 jsonp 的问题没有找到解决方法,后来通过修改服务端 api 返回 json 解决了
F12调试模式下看下有没有相关的警告,看下接口是否返回了cookie上面是否有叹号警告,然后再具体分析,有次我遇到是http接口自动跳转https会导致浏览器cookie的处理的问题