ฉันไม่มี favicon.ico แต่ IE มักจะทำการร้องขอ
เป็นไปได้ไหมที่จะป้องกันไม่ให้เบราว์เซอร์ทำการร้องขอ favicon จากเว็บไซต์ของฉัน บางที META-TAG ในส่วนหัวของ HTML?
ฉันไม่มี favicon.ico แต่ IE มักจะทำการร้องขอ
เป็นไปได้ไหมที่จะป้องกันไม่ให้เบราว์เซอร์ทำการร้องขอ favicon จากเว็บไซต์ของฉัน บางที META-TAG ในส่วนหัวของ HTML?
คำตอบ:
ก่อนอื่นฉันจะบอกว่ามี favicon ในหน้าเว็บเป็นสิ่งที่ดี (ปกติ)
อย่างไรก็ตามมันไม่ได้เป็นที่ต้องการเสมอไปและบางครั้งนักพัฒนาก็ต้องการวิธีที่จะหลีกเลี่ยงการรับภาระพิเศษ ตัวอย่างเช่น IFRAME จะขอ favicon โดยไม่แสดง ที่แย่ที่สุดใน Chrome และ Android IFRAME จะสร้างคำขอ 3 รายการสำหรับ favicons:
"GET /favicon.ico HTTP/1.1" 404 183
"GET /apple-touch-icon-precomposed.png HTTP/1.1" 404 197
"GET /apple-touch-icon.png HTTP/1.1" 404 189
ข้อมูลต่อไปนี้ใช้ URI ข้อมูลและสามารถใช้เพื่อหลีกเลี่ยงคำขอปลอม favicon:
<link rel="shortcut icon" href="data:image/x-icon;," type="image/x-icon">
สำหรับการอ้างอิงดูที่นี่:
ข้อผิดพลาด / พฤติกรรมของ Chrome อาจได้รับการแก้ไขในรุ่นต่อไป
นี่คือการส่งข้อผิดพลาดสำหรับคุณที่จะลงคะแนน:
อัปเดต 1:
จากความคิดเห็น (jpic) ดูเหมือนว่า Firefox> = 25 ไม่ชอบไวยากรณ์ข้างต้นอีกต่อไป ฉันทดสอบบน Firefox 27 แล้ว แต่มันไม่ทำงานในขณะที่ยังทำงานบน Webkit / Chrome
ดังนั้นนี่คือใหม่ที่ควรครอบคลุมเบราว์เซอร์ล่าสุดทั้งหมด ฉันทดสอบ Safari, Chrome และ Firefox:
<link rel="icon" href="data:;base64,=">
ฉันปล่อยชื่อ "ทางลัด" ออกจากค่าแอตทริบิวต์ "rel" เนื่องจากเป็นเพียงสำหรับ IE รุ่นเก่าและรุ่นของ IE <8 ไม่ชอบ dataURIs เช่นกัน ไม่ได้ทดสอบบน IE8
อัปเดต 2:
หากคุณต้องการเอกสารของคุณเพื่อตรวจสอบกับ HTML5 ให้ใช้สิ่งนี้แทน:
<link rel="icon" href="data:;base64,iVBORw0KGgo=">
<link rel="icon" type="image/png" href="data:image/png;base64,iVBORw0KGgo=">
ดูเหมือนจะแก้ปัญหาได้แล้ว
data:image/png;base64,iVBORw0KGgo=
ในเบราว์เซอร์บันทึกเป็นที่favicon.ico
รู้จัก ล้างไฟล์ PNGและเก็บไว้ในรูทเว็บไซต์ ขวา?
เพียงเพิ่มบรรทัดต่อไปนี้ใน<head>
ส่วนของไฟล์ HTML ของคุณ:
<link rel="icon" href="data:,">
คุณสมบัติของโซลูชันนี้:
href="#"
)reserves space
อะไร?
ฉันเชื่อว่าฉันเคยเห็นสิ่งนี้ (ฉันยังไม่ได้ทดสอบหรือใช้เป็นการส่วนตัว):
<link rel="shortcut icon" href="#" />
ใครมีประสบการณ์คล้ายกัน
แก้ไข:
ฉันเพิ่งทดสอบตัวอย่างข้างต้นและในการรีเฟรชแบบเต็มบังคับไม่พบคำขอ favicon ใน Fiddler ฉันทดสอบกับ IE8 (โหมดความเข้ากันได้เป็นมาตรฐาน IE7) และ FF 3.6
href
ลิงก์ไปยังแหล่งข้อมูลคงที่ (แคช) ที่คุณโหลดไว้แล้ว (เช่น css หรือไฟล์สคริปต์) - เพื่อให้แน่ใจว่าหน้าแบบไดนามิก (ไม่แคช) ไม่ได้รับการร้องขอสองครั้ง (เพื่อความปลอดภัยเนื่องจากhref="#"
ชี้ไปยังเว็บเพจปัจจุบันทางเทคนิค)
คุณทำไม่ได้ สิ่งที่คุณทำได้คือทำให้ภาพนั้นเล็กที่สุดเท่าที่จะเป็นไปได้และตั้งค่าส่วนหัวของการทำให้เป็นโมฆะแคช ( Expires
, Cache-Control
) ในอนาคต นี่คือสิ่งที่ Yahoo! ได้พูดเกี่ยวกับคำขอ favicon.ico
คุณสามารถใช้. htaccess หรือคำสั่งเซิร์ฟเวอร์เพื่อปฏิเสธการเข้าถึง favicon.ico แต่เซิร์ฟเวอร์จะส่งการเข้าถึงที่ถูกปฏิเสธการตอบกลับไปยังเบราว์เซอร์และนี่ยังทำให้การเข้าถึงหน้าช้าลง
คุณสามารถหยุดเบราว์เซอร์ที่ร้องขอ favicon.ico เมื่อผู้ใช้กลับมาที่ไซต์ของคุณโดยให้เบราว์เซอร์อยู่ในแคชของเบราว์เซอร์
ขั้นแรกให้ภาพ favicon.ico ขนาดเล็กอาจว่างเปล่า แต่เล็กที่สุดเท่าที่จะทำได้ ฉันทำสีดำและสีขาวต่ำกว่า 200 ไบต์ จากนั้นใช้คำสั่ง. htaccess หรือเซิร์ฟเวอร์ให้ตั้งค่าส่วนหัวของไฟล์ Expires หนึ่งหรือสองเดือนในอนาคต เมื่อผู้ใช้รายเดียวกันกลับมาที่ไซต์ของคุณจะถูกโหลดจากเบราว์เซอร์แคชและจะไม่มีการร้องขอไปยังไซต์ของคุณ ไม่มีอีก 404 ในเซิร์ฟเวอร์ที่บันทึกด้วย
หากคุณสามารถควบคุมเซิร์ฟเวอร์ Apache ที่สมบูรณ์หรือเซิร์ฟเวอร์เสมือนคุณสามารถทำสิ่งนี้: -
หากรูทของเอกสารเซิร์ฟเวอร์พูด / var / www / html ให้เพิ่มสิ่งนี้ใน /etc/httpd/conf/httpd.conf:-
Alias /favicon.ico "/var/www/html/favicon.ico"
<Directory "/var/www/html">
<Files favicon.ico>
ExpiresActive On
ExpiresDefault "access plus 1 month"
</Files>
</Directory>
จากนั้น favicon.ico เดียวจะใช้งานได้กับไซต์โฮสต์เสมือนทั้งหมดเนื่องจากคุณเป็นนามแฝง มันจะถูกดึงมาจากแคชเบราว์เซอร์เป็นเวลาหนึ่งเดือนหลังจากที่ผู้ใช้เยี่ยมชม
สำหรับ. htaccess สิ่งนี้มีรายงานว่าใช้งานได้ (ไม่ได้ตรวจสอบโดยฉัน): -
AddType image/x-icon .ico
ExpiresActive On
ExpiresByType image/x-icon "access plus 1 month"
.htaccess
วิธีการแก้ปัญหาที่ง่ายมากที่จะใส่รหัสด้านล่างในของคุณ ฉันมีปัญหาเดียวกันและจะแก้ปัญหาของฉัน
<IfModule mod_alias.c>
RedirectMatch 403 favicon.ico
</IfModule>
การอ้างอิง: http://perishablepress.com/block-favicon-url-404-requests/
ใน Node.js
res.writeHead(200, {'Content-Type': 'text/plain', 'Link': 'rel="shortcut icon" href="#"'} );
จากประสบการณ์ของเรากับ Apache ที่ล้มลงตามคำขอของ favicon.ico เราใส่เครื่องหมายส่วนหัวพิเศษไว้ในไฟล์. htaccess
ตัวอย่างเช่นเรามีชุดส่วนหัว X-XSS-Protection "1; mode = block"
... แต่เราลืม sudo a2enmod header ไว้ก่อน การแสดงความคิดเห็นส่วนหัวเพิ่มเติมที่ถูกส่งไปแก้ไขปัญหา favicon.ico ของเรา
นอกจากนี้เรายังมีโฮสต์เสมือนหลายชุดสำหรับการพัฒนาและล้มเหลวเมื่อมีข้อผิดพลาดเซิร์ฟเวอร์ภายใน 500 ข้อเมื่อใช้http: // localhostและดึงข้อมูล /favicon.ico หากคุณเรียกใช้ "curl -v http: //localhost/favicon.ico " และรับคำเตือนเกี่ยวกับชื่อโฮสต์ที่ไม่ได้อยู่ในแคชตัวแก้ไขหรือบางสิ่งบางอย่างกับผลกระทบนั้นคุณอาจประสบปัญหา
อาจเป็นเรื่องง่ายเหมือนไม่ดึงข้อมูล (เราได้ลองและไม่ได้ผลเพราะสาเหตุหลักของเราแตกต่างกัน) หรือมองหาคำสั่งใน apache2.conf หรือ. htaccess ซึ่งอาจทำให้เกิดข้อความแปลก 500 ข้อผิดพลาดเซิร์ฟเวอร์ภายใน
เราพบว่ามันล้มเหลวอย่างรวดเร็วไม่มีอะไรที่เป็นประโยชน์ในการบันทึกข้อผิดพลาดของ Apache เลยและใช้เวลาตลอดทั้งวันเปลี่ยนสิ่งเล็ก ๆ น้อย ๆ ที่นี่และที่นั่นจนกว่าเราจะแก้ไขปัญหาของการตั้งค่าส่วนหัวพิเศษเมื่อเราลืมโหลด mod_headers!
บางครั้งข้อผิดพลาดนี้เกิดขึ้นเมื่อ HTML มีรหัสความคิดเห็นบางส่วนและเบราว์เซอร์พยายามค้นหาบางอย่าง เช่นเดียวกับในกรณีของฉันฉันได้แสดงความคิดเห็นรหัสสำหรับเว็บฟอร์มในขวดและฉันได้รับนี้
หลังจากใช้เวลา 2 ชั่วโมงฉันแก้ไขมันด้วยวิธีต่อไปนี้:
1) ฉันสร้างสภาพแวดล้อมแบบหลามใหม่จากนั้นจะเกิดข้อผิดพลาดในบรรทัด HTML ที่คอมเม้นต์ก่อนหน้านี้ฉันเพิ่งเกิดข้อผิดพลาด 'GET /favicon.ico HTTP / 1.1 "404'
2) บางครั้งเมื่อฉันมีรหัสซ้ำเช่นไฟล์ python ที่มีชื่อเดียวกันฉันก็เห็นข้อผิดพลาดนี้ให้ลองลบออกด้วย
คุณสามารถใช้
<link rel="shortcut icon" href="http://localhost/" />
ด้วยวิธีนี้มันจะไม่ถูกร้องขอจากเซิร์ฟเวอร์