2016-02-15 22 views
13

Trong mọi yêu cầu, máy chủ của tôi nhận được yêu cầu GET tới /favicon.ico, ngay cả khi nó là REST api không bao gồm tệp html. Tại sao điều này xảy ra và làm cách nào tôi có thể ngăn yêu cầu này?Express js ngăn chặn GET /favicon.ico

Trả lời

34

trình duyệt sẽ theo mặc định cố gắng để yêu cầu /favicon.ico từ gốc của tên máy chủ, để hiển thị biểu tượng trong tab trình duyệt.

Nếu bạn muốn tránh yêu cầu này trả lại 404, bạn có thể:

  • Cung cấp một tập tin favicon.ico có sẵn tại thư mục gốc của trang web của bạn.
  • Sử dụng mô-đun như serve-favicon để trỏ yêu cầu đến một tệp cụ thể.
  • Săn favicon.ico yêu cầu và gửi một tình trạng 204 No Content:

    app.get('/favicon.ico', function(req, res) { res.status(204); });

+3

Tôi đã gửi chỉnh sửa cho câu trả lời ở trên cho biết rằng việc gửi phản hồi '204' phù hợp hơn' 200'. – naterkane

+0

Cảm ơn, đề xuất tốt. – duncanhall

+4

Trong Express 4, 'res.sendStatus (204);' – pxwise

2

Tôi nghĩ bạn có nghĩa là máy chủ của bạn nhận được yêu cầu như vậy. Thông thường, trình duyệt sẽ cố gắng hiển thị biểu tượng trên tab. Đặc biệt Chrome rất hung dữ (ít nhất đó là quan sát của tôi).
Những gì bạn có thể làm là xử lý đúng đắn các yêu cầu cho các trang HTML của bạn và bỏ qua nó cho các cuộc gọi API (như họ có thể sẽ thường không xảy ra ở mặt trước với một trình duyệt)

2

phương pháp ưa thích của tôi là middleware

đặt ở đâu đó này:

function ignoreFavicon(req, res, next) { 
    if (req.originalUrl === '/favicon.ico') { 
    res.status(204).json({nope: true}); 
    } else { 
    next(); 
    } 
} 

thì:

012.
app.use(ignoreFavicon); 
Các vấn đề liên quan