为什么我的 C# AJAX 请求使用 HTTP 而使用 HTTPS 失败
本文关键字:HTTPS 失败 HTTP 我的 AJAX 请求 为什么 | 更新日期: 2023-09-27 18:34:11
我有一个使用django-allauth的django应用程序。
我还在生产环境中使用 HTTPS 部署了它。
来自 Web 浏览器的 AJAX 查询指向 HTTPS 站点,以便使用 POST 登录 "/accounts/login/" 按预期返回 JSON。
问题出在我的 C# 移动代码(基于 Xamarin)上。
_client = new HttpClient(handler) {BaseAddress = uri};
_client.DefaultRequestHeaders.Add("X_REQUESTED_WITH", "XMLHttpRequest");
当用作基址的"uri"是http并指向我的开发服务器时,一切正常,我在响应中返回JSON。
但是,当 uri 指向我的 https 站点(位于 nginx 和 gunicorn 后面)时,我得到了一个 HTML 响应。
不知道为什么会这样。 有人有什么想法吗?
好的,终于找到了答案。 男孩是个好东西。
https://serverfault.com/questions/508524/preserve-http-headers-from-django-using-nginx-and-gunicorn 向我指出了有趣的nginx设置。
underscores_in_headers继续;
默认情况下,nginx 会阻止任何包含下划线的标头,如下所述: http://wiki.nginx.org/Pitfalls
这让我想知道"为什么来自 Web 浏览器的请求有效,而我的 C# 客户端不起作用?",答案是微妙的。
在Chromium开发者网络选项卡中,我注意到从浏览器发送的标头是"X-Request-With"。 这是nginx(我认为)映射到proxy_pass部分中的"HTTP_X_REQUESTED_WITH",这正是django正在寻找的。
我在 C# 代码中进行了一项更改以使其正常工作。 我改变了:
_client.DefaultRequestHeaders.Add("X_REQUESTED_WITH", "XMLHttpRequest");
自
_client.DefaultRequestHeaders.Add("X-REQUESTED-WITH", "XMLHttpRequest");
它开始工作。
我希望这能留给未来有这个问题的人。