vue resource的$.http.post方法怎么会变成OPTIONS方法?

发布于 2022-09-02 15:17:35 字数 902 浏览 14 评论 0

代码如下:

代码

以下是Chrome的网络请求:

Chrome

官方的issue中我也发现了类似的问题,但是我还是没有解决,我试了下,$http.put和$http.delete都变成了OPTIONS方法,后端是使用express构建的REST API,代码如下:

'use strict'

const UserController = require('../controllers/user')

module.exports = app => {
  app.route('/api/users')
    .get(UserController.list)
    .post(UserController.create)

  app.route('/api/users/:uid')
    .get(UserController.get)
    .put(UserController.update)
    .delete(UserController.delete)

  app.param('uid',UserController.getById)
}

后端代码服务通过curl命令测试均能够得到正确的结果,应该不是后端的问题

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

十秒萌定你 2022-09-09 15:17:35

这是跨域问题,先把这个内容看完,否则你这个东西改起来无从下手。

简单来说,就是“非简单请求”在跨域时,浏览器会默认自动帮你发一个OPTIONS请求,到服务器端请求服务器确认该请求的合法性,服务器端必须得有相应的路由处理该请求,并认真返回200响应,然后浏览器才会再次发出正常的、你需要的请求。

解决跨域问题前,先理解跨域,认真面对这个问题,很重要

自演自醉 2022-09-09 15:17:35
http: {
    headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}

在vue上设置以上header。

无风消散 2022-09-09 15:17:35

跨域的情况下 不能随意加http请求header头。否则会先有一次对服务器的先导请求 就是你说的OPTIONS请求。 然后再是正式的请求。 且这个options请求不能被缓存,效率很低,而且后端要配合,不推荐你这么搞。直接用xhr2.0跨域即可。和你们服务器的大哥商量下 换种方案

寻梦旅人 2022-09-09 15:17:35
Vue.http.options.emulateJSON = true
三人与歌 2022-09-09 15:17:35

我的express在3000端口提供了api的服务,但是前端vue开发的时候webpack使用的是8888端口就存在了跨域问题,之前虽然设置了Access-Control-Allow-Origin", "*",但是还是没有注意到发送复杂http请求的时候会首先发送一个OPTIONS用来进行prefilight check,只有该OPTIONS返回200才会接着进行请求.最后我在cnode社区找到了答案.

夜还是长夜 2022-09-09 15:17:35

解决了吗 兄弟

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文