相关疑难解决方法(0)

分号作为URL查询分隔符

虽然强烈建议(W3C源,通过维基百科)Web服务器支持分号作为URL查询项的分隔符(除了&符号),但似乎通常不会遵循.

例如,比较

        http://www.google.com/search?q=nemo & OE = UTF-8

        http://www.google.com/search?q=nemo ; OE = UTF-8

结果.(在后一种情况下,分号是,或者在撰写本文时,被视为普通的字符串字符,就像网址是:http://www.google.com/search?q = nemo %3B oe = utf-8)

虽然我尝试了第一个URL解析库,但表现良好:

>>> from urlparse import urlparse, query_qs
>>> url = 'http://www.google.com/search?q=nemo;oe=utf-8'
>>> parse_qs(urlparse(url).query)
{'q': ['nemo'], 'oe': ['utf-8']}
Run Code Online (Sandbox Code Playgroud)

接受分号作为分隔符的当前状态是什么,哪些是潜在的问题或一些有趣的注释?(从服务器和客户端的角度来看)

url webserver parsing http query-string

51
推荐指数
3
解决办法
3万
查看次数

没有url解码的Nginx pass_proxy子目录

我需要写一个nginx位置指令来代理请求子目录到另一个服务器保留urlencoding删除子目录前缀.

这是一个人为的例子 - 请求如下:

http://1.2.3.4/api/save/http%3A%2F%2Fexample.com

应该通过

http://abcd.com/save/http%3A%2F%2Fexample.com

我尝试了几种不同的方法.以下是其中几个:

  1. 这个SO问题

location /api/ { rewrite ^/api(/.*) $1 break; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_pass http://abcd.com; } 但它解码了字符串,所以http://abcd.com得到/save/http://example.com

  1. 来自另一个SO问题

location /api/ { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_pass http://abcd.com; }

但它保留子目录,所以http://abcd.com得到/api/save/http%3A%2F%2Fexample.com.

需要的是中间的某个地方.谢谢!

UPD:这是nginx bug跟踪器中的一张

nginx

26
推荐指数
1
解决办法
1万
查看次数

标签 统计

http ×1

nginx ×1

parsing ×1

query-string ×1

url ×1

webserver ×1