chrome应用程序w/node.js后端。应用程序正在发出期权请求以代替卖出

chrome应用程序w/node.js后端。应用程序正在发出期权请求以代替卖出,node.js,localhost,cors,google-chrome-app,Node.js,Localhost,Cors,Google Chrome App,我正在开发一个chrome应用程序,最终向node.js服务器发送了一个PUT。我的GET逻辑运行良好。然而,我的看跌期权被劫持为期权请求。我的要求是 http://localhost:4000/whatever 我读到有关期权通行证的信息,请求允许进行看跌期权。我的印象是,浏览器在请求CORS时会发出选项,但我没有意识到chrome应用程序也会为我这样做 应用程序这样做是因为我没有,我应该这样做,还是这是一个SOP,chrome会发出期权请求,而我只是发出我的看跌期权来触发它 我的PUT从未

我正在开发一个chrome应用程序,最终向node.js服务器发送了一个PUT。我的GET逻辑运行良好。然而,我的看跌期权被劫持为期权请求。我的要求是

http://localhost:4000/whatever
我读到有关期权通行证的信息,请求允许进行看跌期权。我的印象是,浏览器在请求CORS时会发出选项,但我没有意识到chrome应用程序也会为我这样做

应用程序这样做是因为我没有,我应该这样做,还是这是一个SOP,chrome会发出期权请求,而我只是发出我的看跌期权来触发它

我的PUT从未到达服务器。我曾尝试在卖出期权之前发行自己的期权,但到目前为止没有任何效果。选项请求将其发送到服务器(默认服务器或我的服务器),但对话到此结束

在服务器上,我为满足选项请求所做的一切如下:

case 'OPTIONS':
   res.writeHead(200, {'Access-Control-Allow-Methods': 'OPTIONS, TRACE, GET, HEAD, POST, PUT',
                       'Access-Control-Allow-Origin': "*"});
   break;
当我尝试发出我自己的OPTIONS&PUT请求时,我使用的是单独的XMLHttpRequest对象。我看不出从“选项到放置”的权限转移是在哪里进行的。

这称为“预飞行”,如果符合特定条件,浏览器必须预飞行跨源请求。例如,如果请求方法不是GET或POST,则浏览器必须预先发出请求。您需要在服务器中正确处理这些选项(飞行前)请求

据推测,您的页面托管在4000以外的端口上,对4000端口的调用被认为是跨源的(在除IE以外的所有浏览器中)。不要自己发布选项请求。然后Chrome将预先发送您的请求。您的服务器必须正确响应。浏览器将为您处理对此选项请求的响应,然后,如果您的服务器正确处理了选项请求,则按预期发送看跌期权


有。如果您计划在任何跨源环境中工作,您应该阅读本文。它将为您提供理解正确处理此类环境所需概念所需的大部分知识。

我的“页面”是一款chrome应用程序。它通过在我的硬盘上安装来承载。在传统意义上,它不是通过http传输的。我读过MozDev网站和html5rocks,了解飞行前的情况。目前尚不清楚的是,“应用程序”与传统浏览器会话有何不同。我点击的唯一服务器是我的本地机器上端口4000上的测试服务器。以下是请求头:访问控制请求头:来源,内容类型访问控制请求方法:放置来源:chrome-extension://cenckmcibjncgjbokklgfkldnikknleb 用户代理:Mozilla/5.0(X11;Linux x86_64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/28.0.1500.95 Safari/537.36我收到并尝试响应此请求。我不能得到的是选项请求的响应头,因为我从来没有发出过那个请求——是系统为我发出的。我所拥有的只是我试图回复的内容,这应该与缺少的标题相同,但有消息告诉我这就是问题所在。我正在查找与选项请求(包括响应)相关的所有标题。发送此请求的人或内容没有区别。它应该可以在Chrome开发者工具的网络标签下找到。根据调试器,我给出的是我所有的。选项请求状态为挂起。这就是我不明白的。我回答了我在第一个问题中所展示的内容。我知道这段代码是被执行的,因为我将它包装在console.log中。我的回复应该是res.writeHead(200,…),但我不知道发生了什么事。如果我等待足够长的时间,选项请求会自动重复,我再次回复,但它没有结果。我只是想知道为什么我的回复没有结果。我忘了做一个res.end();现在我发现“请求头字段包含/类型不被访问控制允许头所允许”失败。我将对此进行研究。感谢您的帮助。