我有一个令人难以置信的问题,我的团队一直在努力解决它.我们确实缩小了范围,但不是100%.
介绍
我们正在try 在带有Vue前端的Django应用程序中实现LTI.要从URL获取令牌,后端会向URL发出一个包含数据的POST
请求,如果令牌过期或无效,则应收到一个令牌或错误.
设计
浏览器----发布请求--->;查看Server (Django)
--POST请求上的函数-->;Auth URL
问题
Django view发出的post请求超时为504 Gateway Timeout
.如果服务器花费大量时间,这可能是正常的.然而,增加时间并没有帮助,并与postman 一起判断Auth-URL,它工作正常,没有停机.
What I have tried
我们决定调试或诊断这个问题,即为什么代码块在通过shell调用时在函数中工作,而在被POST
请求调用时却不工作.
- 消除了前端,并使用
POSTMAN
向Django服务器发送POST
请求—验证URL超时 - 使用
Django
shell
调用相同的函数--已工作 - 将代码复制到Django之外的一个单独的python文件中
- 对以上所有内容使用相同的虚拟环境
What it appears to be
当调用一个POST函数并在其中发出另一个POST请求时,它就会超时.请注意:如果我在同样的情况下发出一个POST
请求,并且数据无效(比如缺少grant_type
),那么它不会超时.
代码块
auth_request = {
"grant_type": "client_credentials",
"client_assertion_type": "urn:ietf:params:oauth:client-assertion-type:jwt-bearer",
"client_assertion": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlJVbzNJWWlSR0ZDYUhNNEg0S2lid095enAtRU9KWlAweXkwd0g3bk5VOEEifQ.eyJpc3MiOiI2NjkxNmZmYy03YjE5LTQ0MWEtYjE5Zi0yOGQxMzVmYjZjOWYiLCJzdWIiOiI2NjkxNmZmYy03YjE5LTQ0MWEtYjE5Zi0yOGQxMzVmYjZjOWYiLCJhdWQiOiJodHRwczovL2RldmVsb3Blci5ibGFja2JvYXJkLmNvbS9hcGkvdjEvZ2F0ZXdheS9vYXV0aDIvand0dG9rZW4iLCJpYXQiOjE2NTMyODcyNzMsImV4cCI6MTY1MzI4NzMzOCwianRpIjoibHRpLXNlcnZpY2UtdG9rZW4tMDQyZTZhNjctNDA2My00YmQ1LWI2NmQtNTM4YjU2ZTllM2Q1In0.8Jaou965cPTCFv-7yP9iIlH8mMgQjAi0AR2li0KwCcRuHsRZ_1OpbE83bZ06RMXhbjA4crRqTI4zMi8aNfq16Mkg4lXoPj8JiJW7q8b_ZQ1rLZvIojmabehYjpyscHRitFPLibfTYF2mCjUyHqwPgnFRLNrHIVuSvM0BiK56PuYK6SiiSjxu2U3bmJqOHNW2mqx2YYfkaXx2u7ru6CKTiL3KBGzFPYjCUwwWNBdbz4R0g0aHK_l-hhA3oi_pCDZOyqdnyCmGAj5SpZbuZOqrZbQBrqPoEFtXdNDPpHGGwW7IUbbmCtsmE2NqQiYt6snmK-1pbxsLxE0mXrpDqASh4A",
"scope": "https://purl.imsglobal.org/spec/lti-nrps/scope/contextmembership.readonly",
}
response = requests.post(
"https://developer.blackboard.com/api/v1/gateway/oauth2/jwttoken",
data=auth_request,
)
response = response.json()
print(response)