我有一个api端点,它将传递主键,然后允许服务器从数据库中删除记录。
我使用来自前端的axios传递请求。
axios.delete(http://localhost:8000/api/ingredients/276/delete).then(res =>的console.log(“删除))
我在服务器上发现它正在调用四个http请求进行删除。
[10/Dec/2017 18:07:15] "OPTIONS /api/ingredients/276/delete HTTP/1.1" 200 0
[10/Dec/2017 18:07:15] "DELETE /api/ingredients/276/delete HTTP/1.1" 301 0
[10/Dec/2017 18:07:15] "OPTIONS /api/ingredients/276/delete/ HTTP/1.1" 200 0
[10/Dec/2017 18:07:16] "DELETE /api/ingredients/276/delete/ HTTP/1.1" 204 0
我认为应该只有一个请求
答案 0 :(得分:0)
TLDR;在您的请求URL中添加一个尾部斜杠,以避免无意义的重定向或从Django网址中删除尾部斜杠,以便它们与您的浏览器发出的请求相匹配。
OPTIONS请求正在发生,因为您的浏览器符合跨域资源共享策略(CORS)。该请求源自与服务器不同的域,因此发送此“飞行前”请求以确保允许该请求。
请求是允许的,因此您的浏览器会跟进DELETE请求,但是,您的URL设置在路由上有斜杠,但您的请求URL却没有。所以你得到301重定向,即位置标题是“/ api / ingredients / 276 / delete /”。您的浏览器还必须通过飞行前OPTIONS请求验证此请求。最后,在第四个请求中,DELETE请求在服务器上以205响应代码完成。
要修复,只需让您的客户端代码在初始请求中附加“/”即可。这将使总数减少到2.或者,您可以从Django URL配置中删除尾部斜杠。如果您的URL是自动构建的,则可以修改路由器:http://www.django-rest-framework.org/api-guide/routers/#simplerouter。
OPTIONS请求不应该花费太多,如果您的JS应用程序与API服务器托管在同一个域中,则不会在您的生产环境中进行。