Invalid HTTP_IF_NONE_MATCH request header

Etienne Robillard tkadm30 at yandex.com
Thu Jun 15 21:45:49 UTC 2017


Hi,

I can confirm that my python script is working from the command line. 
The server (wsgiref) sends a ETag on the initial request with the 200 OK 
status code. Additional requests will have the request header 
If-None-Match set with the correct ETag value and a 304 Not Modified 
response is returned.

The problem appears to be caused by a missing ETag header in the initial 
request when running under FastCGI and nginx only. Furthermore, I'm not 
sure if the "etag on" configuration option is really doing something.

What do you think?

Etienne



Le 2017-06-15 à 13:46, Etienne Robillard a écrit :
> Hi,
>
> I'm trying to implement conditional requests in Django-hotsauce and 
> would like to use HTTP_IF_NONE_MATCH to return a 304 Not Modified 
> response. However in nginx the value of HTTP_IF_NONE_MATCH is 
> incorrect (a empty string is returned).
>
> Here's my nginx config:
>
>  # configuration file /etc/nginx/nginx.conf:
> user www-data;
> worker_processes 4;
> pid /run/nginx.pid;
>
> events {
>     worker_connections 512;
>     multi_accept on;
>     use epoll;
> }
>
> http {
>
>     ##
>     # Basic Settings
>     ##
>
>     sendfile on;
>     tcp_nopush on;
>     tcp_nodelay on;
>     keepalive_timeout 80;
>     types_hash_max_size 2048;
>     # server_tokens off;
>
>     # server_names_hash_bucket_size 64;
>     # server_name_in_redirect off;
>
>     include /etc/nginx/mime.types;
>     default_type application/octet-stream;
>
>     ##
>     # SSL Settings
>     ##
>
>     ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
>     ssl_prefer_server_ciphers on;
>
>     ##
>     # Logging Settings
>     ##
>
>     access_log /var/log/nginx/access.log;
>     error_log /var/log/nginx/error.log;
>
>     ##
>     # Gzip Settings
>     ##
>
>     gzip on;
>     gzip_disable "msie6";
>
>     # gzip_vary on;
>     # gzip_proxied any;
>     # gzip_comp_level 6;
>     # gzip_buffers 16 8k;
>     # gzip_http_version 1.1;
>     # gzip_types text/plain text/css application/json 
> application/javascript text/xml application/xml application/xml+rss 
> text/javascript;
>
>     ##
>     # Virtual Host Configs
>     ##
>
>     include /etc/nginx/conf.d/development.conf;
>     #include /etc/nginx/sites-enabled/*;
> }
>
>
> #mail {
> #    # See sample authentication script at:
> #    # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
> #
> #    # auth_http localhost/auth.php;
> #    # pop3_capabilities "TOP" "USER";
> #    # imap_capabilities "IMAP4rev1" "UIDPLUS";
> #
> #    server {
> #        listen     localhost:110;
> #        protocol   pop3;
> #        proxy      on;
> #    }
> #
> #    server {
> #        listen     localhost:143;
> #        protocol   imap;
> #        proxy      on;
> #    }
> #}
>
> # configuration file /etc/nginx/mime.types:
>
> types {
>     text/html                             html htm shtml;
>     text/css                              css;
>     text/xml                              xml;
>     image/gif                             gif;
>     image/jpeg                            jpeg jpg;
>     application/javascript                js;
>     application/atom+xml                  atom;
>     application/rss+xml                   rss;
>
>     text/mathml                           mml;
>     text/plain                            txt;
>     text/vnd.sun.j2me.app-descriptor      jad;
>     text/vnd.wap.wml                      wml;
>     text/x-component                      htc;
>
>     image/png                             png;
>     image/tiff                            tif tiff;
>     image/vnd.wap.wbmp                    wbmp;
>     image/x-icon                          ico;
>     image/x-jng                           jng;
>     image/x-ms-bmp                        bmp;
>     image/svg+xml                         svg svgz;
>     image/webp                            webp;
>
>     application/font-woff                 woff;
>     application/java-archive              jar war ear;
>     application/json                      json;
>     application/mac-binhex40              hqx;
>     application/msword                    doc;
>     application/pdf                       pdf;
>     application/postscript                ps eps ai;
>     application/rtf                       rtf;
>     application/vnd.apple.mpegurl         m3u8;
>     application/vnd.ms-excel              xls;
>     application/vnd.ms-fontobject         eot;
>     application/vnd.ms-powerpoint         ppt;
>     application/vnd.wap.wmlc              wmlc;
>     application/vnd.google-earth.kml+xml  kml;
>     application/vnd.google-earth.kmz      kmz;
>     application/x-7z-compressed           7z;
>     application/x-cocoa                   cco;
>     application/x-java-archive-diff       jardiff;
>     application/x-java-jnlp-file          jnlp;
>     application/x-makeself                run;
>     application/x-perl                    pl pm;
>     application/x-pilot                   prc pdb;
>     application/x-rar-compressed          rar;
>     application/x-redhat-package-manager  rpm;
>     application/x-sea                     sea;
>     application/x-shockwave-flash         swf;
>     application/x-stuffit                 sit;
>     application/x-tcl                     tcl tk;
>     application/x-x509-ca-cert            der pem crt;
>     application/x-xpinstall               xpi;
>     application/xhtml+xml                 xhtml;
>     application/xspf+xml                  xspf;
>     application/zip                       zip;
>
>     application/octet-stream              bin exe dll;
>     application/octet-stream              deb;
>     application/octet-stream              dmg;
>     application/octet-stream              iso img;
>     application/octet-stream              msi msp msm;
>
> application/vnd.openxmlformats-officedocument.wordprocessingml.document 
> docx;
> application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx;
> application/vnd.openxmlformats-officedocument.presentationml.presentation 
> pptx;
>
>     audio/midi                            mid midi kar;
>     audio/mpeg                            mp3;
>     audio/ogg                             ogg;
>     audio/x-m4a                           m4a;
>     audio/x-realaudio                     ra;
>
>     video/3gpp                            3gpp 3gp;
>     video/mp2t                            ts;
>     video/mp4                             mp4;
>     video/mpeg                            mpeg mpg;
>     video/quicktime                       mov;
>     video/webm                            webm;
>     video/x-flv                           flv;
>     video/x-m4v                           m4v;
>     video/x-mng                           mng;
>     video/x-ms-asf                        asx asf;
>     video/x-ms-wmv                        wmv;
>     video/x-msvideo                       avi;
> }
>
> # configuration file /etc/nginx/conf.d/development.conf:
> server {
>
>     # static medias web server configuration, for development
>     # and testing purposes.
>
>     listen       80;
>     server_name  localhost;
>     error_log /var/log/nginx/error_log; #debug
>     #access_log  /var/log/nginx/gthc.org/access.log;
>     root /home/erob/www/isotopesoftware.ca;
>     #autoindex on;
>
>     location / {
>     #    # host and port to fastcgi server
>         fastcgi_pass 127.0.0.1:8808; # 8808=gthc.org; 8801=tm
>         include fastcgi_params;
>         autoindex on;
>     #    # rewrite /CamelCase to /wiki/CamelCase
>     #    rewrite ^/(.*[A-Z][a-z]*)$ /wiki$1 last;
>         etag on;
>     #fastcgi_pass_header $http_if_none_match;
>     }
>
>
>     # debug url rewriting to the error log
>     rewrite_log on;
>
>     location /media {
>         autoindex on;
>         gzip on;
>     }
>
>     location /pub {
>         autoindex on;
>         gzip on;
>     }
>
>     location /webalizer {
>         autoindex on;
>         gzip on;
>     #auth_basic "Private Property";
>     #auth_basic_user_file /etc/nginx/.htpasswd;
>         allow 67.68.76.70;
>     deny all;
>     }
>
>     location /documentation {
>         autoindex on;
>         gzip on;
>     }
>
>     location /moin_static184 {
>     autoindex on;
>     gzip on;
>     }
>
>     location /favicon.ico {
>     empty_gif;
>     }
>     location /robots.txt {
>          root /home/www/isotopesoftware.ca;
>     }
>     location /sitemap.xml {
>     root /home/www/isotopesoftware.ca;
>     }
>
>     #location /public_html {
>     # root /home/www/;
>     # autoindex on;
>     #}
>     # redirect server error pages to the static page /50x.html
>     #error_page 404 /404.html;
>     #error_page 403    /403.html;
>     #error_page 500 502 503 504  /50x.html;
>     #location = /50x.html {
>     #    root   /var/www/nginx-default;
>     #}
>
>     include conf.d/moinmoin.conf;
>     #include conf.d/hgwebdir.conf;
> }
>
>
> # configuration file /etc/nginx/fastcgi_params:
> fastcgi_param  PATH_INFO          $fastcgi_script_name;
> fastcgi_param  QUERY_STRING       $query_string;
> fastcgi_param  REQUEST_METHOD     $request_method;
> fastcgi_param  CONTENT_TYPE       $content_type;
> fastcgi_param  CONTENT_LENGTH     $content_length;
>
> fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
> fastcgi_param  REQUEST_URI        $request_uri;
> fastcgi_param  DOCUMENT_URI       $document_uri;
> fastcgi_param  DOCUMENT_ROOT      $document_root;
> fastcgi_param  SERVER_PROTOCOL    $server_protocol;
>
> fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
> fastcgi_param  SERVER_SOFTWARE    nginx;
>
> fastcgi_param  REMOTE_ADDR        $remote_addr;
> fastcgi_param  REMOTE_PORT        $remote_port;
> #fastcgi_param  REMOTE_USER      $remote_user;
> fastcgi_param  SERVER_ADDR        $server_addr;
> fastcgi_param  SERVER_PORT        $server_port;
> fastcgi_param  SERVER_NAME        $server_name;
>
>
> fastcgi_param HTTP_IF_NONE_MATCH $http_if_none_match;
> fastcgi_param HTTP_IF_MODIFIED_SINCE $http_if_modified_since;
>
>
> # PHP only, required if PHP was built with --enable-force-cgi-redirect
> # fastcgi_param  REDIRECT_STATUS    200;
>
> fastcgi_send_timeout 90;
> fastcgi_read_timeout 90;
> fastcgi_connect_timeout 40;
> fastcgi_cache_valid 200 304 10m;
> #fastcgi_buffer_size 128k;
> #fastcgi_buffers 8 128k;
> #fastcgi_busy_buffers_size 256k;
> #fastcgi_temp_file_write_size 256k;
>
>
> # configuration file /etc/nginx/conf.d/moinmoin.conf:
>
>
> location /wiki {
>
>
>       if ($uri ~ ^/wiki(.*)?){
>          set $wiki_url $1;
>       }
>       # host and port to fastcgi server
>       fastcgi_pass 127.0.0.1:8807; # 8808=gthc.org; 8801=tm; 
> 8807=moinmoin
>       #include fastcgi_params;
>       fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
>       fastcgi_param  SERVER_SOFTWARE    nginx;
>       fastcgi_param  QUERY_STRING       $query_string;
>       fastcgi_param  REQUEST_METHOD     $request_method;
>       fastcgi_param  CONTENT_TYPE       $content_type;
>       fastcgi_param  CONTENT_LENGTH     $content_length;
>       fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
>       #fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
>       fastcgi_param  REQUEST_URI        $request_uri;
>       fastcgi_param  DOCUMENT_URI       $document_uri;
>       fastcgi_param  DOCUMENT_ROOT      $document_root;
>       fastcgi_param  SERVER_PROTOCOL    $server_protocol;
>       fastcgi_param  REMOTE_ADDR        $remote_addr;
>       fastcgi_param  REMOTE_PORT        $remote_port;
>       fastcgi_param  SERVER_ADDR        $server_addr;
>       fastcgi_param  SERVER_PORT        $server_port;
>       fastcgi_param  SERVER_NAME        $server_name;
>       fastcgi_param PATH_INFO $wiki_url;
>       fastcgi_param SCRIPT_NAME /wiki;
> }
> #location /moin_static184 {
> #    root /home/www/isotopesoftware.ca;
> #    autoindex on;
> #}
>
> Configuration:
> sudo nginx -V
> nginx version: nginx/1.12.0
> built by gcc 4.9.2 (Debian 4.9.2-10)
> built with OpenSSL 1.0.2l  25 May 2017
> TLS SNI support enabled
> configure arguments: --with-cc-opt='-g -O2 -fstack-protector-strong 
> -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2' 
> --with-ld-opt=-Wl,-z,relro --prefix=/usr/share/nginx 
> --conf-path=/etc/nginx/nginx.conf 
> --http-log-path=/var/log/nginx/access.log 
> --error-log-path=/var/log/nginx/error.log 
> --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid 
> --http-client-body-temp-path=/var/lib/nginx/body 
> --http-fastcgi-temp-path=/var/lib/nginx/fastcgi 
> --http-proxy-temp-path=/var/lib/nginx/proxy 
> --http-scgi-temp-path=/var/lib/nginx/scgi 
> --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug 
> --with-pcre-jit --with-ipv6 --with-http_ssl_module 
> --with-http_stub_status_module --with-http_realip_module 
> --with-http_auth_request_module --with-http_addition_module 
> --with-http_dav_module --with-http_gzip_static_module 
> --with-http_image_filter_module --with-http_sub_module --with-threads
>
>
> Questions:
>
> 1. Any suggestions why the value of HTTP_IF_NONE_MATCH is not defined 
> in nginx ?
> 2. Why is the python script working with wsgiref but not in nginx ?
>
> Thank you in advance,
>
> Etienne
> _______________________________________________
> nginx mailing list
> nginx at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx

-- 
Etienne Robillard
tkadm30 at yandex.com
http://www.isotopesoftware.ca/



More information about the nginx mailing list