• WERKZEUG中HTTP模块和自带的简易服务器程序


    HTTP模块是对http数据进行加工或者判断,包括解析请求和对响应的包装。
    模块中对http中各元素的处理都差不多,下面用etag举说明:
    在服务端和客户端的交互通信中,有一个最重要的概念就是缓存(cache)。它的作用是将请求频繁的内容从服务端取出,copy在一个客户端和服务端中间的位置处,以加速服务端和客户端的通信,减少服务器的负担。存放这些数据的位置叫缓存代理,和路由器一样,大型的缓存代理能够存储某些共享内容,供一个区域内的客户端访问,加速这一区域类似数据的访问。浏览器也是一个缓存,也能缓存来自服务端的信息,用于浏览器自身的访问。 某些时候,服务端的原始数据会产生变化,为了使服务端和客户端的数据同步,用实体标签(etag)对特定的内容,进行唯一的标识。通过判断服务端和客户端相同内容的实体标签是否相同,就能判断服务端数据是否产生更改,如果产生更改,响应服务端的原始内容,并将缓存处的内容更新;如果没产生更改,响应缓存处的内容。详细理解关于缓存和etag的内容可以查阅:《HTTP:the definative guide》

    以上介绍了缓存的内容,下面分析WERZEUG对etag的操作方法

    def quote_etag(etag, weak=False):
        if '"' in etag:
            raise ValueError('invalid etag')
        etag = '"%s"' % etag
        if weak:
            etag = 'W/' + etag
        return etag
    

    主要作用是引用etag,判断weak的值,如果weak的值为真,就加上'w/'字样;weak的作用是将内容进行模糊匹配,只用两端的内容不同之处超过一定的阈值,才响应服务端的内容。

    def unquote_etag(etag):
        if not etag:
            return None, None
        etag = etag.strip()
        weak = False
        if etag.startswith(('W/', 'w/')):
            weak = True
            etag = etag[2:]
        if etag[:1] == etag[-1:] == '"':
            etag = etag[1:-1]
        return etag, weak
    

    这个函数的作用是返回一个weaketag组成的元组。

    def parse_etags(value):
        if not value:
            return ETags()
        strong = []
        weak = []
        end = len(value)
        pos = 0
        while pos < end:
            match = _etag_re.match(value, pos)
            if match is None:
                break
            is_weak, quoted, raw = match.groups()
            if raw == '*':
                return ETags(star_tag=True)
            elif quoted:
                raw = quoted
            if is_weak:
                weak.append(raw)
            else:
                strong.append(raw)
            pos = match.end()
        return ETags(strong, weak)
    

    解析etag,返回一个Etags类型的元组。ETags内容是来自模块datastructure中的内容,这个模块中定义了需要组合起来的数据。

    def generate_etag(data):
        return md5(data).hexdigest()
    

    md5产生一个32位的通过md5算法加密的字符串,hashlib模块中包含了,很多加密算法。

    servering

    这是werkzeug定义的简易的服务器端,用于在开发环境中测试应用程序。是调用HTTPServer中的API实现。可以运行当前模块,在浏览器中打开,查看效果。

  • 相关阅读:
    windwos8.1英文版安装SQL2008 R2中断停止的解决方案
    indwows8.1 英文版64位安装数据库时出现The ENU localization is not supported by this SQL Server media
    Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds
    SQL数据附加问题
    eclipse,myeclipse中集合svn的方法
    JAVA SSH 框架介绍
    SSH框架-相关知识点
    SuperMapRealSpace Heading Tilt Roll的理解
    SuperMap iserver manage不能访问本地目的(IE9)
    Myeclipse中js文件中的乱码处理
  • 原文地址:https://www.cnblogs.com/hyperionworld/p/5370896.html
Copyright © 2020-2023  润新知