【问题标题】:How to add response header in DIO package如何在 DIO 包中添加响应头
【发布时间】:2022-02-04 15:05:09
【问题描述】:

我一直遇到 CORS XMLHttpRequest 错误

CORS 政策已阻止从源“http://localhost:49234”访问“https://maps.googleapis.com/maps/api/place/autocomplete/json?params”处的 XMLHttpRequest:响应预检请求未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。

这是我的代码

///get information of a place after getting its place ID from places autocomplete


Future<Place?> getPlaceDetails(String placeID, String sessionToken,
      [Locale? locale]) async {
    try {
      var dio = Dio();
      dio.options.headers = AppValues.headers;
      dio.options.responseType = ResponseType.plain;
      var response = await dio.get(detailsUrl(placeID, sessionToken, locale));
      var json = convert.jsonDecode(response.data.toString());
      var jsonResult = json[_f.result] as Map<String, dynamic>;
      return Place.fromMap(jsonResult);
    } catch (e) {
      return null;
    }

}

我读到了这个问题的答案,说必须在响应标头中添加“Access-Control-Allow-Origin”,而不是在请求标头中,这就是我相信我正在做的事情。我已经有这个错误好几天了,需要一个永久的解决方案。我已经阅读了有关临时解决方案的答案,例如安装插件或禁用网络安全。但是需要一个在我部署时可以工作的解决方案。无论是添加响应标头(以及如何添加),还是任何其他标头。请提供帮助,并衷心感谢您抽出宝贵时间提供任何帮助。

这是控制台中的错误日志

errors.dart:202 Uncaught (in promise) Error: DioError [DioErrorType.response]: XMLHttpRequest error.
Source stack:
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/core_patch.dart 926:28                get current
packages/dio/src/dio_mixin.dart 473:35                                                                                         fetch
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54                runBody
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 123:5                _async
packages/dio/src/dio_mixin.dart 472:31                                                                                         fetch
packages/dio/src/dio_mixin.dart 468:12                                                                                         request
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54                runBody
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 123:5                _async
packages/dio/src/dio_mixin.dart 438:33                                                                                         request
packages/dio/src/dio_mixin.dart 55:12                                                                                          get
packages/app/services/places_service.dart 35:29                                                                                getAutoComplete
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54                runBody
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 123:5                _async
packages/app/services/places_service.dart 27:45                                                                                getAutoComplete
packages/app/blocs/map_bloc.dart 39:57                                                                                         searchPlaces
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54                runBody
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 123:5                _async
packages/app/blocs/map_bloc.dart 38:31                                                                                         searchPlaces
packages/app/custom/search_map.dart 132:36                                                                                     onChanged
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54                runBody
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 123:5                _async
packages/app/custom/search_map.dart 130:14                                                                                     onChanged
packages/flutter/src/material/text_form_field.dart 198:25                                                                      onChangedHandler
packages/flutter/src/widgets/editable_text.dart 2552:27                                                                        [_formatAndSetValue]
packages/flutter/src/widgets/editable_text.dart 1917:7                                                                         updateEditingValue
packages/flutter/src/services/text_input.dart 1596:9                                                                           _handleTextInputInvocation
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54                runBody
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 123:5                _async
packages/flutter/src/services/text_input.dart 1538:45                                                                          [_handleTextInputInvocation]
packages/flutter/src/services/platform_channel.dart 414:55                                                                     _handleAsMethodCall
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54                runBody
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 123:5                _async
packages/flutter/src/services/platform_channel.dart 411:40                                                                     [_handleAsMethodCall]
packages/flutter/src/services/platform_channel.dart 407:34                                                                     <fn>
packages/flutter/src/services/binding.dart 377:35                                                                              <fn>
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 84:54                runBody
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 123:5                _async
packages/flutter/src/services/binding.dart 374:98                                                                              <fn>
C:/b/s/w/ir/cache/builder/src/out/host_debug/flutter_web_sdk/lib/_engine/engine/platform_dispatcher.dart 1042:13               invoke2
C:/b/s/w/ir/cache/builder/src/out/host_debug/flutter_web_sdk/lib/ui/channel_buffers.dart 25:12                                 invoke
C:/b/s/w/ir/cache/builder/src/out/host_debug/flutter_web_sdk/lib/ui/channel_buffers.dart 65:7                                  push
C:/b/s/w/ir/cache/builder/src/out/host_debug/flutter_web_sdk/lib/ui/channel_buffers.dart 130:16                                push
C:/b/s/w/ir/cache/builder/src/out/host_debug/flutter_web_sdk/lib/_engine/engine/platform_dispatcher.dart 304:25                invokeOnPlatformMessage
C:/b/s/w/ir/cache/builder/src/out/host_debug/flutter_web_sdk/lib/_engine/engine/text_editing/text_editing.dart 1711:39         updateEditingState
C:/b/s/w/ir/cache/builder/src/out/host_debug/flutter_web_sdk/lib/_engine/engine/text_editing/text_editing.dart 1817:17         <fn>
C:/b/s/w/ir/cache/builder/src/out/host_debug/flutter_web_sdk/lib/_engine/engine/text_editing/text_editing.dart 1017:7          handleChange
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 334:14  _checkAndCall
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 339:39  dcall
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/html/dart2js/html_dart2js.dart 37277:58                              <fn>

    at Object.throw_ [as throw] (errors.dart:251)
    at dio_mixin.dart:628
    at _RootZone.runBinary (zone.dart:1690)
    at _FutureListener.catchError.handleError (future_impl.dart:174)
    at handleError (future_impl.dart:778)
    at Function._propagateToListeners (future_impl.dart:799)
    at _Future.new.[_completeError] (future_impl.dart:609)
    at _SyncCompleter.new.[_completeError] (future_impl.dart:60)
    at _SyncCompleter.new.completeError (future_impl.dart:32)
    at onError (future.dart:544)
    at _RootZone.runBinary (zone.dart:1690)
    at _FutureListener.then.handleError (future_impl.dart:174)
    at handleError (future_impl.dart:778)
    at Function._propagateToListeners (future_impl.dart:799)
    at _Future.new.[_completeError] (future_impl.dart:609)
    at async._AsyncCallbackEntry.new.callback (future_impl.dart:665)
    at Object._microtaskLoop (schedule_microtask.dart:40)
    at _startMicrotaskLoop (schedule_microtask.dart:49)
    at async_patch.dart:166

