zoukankan      html  css  js  c++  java
  • 032_nginx配置文件安全下载


    一、

    server {
        listen 8866;
        server_name _;
        access_log /usr/local/etc/nginx/log/download.access.log main;
        error_log /usr/local/etc/nginx/log/download.error.log;
        location / {
          root /usr/local/etc/nginx/aruntestdir;
          if ($request_filename ~* ^.*?.(html|zip|gz)$){     #不能为空
                  add_header Content-Disposition: 'attachment;';
    	      add_header Content-Type: 'APPLICATION/OCTET-STREAM';
          }
        }
    }

    测试:

    如下图所示在nginx的返回的网页Respons中添加头字段.

    Request头解释:

    <1>$request_filename

    file path for the current request, based on the root or alias directives, and the request URI

    <2>Content-Disposition

        In a regular HTTP response, the Content-Disposition response header is a header indicating if the content is expected to be displayed inline in the browser, that is, as a Web page or as part of a Web page, or as an attachment, that is downloaded and saved locally.
        attachment (indicating it should be downloaded; most browsers presenting a 'Save as' dialog
    

    Reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition

    <3>Content-Type

        The Content-Type entity header is used to indicate the media type of the resource.In responses, a Content-Type header tells the client what the content type of the returned content actually is.
        application/octet-stream meaning "download this file"
    
    扩展:
    What are MIME types?
    MIME types describe the media type of content either in email or served by web servers or web applications and are intended to help guide a web browser in how the content is to be processed and displayed. Examples of MIME types are:
    
    text/html for normal web pages
    text/plain for plain text
    text/css for Cascading Style Sheets
    text/javascript for scripts
    application/octet-stream meaning "download this file"
    application/x-java-applet for Java applets
    application/pdf for PDF documents

    Reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type 

    二、附下载python脚本

    #!/usr/bin/env python
    import os
    import urllib
    def Schedule(blocks, blocksize, totalsizeofile):
        """
        The third argument, if present, is a hook function that will be called once on establishment of the network connection
        and once after each block read thereafter.
        The third argument may be -1 on older FTP servers which do not return a file size in response to a retrieval request.
    
        The hook will be passed three arguments;
        :param blocks: a count of blocks transferred so far
        :param blocksize:  a block size in bytes
        :param totalsizeofile: the total size of the file.
        :return:
        """
        percent = 100.0 * blocks * blocksize / totalsizeofile
        if percent > 100 :
            percent = 100
        print '%.2f %%' % percent
    if __name__ == "__main__":
        url = 'http://127.0.0.1:8088/downtest.html'    #download url
        local = os.path.join('/tmp','downtest.html')   #local path + filename
        #If no Content-Length header was supplied, urlretrieve() can not check the size of the data it has downloaded,
        # and just returns it. In this case you just have to assume that the download was successful.
        urllib.urlretrieve(url, local, Schedule)
    
  • 相关阅读:
    结合中断上下文切换和进程上下文切换分析Linux内核的一般执行过程
    深入理解Linux系统调用
    基于mykernel 2.0编写一个操作系统内核
    如何评测软件工程知识技能水平?
    创新产品的需求分析:未来的图书会是什么样子?
    案例分析:设计模式与代码的结构特性
    业务领域建模Domain Modeling
    工程实践用例建模
    分析一套源代码的代码规范和风格并讨论如何改进优化代码
    面向对象第三单元作业反思与总结
  • 原文地址:https://www.cnblogs.com/itcomputer/p/9126843.html
Copyright © 2011-2022 走看看