gpt4 book ai didi

django - nginx、django 和 x_requested_with : request. is_ajax() 返回 False

转载 作者:可可西里 更新时间:2023-11-01 17:12:47 24 4
gpt4 key购买 nike

我的 Django View 中有这段代码:

if request.is_ajax():
if request.method == 'POST':
data = json.loads(request.raw_post_data)

我通过 CURL 发送这个请求:

curl -v -i -H "Content-Type:application/json" -H "X_REQUESTED_WITH:XMLHttpRequest" -X POST -d '{"tweet_id":"189881044923719680", "question_id":"1", "choice_one":"T", "choice_two":"F", "choice_three":"F", "extra_passback":"common cold"}' http://ec[...].compute-1.amazonaws.com/question/answer/

这在我访问我的开发 Django 服务器时有效。在生产环境中,我正在运行 nginx 和 gunicorn。而且 curl 语句不起作用。

request.is_ajax() 返回 False(is_ajax 查找 x_requested_with header )。

我认为这可能与 NGINX 配置有关。但我不确定。我需要更改什么?

最佳答案

尝试将 X_REQUESTED_WITH:XMLHttpRequest 中的下划线更改为破折号:X-REQUESTED-WITH:XMLHttpRequest

我在使用 nginx 时遇到了同样的问题,因为代理从请求中删除了 X_REQUESTED_WITH 字段。默认情况下,nginx 将带有下划线的 header 标记为无效并忽略无效 header 。

您可以使用 nginx 指令在 underscores_in_headers on; 的情况下允许标题中的下划线,或者在 ignore_invalid_headers off; 的情况下不忽略无效的标题。

在我的具体案例中,我使用 python 请求作为客户端,django 作为服务器,nginx 作为代理并解决了我将 X_REQUESTED_WITH 重命名为 X-REQUESTED-WITH 的问题. (Django 在使 header 在 request.META 中可用之前自动将 'HTTP_' 添加到 x-header 名称的开头。)

import requests
headers = {'X-REQUESTED-WITH':'XMLHttpRequest'}
r = requests.post(url, data=payload, headers=headers)

关于django - nginx、django 和 x_requested_with : request. is_ajax() 返回 False,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10339745/

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