首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从服务器获取CORS响应,但仅针对两个api调用中的一个

从服务器获取CORS响应,但仅针对两个api调用中的一个
EN

Stack Overflow用户
提问于 2019-01-05 11:36:36
回答 1查看 1.2K关注 0票数 1

问题的总结:

我陷入了一个奇怪的问题,我对同一个API进行了两次调用,一次成功,另一次返回504

CORS策略阻止从源'https://ocr.mywebsite.ai/tesseract/basic/‘访问https://ocr.mywebsite.ai/tesseract/basic/ 'http://localhost:8080’:请求的资源上不存在“访问控制-允许-原产地”标题。

详细问题

我有一个api,它接受图像为blob,并使用解析的json进行响应。我有两个映像,所以我使用Promise.all()调用了api两次,如下所示:

代码语言:javascript
复制
let ocrPromises = id_card_images.map((image, index) => {
                let header: IHeadersData = {};
                header = index === 0 ? {card_side: "front"} : {card_side: "back"};
                return this.parseImageUsingOCR(image, header)//makes http call and return promise
            });
let ocrData = await Promise.all(ocrPromises);

其中一个请求立即返回200响应,而另一个请求在代码504超过5秒后失败。有人能提出这种行为的可能原因吗?

在铬网络面板后面。第一个是失败请求,第二个是传递请求。

parseImageUsingOCR方法,它进行实际的服务器调用(这是一些角7代码)

代码语言:javascript
复制
parseImageUsingOCR(image, header: IHeadersData): Promise<{ parsed_data: any, s3_url: string }> {


        let blob = UtilityService.dataURItoBlob(image);
        let transliterationUrl = ConstantService.getTransliterationUrl();
        let formData: FormData = new FormData();
        formData.append('image', blob);
        let userData = StoreService.getUserData();
        let transliterationHeader: IHeadersData = UtilityService.getHeaderForOCRParseByCountryAndIdType(
            userData.country,
            userData.id_card_type
        );
        transliterationHeader = {
            ...transliterationHeader,
            img_type: 'id_card',
            ...header,
            // "content-type": "application/json"
        };

        return new Promise((resolve, reject) => {
            // alert(JSON.stringify(transliterationHeader));
            this.serverService.makePostRequest({url: transliterationUrl, body: formData, header: transliterationHeader})
                .subscribe((val: { parsed_data: IUser, raw_data: string, s3_url: string }) => {
                    if (val.parsed_data) {
                        resolve({
                            parsed_data: this.removeAllUndefinedFieldsFromObject(val.parsed_data),
                            s3_url: val.s3_url
                        })
                    } else {
                        resolve({parsed_data: {}, s3_url: val.s3_url});
                    }
                })
        })
    }
EN

回答 1

Stack Overflow用户

发布于 2019-01-05 12:03:46

这其实不是CORS的问题。

获得200 OK响应的请求显示了CORS头。失败的请求不会从服务器应该回答的任何请求中得到响应,因此在该服务器和您之间的网关将返回网关超时(HTTP 504)。

无论如何,这都是一个问题,而且网关服务器没有发送CORS头这一事实也不会有太大的区别。我怀疑OCR服务器花了很长时间才做出响应,网关取消了请求,取而代之的是超时响应。

要么增加网关超时设置,要么尝试使用较小的图像,希望OCR不会花费太长时间来处理。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54051597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档