【问题标题】:Dart Language: GET (favicon issue)Dart 语言:GET(网站图标问题)
【发布时间】:2014-06-26 21:55:13
【问题描述】:

我在服务器端运行了一个 Dart 应用程序。它正在侦听特定端口并且工作正常。问题是:我的听众正在响应最喜欢的图标(favicon)的 GET。

我怎样才能避免这种情况?

编辑:给出一些代码示例。

import 'dart:io';

void main() {
    print("Starting server.");
    HttpServer.bind(InternetAddress.LOOPBACK_IP_V4, 4041)
        .then(listenForRequests)
        .catchError((e) => print (e.toString()));
}

listenForRequests(HttpServer _server) {
    _server.listen((HttpRequest request) {
        if (request.method == 'GET') {
            handleGet(request);
        } else {
            request.response.statusCode = HttpStatus.METHOD_NOT_ALLOWED;
            request.response.write("Unsupported request: ${request.method}.");
            request.response.close();
        }
    },
    onDone: () => print('No more requests.'),
    onError: (e) => print(e.toString()) );
}

void handleGet(HttpRequest request) {
    int requestNumber = 1;
    print(requestNumber); // This shows me the request number. Just for information.
    print(request.uri); // This shows me the request from the client browser.
    request.response.statusCode = HttpStatus.OK;
    request.response.close();
}

这是这段代码的输出:

1

/SOME_REQUEST_FROM_THE_BROWSER

2

/favicon.ico

【问题讨论】:

  • 所以你的应用程序模仿了一个网络服务器?
  • @Robert 实际上,我正在开发一个 Web 应用程序,它将在服务器端处理文件操作(创建、打开、保存),并且由于 Dart 无法在客户端运行 dart:io,我必须在服务器上运行 HTTP 请求侦听器。我对 Dart 很陌生,我不知道这是否是处理客户端-服务器操作的正确方法,但如果是,我必须避免响应与我的应用程序无关的 GET 请求。

标签: dart dart-io


【解决方案1】:

您可以检查请求的资源并为对“favicon.ico”之类的请求生成适当的响应

void handleGet(HttpRequest request) {
    int requestNumber = 1;
    print(requestNumber++); // This shows me the request number.
    print(request.uri); // This shows me the request from the client browser.
    if(request.requestedUri.path != '/favicon.ico') {
      request.response.statusCode = HttpStatus.NOT_FOUND;
    } else {
      request.response.statusCode = HttpStatus.OK;
    }
    request.response.close();
}

【讨论】:

  • 我可以让浏览器将请求以“my_app_request”之类的字符串开头发送到我的 Dart 服务器端应用程序,然后在 handleGet 的开头检查该特定字符串,对吗?这将解决响应我的应用程序未编程的请求的问题。这是一种解决方法还是真正的解决方案?
  • 我认为您不能修改favicon.ico 请求。您应该只在服务器上检查您可以或想要处理哪些请求,对于所有其他请求,您只需发送正确的响应代码,如HttpStatus.NOT_FOUND(如果另一个错误代码更适合,则类似)。您绝对应该在服务器上处理此问题,因为这是您可以控制的。您无法控制用户在浏览器地址栏中输入的内容或某些“代理”可能向您的服务器发送的内容。
  • 我明白这一点,但我认为我解释错了。我认为解决这个问题的方法是开发服务器端应用程序,以检查请求的Uri.path 以查看它是否与我想要响应的匹配。我不会更改来自浏览器的请求。我只需更改提交按钮操作即可将特定字符串发送到我的服务器。
  • 谢谢,君特!我将调整 handleGet 以响应特定请求! =)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-03
  • 2013-11-30
  • 1970-01-01
  • 2020-08-18
  • 1970-01-01
相关资源
最近更新 更多