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