Я знаю, что вы всегда думали об испытаниях и невзгодах переживания радостей жизни в качестве веб-прокси. Честно говоря, у кого нет? Сегодня вам поручено реализовать эту цель (по крайней мере, ее часть). Сайт X ежедневно получает большой трафик и ищет PaaS (очевидно, это относится к Proxy как услуге) из-за большого количества пользователей, которые настаивают на передаче конфиденциальной информации через параметры запроса (пользователи глупы). Ваша задача состоит в том, чтобы удалить все и все важные параметры запроса из запроса, прежде чем перенаправить запрос в его исходное место назначения.
вход
- Правильно сформированный абсолютный URL-адрес HTTP, который следует грамматике URI в Разделе 3 RFC3986 .
- Вы можете предположить, что нет фрагмента
- Краткий пример формата, где все в квадратных скобках обозначает необязательный:
http[s]://[user:pass@]host.name.com[:port]/[?param1=value1¶m2=value2...]
- Список параметров запроса для удаления.
Выход
Измененный URL-адрес HTTP без параметров, определенных в списке ввода.
Примеры
http://example.com/ [foo]
> http://example.com/
http://example.com/?foo=bar []
> http://example.com/?foo=bar
http://example.com/ []
> http://example.com/
http://example.com/?foo=1&bar=2&baz=3 [foo,baz]
> http://example.com/?bar=2
http://example.com/?foo=1&bar=2&baz=3 [foo,bar,baz]
> http://example.com/
http://example.com/?foo&bar=2&baz= [foo,baz]
> http://example.com/?bar=2
http://example.com/?abc=1&def=2&baz=foo [foo,bar]
> http://example.com/?abc=1&def=2&baz=foo
http://example.com/?foobar=baz [foo]
> http://example.com/?foobar=baz
http://foo:foo@foo.com:8080/?foo=1&bar=foo [foo]
> http://foo:foo@foo.com:8080/?bar=foo
счет
Это код-гольф , поэтому выигрывает самый короткий ответ (в байтах).
&
появиться где-нибудь, кроме между параметрами?
?
? Также должен ли порядок быть таким же, как был?
&
это часть параметра запроса, он должен быть правильно закодирован как%26
http://foo:&foo=x@foo.com:8080/?foo=1&bar=foo
это разрешено RFC. Это должно сломать кучу существующих решений. : D (Правило userinfo может быть расширено как незарезервированное или pct-escape или вложенные разделы, и вложенные разделы могут иметь &
и =
)