Исправление неэкранированного # в 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)
    

0 ответов

Другие вопросы по тегам