0

我有这个注册用户并被移动应用程序使用的 API 端点:

/mobile/v1/signup

我最近将应用程序从 Django 1.7 迁移到 Django 1.10。在此之后,我开始收到这个奇怪的错误。如果此 API 第二次访问,则返回412 (precondition failed)错误。

我搜索了网络,只要我了解,就会发生以下情况:

第一次,后端Etag在响应中返回。然后,Etag在第二次访问此 API 时将其发送回服务器。如果不匹配,则返回412

我通过手动设置此 API 响应的 Etag 标头的随机值来解决此问题:

response['Etag'] = datetime.now().timestamp()
return response

但我认为这不是一个好的解决方案。

解决这个问题的正确方法是什么?

我的中间件:

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    'msd.middleware.RequestIdMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'apps.dashboard.middleware.DashboardMiddleware',
    'api.middleware.UserAgentMiddleware',
]

用户代理中间件:

class UserAgentMiddleware(MiddlewareMixin):
    # A middleware that adds a "user_agent" object to request
    def process_request(self, request):
        request.user_agent = SimpleLazyObject(lambda: get_user_agent(request))
4

0 回答 0