Search code examples
dartdart-io

Dart Language: GET (favicon issue)


I have a Dart application running on the server side. It is listening at a specific port and working fine. The problem is: my listener is responding to the GET of the favorite icon (favicon).

How can I avoid that?

EDIT: give some code example.

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();
}

This is the output of this code:

1

/SOME_REQUEST_FROM_THE_BROWSER

2

/favicon.ico


Solution

  • You can check the requested resource and generate proper response for requests to 'favicon.ico' like

    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();
    }