HTTP 响应 403。是我的 Apache 配置问题还是我的 Python 对 URL 的 enoding 问题?

Posted

技术标签:

【中文标题】HTTP 响应 403。是我的 Apache 配置问题还是我的 Python 对 URL 的 enoding 问题?【英文标题】:HTTP response 403. Is the problem with my Apache config or my Python enoding of the URL? 【发布时间】:2021-02-07 04:54:20 【问题描述】:

当我访问时

http://my_site.com/api/my_project/submitSearch.php?skills=C+OR+%28C%2B%2B+AND+UML%29

我收到 403 的 HTTP 响应。

重点是我在 Python 中使用 urllib.parse.quote_plus() 编码 skill=C OR (C++ AND UML)

如果我使用skill=(C++ AND UML),那么没有问题。

http://my_site.com/api/my_project/submitSearch.php?skills=%28C%2B%2B+AND+UML%29

我只能假设 URL 触发了一些 Apache 配置规则。我询问了我的 ISP,他们的解决方案是允许从我当前的 IP 地址进行所有访问。但是,我想让每个人都可以访问这个 URL,那么我该如何配置我的 Apache 来允许这个呢?

或者,我是否在 Python 中错误地编码了我的 URL?奇怪的是,当我在 javascript 中使用encodeURIComponent() 时,服务器并没有拒绝请求。

所以,JS/Python 编码是

Python:http://localhost/api/enigma/submitSearch.php?skills=C+OR+%28C%2B%2B+AND+UML%29

JS:       http://localhost/api/enigma/submitSearch.php?skills=C%20OR%20(C%2B%2B%20AND%20UML)

另外,问题出在我的 ISP 上,而不是在 localhost

【问题讨论】:

那么,python 和 javascript 编码的 uri 有何不同? 我会更新问题(感谢并支持您的评论)。 【参考方案1】:

您可以尝试将.htaccess 文件添加到包含Apache 服务器相关目录中的内容的目录(甚至是您网站的根目录)中。这应该授予尝试访问该目录的任何人的访问权限。

 Allow From All
 Satisfy Any
 AllowOverride

你甚至可以像这样包装这些指令:

<Directory "/path/to/mysubdirectory">
 Allow from All
 Satisfy Any
 AllowOverride
</Directory>

使其适用于给定的目录。

【讨论】:

【参考方案2】:

我对 Apache 不熟悉,所以无法为您提供帮助。

要获得与 JavaScript 的 encodeURIComponent 相同的输出,请尝试使用 urllib.parse.urlencodeurllib.parse.quote(而不是 quote_plus)。

query = "skills": "C OR (C++ AND UML)"
query_string = urllib.parse.urlencode(query, safe="-_.!~*'()", quote_via=urllib.parse.quote)
print(query_string)

skills=C%20OR%20(C%2B%2B%20AND%20UML)

【讨论】:

谢谢。它仍在本地主机上工作,但我的 ISP 失败了,但至少 JS 和 Python 现在都生成了相同的编码 URL 所以即使使用skills=C%20OR%20(C%2B%2B%20AND%20UML),您仍然会得到 403? 是的,唉,我愿意 :-(

以上是关于HTTP 响应 403。是我的 Apache 配置问题还是我的 Python 对 URL 的 enoding 问题?的主要内容,如果未能解决你的问题,请参考以下文章

apache 403 forbidden怎么解决

如何绕过浏览器给我的 403 响应代码?

使用 .htaccess 时 Apache 服务器上出现 403 和 500 错误

Apache Forbidden 403错误提示

Apache - 403错误

WAMPSERVER 403 禁止 Apache 2.4.18