Skip to main content
 首页 » 编程设计

jquery之请求方法是 OPTIONS 而不是 post(现有的 StackExchange post 没有帮助)

2026年07月28日7duanxz

在你说还有另一篇文章( jQuery $.ajax(), $.post sending "OPTIONS" as REQUEST_METHOD in Firefox )之前,是的,它根本没有帮助,所以..

我正在使用 Chrome 开发最新版本,当我尝试像这样将文件发送到远程视频转换器服务的 API 时,它可以工作(一切都在 CoffeeScript 中)让我们将此代码称为 1:

  json_string = getNewSignedParams() 
 
  xhr = new XMLHttpRequest 
  xhr.open('POST', some_url, true) 
  xhr.setRequestHeader("Cache-Control", "no-cache") 
  xhr.setRequestHeader("Content-Type", "application/octet-stream") 
  xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest") 
  xhr.setRequestHeader("X-File-Name", some_file.name || some_file.fileName) 
  xhr.setRequestHeader("X-Query-Params", json_string) 
 
  xhr.send some_file 

上面的代码返回 200 并且可以正常工作。但我的页面上有 jQuery,所以我想我会使用它,所以我有一个上面的 jQuery 版本,如下所示。我们将此代码称为 2:

  $.ajax 
    url:  some_url 
    type: 'post' 
    data: some_file 
    processData: false  
    beforeSend: (xhr) -> 
      xhr.setRequestHeader("Cache-Control", "no-cache") 
      xhr.setRequestHeader("Content-Type", "application/octet-stream") 
      xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest") 
      xhr.setRequestHeader("X-File-Name", some_file.name || some_file.fileName) 
      xhr.setRequestHeader("X-Query-Params", json_string) 
    success: -> 
      console.log 'success' 

我收到此 400(错误请求),表示 Access-Control-Allow-Origin 不允许 Origin http://127.0.0.1:3000。

但是得到这个,如果我取消注释代码 1 并注释掉代码 2 并刷新页面并上传文件,这将成功,然后注释掉代码 1 并取消注释代码 2 并刷新页面并上传文件,现在代码 2 不会抛出 400 Bad request 错误!!

但是,如果我关闭整个浏览器,并加载使用代码 2 的页面,则无论我尝试多少次,上传文件都会出现 400 错误。然后,如果我按照上一段描述的操作,代码 2 就会起作用!

还有一件事,Chrome 控制台中的网络日志显示我使用代码 2 发出的请求将“OPTIONS”作为请求方法。而在代码1中,请求方法是“POST”

有人知道这是怎么回事吗?

请您参考如下方法:

这似乎是一个跨站点脚本问题:URL 实际上可能是问题所在。该 URL 可能与发出请求的脚本位于不同的主机上。出于安全原因,浏览器不允许这样做。