【问题讨论】:

    标签: flutter dart cors flutter-web dio


    【解决方案1】:

    CORS XMLHttpRequest error 是服务器端错误。它与您的应用程序无关。在使用移动应用程序时,您不会遇到这样的问题,但在 Flutter Web 中这很常见。您可以做什么?- 只需让您的服务器端人员或 api 开发人员启用他/她的项目CORS 策略。几周前我遇到了同样的问题,我问服务器人员然后他从那里启用CORS 但我仍然面临异常然后我问api开发人员然后他从他的django应用程序中启用它并且flutter也不例外网络

    【讨论】:

    • 我是一个人的团队 :),我正在使用 Google Places and IDistance Matrix API,但是启用 CORS 策略是什么意思?
    • 那么它真的很难确定解决方案。但有一件事我可以和你分享。使用这个包在本地禁用 cors 错误,但在生产中不知道 pub.dev/packages/flutter_cors
    • 谢谢,我会尝试通过从云函数调用api来解决这个问题,因为同源策略应该只适用于客户端到服务器请求而不是服务器到服务器请求所以也许它会起作用。
    【解决方案2】:

    这个错误是因为我使用的 Maps Api 不是从客户端代码而是从服务器端调用的。所以解决方案是做一个云函数来发出请求并返回数据

    import axios from "axios";
    
    export const serverRequest = functions.https.onCall(async (url, context)=> {
      isAuthenticatedAdmin(context);
      const response = await axios.get(url as string).then(({data})=> data);
      return response;
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-10
      • 1970-01-01
      • 1970-01-01
      • 2022-12-08
      • 2017-04-30
      • 1970-01-01
      • 2013-04-15
      • 1970-01-01
      相关资源
      最近更新 更多