【问题标题】:Tornado - Python : How to Disable Favicon.icoTornado - Python:如何禁用 Favicon.ico
【发布时间】:2016-06-24 23:25:53
【问题描述】:

大家好,我刚刚制作了一个 python 程序,它可以通过它们的格式打开我的文件并设置它们的缓存控制时间。但问题是我的代码在我请求 jpg 文件时采用来自 favicon 的 ico 格式

这是我的代码:

#!/usr/bin/python
import tornado
import tornado.ioloop
import tornado.web
import sys , importlib
import os
import os.path
from urllib2 import Request, urlopen, URLError
from myconfig import *
import webbrowser
import time


conf2=locals()

if len(sys.argv) > 1:
    conf = sys.argv[1]
else:
    conf = 'dosya belirtilmedi'
    print conf

def check( str ):
    return conf2[str][0]
def check2( str ):
    return conf2[str][1]
def check3( str ):
    return conf2[str][2]

def do( str ):
    return len(str)
def calculate(str):
    if check3(str) == 'seconds':
        return 1
    elif check3(str) == 'minutes':
        return 60
    elif check3(str) == 'hours':
        return 60*60
    elif check3(str) == 'days':
        return 60*60*24
    elif check3(str) == 'weeks':
        return 60*60*24*7
    elif check3(str) == 'mounths':
        return 60*60*24*7*4
    elif check3(str) == 'years':
        return 60*60*24*7*4*12
    else:
        return 5000


class GetFileHandler(tornado.web.RequestHandler):
        def get(self,url):
                x={}
                f={}
                                path = sys.argv[1] + self.request.uri
                                data = self.request.uri
                x = data.split(".")
                                if data == '/':
                                        self.write("Ana Sayfa")
                elif len(x) > 1:
                        z=x[1]
                        f=check(z).split("/")
                        j=f[1]
                        print j
                        print do(j)
                        print do(html)
                                                if z in conf2:
                            self.set_header('Content-Type',check(z))
                            if (z in conf2 and do(j) != 3):
                                cal=calculate(z)
                                cal2=conf2[z][1]
                                total=cal*cal2
                                self.set_header('Cache-Control', 'max-age=%s, public' % total )

                                else:
                                self.set_header('Cache-Control', 'max-age=100, public')
                                print 100
                                                    if os.path.isfile(path) and os.access(path, os.R_OK):
                                with open(path, 'rb') as f:

                                                                y = f.read()
                                                                self.write(y)
                                                                self.finish()
                            else:
                                        webbrowser.open('http://ecommerceblog.mightymerchant.com/wp-content/uploads/2007/10/404-image.jpg')

                                            else:

                                                    self.write("YOK" + "=" + z)
                else:   
                        self.write("Dosya Formati Yok")



if __name__ == "__main__":
    application = tornado.web.Application([
        (r"/(.*)", GetFileHandler),])
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

这是我的配置文件:



jpg=["image/jpeg",23,"minutes"]
html=["text/html",30,"seconds"]
gif=["image/gif",3,"hours"]
png=["image/png"] 

这是我的错误:

错误:tornado.application:未捕获的异常 GET /favicon.ico (127.0.0.1) HTTPServerRequest(protocol='http', host='localhost:8888', method='GET', uri='/favicon.ico', version='HTTP/1.1', remote_ip='127.0.0.1', headers={ 'Accept-Language': 'en-US,en;q=0.8', 'Accept-Encoding': 'gzip, deflate, sdch', 'Host': 'localhost:8888', 'Accept': '*/* ', 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36', 'Connection': 'keep-alive', 'Referer' : 'http://localhost:8888/im.jpg'}) 回溯(最近一次通话最后): _execute 中的文件“/usr/local/lib/python2.7/dist-packages/tornado-4.3-py2.7-linux-x86_64.egg/tornado/web.py”,第 1443 行 结果 = 方法(*self.path_args,**self.path_kwargs) 文件“./w.py”,第 60 行,在 get f=check(z).split("/") 文件“./w.py”,第 22 行,检查中 返回 conf2[str][0] 键错误:'ico' 错误:tornado.access:500 GET /favicon.ico (127.0.0.1) 0.48ms

image

这是我在浏览器上的问题的图像。正如你所看到的,我只发送 jpg 请求,但总是有 favicon 请求(内容类型是 text/html)。我只是想禁用它,可能会删除它。我无法理解原因。请帮助我,谢谢。

【问题讨论】:

  • 修复您的代码。它充满了语法错误。
  • 检查一切并重新运行程序没有语法错误
  • 缩进都搞砸了。
  • 您可以明确地请求来自另一个域的网站图标:<link rel="shortcut icon" href="http://some-other-domain.com/favicon.ico">。这样,浏览器会将 favicon 请求发送到另一个域,您不会收到 500 错误。

标签: python tornado favicon


【解决方案1】:

浏览器正在请求favicon

这会导致您的代码崩溃,这就是您看到500 状态代码的原因。

问题中的格式太远了,无法查看,但解决方案是添加一个网站图标。这个答案here 有更多关于网站图标主题的建议。

【讨论】:

  • 首先感谢您的关注和回复。我检查了该链接上的所有 cmets,但恐怕没有什么可以帮助我。因为我没有和 html 代码来禁用 favicon.ico 请求: 所以我只想通过 tornado 或 python 代码删除或禁用它。希望你能理解我再次感谢
  • 在 python 中,您无法阻止浏览器请求资源。链接的答案只是指向其他解决方案的指针。关键解决方案是修复代码,因为浏览器将发出请求。
【解决方案2】:

这不是我想要的,但以下代码使我的 favicon.ico 请求消失 我没有 favicon.ico,因此我想要 404 错误而不是 500 这个技巧完全从“Chrome”浏览器中删除了 favicon 请求

if z == "ico":
        self.set_status(404)

【讨论】:

  • 这不会删除对 chrome 的请求,它只会返回 404 Not Found
  • 哦,明白你是对的,但是当我在 chrome 中按 f12 时,没有 favicon.ico 了。这是否意味着 chrome 会停止对 favicon.ico 的请求?
  • @ArdaNalbant 否。浏览器仍会请求网站图标。您可以在 Chrome 的开发者工具中查看请求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-17
  • 1970-01-01
相关资源
最近更新 更多