编程语言
首页 > 编程语言> > javascript – 不允许选项方法,CORS到Google云端硬盘

javascript – 不允许选项方法,CORS到Google云端硬盘

作者:互联网

我已经为google驱动器创建了一个脚本,该帖子发布到this document.

我用它来调用它

var request = $.ajax({
            url: "https://script.google.com/macros/s/AKfycbypnRet5l6gUmoGE8oZV2_6da7fImNU12ejHCHCdOambH7UM2CP/exec",
            data: serializedData,
            type: "POST",
            timeout: 10000,
            async: true,
            crossDomain: true
        });

this jsFiddle起作用.

但是,当我在本地项目中实现完全相同的代码时,它不起作用.我收到

XMLHttpRequest cannot load
07002.
No ‘Access-Control-Allow-Origin’ header is present on the requested
resource. Origin ‘07003’ is therefore not allowed
access. The response had HTTP status code 405.

405是“Method not allowed”,当我检查网络流量时,我看到我的本地请求的方法是

Request Method:OPTIONS

但是,对于jsFiddle中的那个,它按预期发布.我已经做了一些研究,看起来好像选项是一个预检请求,当做跨越原点时,我不能让它直接使用post.

非工作OPTIONS请求具有以下标头,这些标头不在Fiddle的工作请求中:

access-control-request-headers:accept, content-type
access-control-request-method:POST

如果我将相同的请求发布到我的服务器(而不是谷歌),我看到它包含请求标题Content-Type:application / json;字符集= UTF-8.

当不允许选项方法时,jsFiddle如何通过?我可以以某种方式让它跳过选项并直接发布?

解决方法:

当请求非简单时,由非简单标头或非简单HTTP方法引起预检OPTIONS请求.

access-control-request-headers:accept,content-type标头意味着您正在尝试发送非简单标头. Accept总是很简单,但Content-Type只有当它具有值application / x-www-form-urlencoded,multipart / form-data或text / plain时才是简单的.必须是您的代码(无论出于何种原因)试图使用Content-Type的非简单值,而Google未提供Access-Control-Allow-Headers响应标头以允许它.

相反,您必须为Content-Type指定一个简单值.您可以通过向$.ajax选项对象添加显式contentType:“application / x-www-form-urlencoded; charset = UTF-8”属性来实现此目的.

标签:jquery,javascript,cors,google-docs
来源: https://codeday.me/bug/20190623/1274128.html