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