JQuery POST 请求转换为 OPTIONS。为啥?
Posted
技术标签:
【中文标题】JQuery POST 请求转换为 OPTIONS。为啥?【英文标题】:JQuery POST request transforming into OPTIONS. Why?JQuery POST 请求转换为 OPTIONS。为什么? 【发布时间】:2011-06-07 01:36:34 【问题描述】:我明确指定了一个 POST,但我没有在请求中看到发布数据,并且更多地指定它有一个 OPTIONS。
响应应该是一个 html,以表格格式指定匹配用户到 Query。 我正在尝试发布并阅读 html 以创建一个自动完成输入框。
这是 Jquery 代码:
$.post('https://internal.company.com/data/displayUserList',
Email: "", Name: "%GEORGE%",
function(responseText, textStatus)
console.log("Response:\n" + responseText + textStatus)
);
FireBug1.6.1 (Firefox) 捕获的请求
OPTIONS /data/displayUserList HTTP/1.1
Host: internal.company.com
User-Agent: Mozilla/5.0 Firefox/3.6.8
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Origin: null
Access-Control-Request-Method: POST
【问题讨论】:
在 jQuery on SE 中有很多相关的问题。请参阅“相关”此处讨论可能的解决方案:***.com/questions/2699277/post-data-to-jsonp 【参考方案1】:如果您违反same origin policy 限制,可能会发生这种情况。 Access-Control-Request-Method
请求标头让我认为是这种情况。我看到您在发布请求中指定了完整地址 https://internal.company.com/data/displayUserList
。确保托管此脚本的页面也来自https://internal.company.com
。最好使用相对地址:
$.post('/data/displayUserList', Email: "", Name: "%GEORGE%" ,
function(responseText, textStatus)
console.log("Response:\n" + responseText + textStatus);
);
【讨论】:
是的。我正在尝试在另一个网页中发布 URL,但***域是相同的“company.com”,我会检查“document.domain”是否相同。我还注意到,当从浏览器触发“internal.company.com/data/displayUserList”时,发送的 cookie 信息很少。有没有办法可以捕获它们并将其与此请求一起发送? 协议一样吗?请注意,HTTP 与 HTTPS 违反了相同的来源策略。就 cookie 而言,如果这些 cookie 设置了与***域相同的域属性,它们将随 AJAX 请求自动发送,以便它们可以在这些域之间共享。 是的,协议是 HTTPS。我注意到除了 OPTIONS 问题之外没有提取 cookie。我应该更改通话中的任何内容吗? @hashg,域必须匹配:https://internal.company.com
和 https://company.com
不相同,违反了政策。请查看我在答案中链接到的***文章,并确保域和子域完全匹配。否则你的 AJAX 调用将永远失败。【参考方案2】:
如果您尝试调用另一个域中的不同服务器,那么克服此问题的策略应该驻留在后端,以使服务器允许来自不同前端域的调用,在这种情况下,您不应该破坏您的head 试图在前端进行调整。
【讨论】:
以上是关于JQuery POST 请求转换为 OPTIONS。为啥?的主要内容,如果未能解决你的问题,请参考以下文章
VueJS 2 Cli 使用开发服务器将 POST 转换为 GET 请求