gpt4 book ai didi

c# - 为什么我的 C# AJAX 请求在 HTTP 下可以正常工作,而在 HTTPS 下却失败?

转载 作者:行者123 更新时间:2023-12-02 00:36:05 25 4
gpt4 key购买 nike

我有一个与 django-allauth 一起使用的 django 应用程序。

我还在生产环境中使用 HTTPS 部署了它。

来自网络浏览器的 AJAX 查询指向 HTTPS 站点,以便使用 POST 登录到“/accounts/login/”,按预期返回 JSON。

问题出在我的 C# 移动代码(基于 Xamarin)。

_client = new HttpClient(handler) {BaseAddress = uri};
_client.DefaultRequestHeaders.Add("X_REQUESTED_WITH", "XMLHttpRequest");

当用作 BaseAddress 的“uri”是 http 并指向我的开发服务器时,一切正常,并且我在响应中收到 JSON。

但是,当 uri 指向我的 https 站点(位于 nginx 和 Gunicorn 后面)时,我会收到一个 HTML 响应。

不知道为什么会发生这种情况。有人有什么想法吗?

最佳答案

好吧,终于找到答案了。天哪,这真是个好东西。

https://serverfault.com/questions/508524/preserve-http-headers-from-django-using-nginx-and-gunicorn向我指出了有趣的 nginx 设置。

标题中的下划线;

默认情况下,nginx 会阻止任何包含下划线的 header ,如下所述:http://wiki.nginx.org/Pitfalls

这让我想知道“为什么来自 Web 浏览器的请求可以工作,但我的 C# 客户端却不能?”,答案很微妙。

在 Chromium 开发者网络选项卡中,我注意到从浏览器发送的 header 是“X-Requested-With”。这被 nginx (我认为)映射到 proxy_pass 部分中的“HTTP_X_REQUESTED_WITH”,这正是 django 正在寻找的。

我对 C# 代码进行了一项更改以使其正常工作。我改变了:

_client.DefaultRequestHeaders.Add("X_REQUESTED_WITH", "XMLHttpRequest");

_client.DefaultRequestHeaders.Add("X-REQUESTED-WITH", "XMLHttpRequest");

它开始工作了。

我希望这对于 future 遇到此问题的人来说仍然存在。

关于c# - 为什么我的 C# AJAX 请求在 HTTP 下可以正常工作,而在 HTTPS 下却失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27481540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com