Исправление неэкранированного # в URL с помощью nginx
Плохой HTTP-клиент не экранирует хеш-знаки и отправляет их в nginx, вот так:
GET /foo/escaped#stuff
Вместо:
GET /foo/escaped%23stuff
Это нарушает мою конфигурацию nginx, так как nginx удаляет текст после #
в proxy_pass
директивы. Как мне избежать хеш-знака?
- С помощью
return 200 "$request_uri";
действительно показывает мне, что nginx читает это, так что кажется, что это возможно. Nginx, однако, игнорирует это вlocation
блоки, так что я не могу сопоставить это ни с чем. Вы можете использовать следующий код для отправки неэкранированных HTTP-запросов GET в Python:
import socket def get(host, port, uri): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((host, port)) sock.send('GET {} HTTP/1.0\r\nHost: {}\r\n\r\n'.format(uri, host)) return sock.recv(1000)