我有这个API端点,用于注册用户并被移动应用程序使用:
/mobile/v1/signup
我最近将应用程序从Django 1.7迁移到了Django 1.10。在此之后我开始得到这个奇怪的错误。如果第二次访问此API,则会返回412 (precondition failed)
错误。
我在网上搜索,只要我理解,就会发生以下情况:
第一次,后端在响应中返回Etag
。然后,第二次访问此API时,此Etag
将被发送回服务器。如果不匹配,则返回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',
]
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))