JQuery POST请求变成OPTIONS请求,为什么?

7

我明确指定了一个POST请求,但是在请求中没有看到POST数据,而且还指定了OPTIONS。

响应应该是一个HTML,以表格格式指定与查询匹配的用户。 我正在尝试发布并读取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中,关于这个问题有很多相关的问题。请查看“相关”部分。可能的解决方案在这里讨论:https://dev59.com/WnE85IYBdhLWcg3wmEtW - OneWorld
2个回答

10

如果您违反了同源策略的限制,就可能会发生这种情况。根据Access-Control-Request-Method请求头,我认为就是这种情况。我看到您在POST请求中指定了完整地址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”相同。此外,我注意到当从浏览器触发“https://internal.company.com/data/displayUserList”时发送了一些cookie信息。有没有办法我可以捕获它们并将其与此请求一起发送? - hashg
协议是相同的吗?请注意,HTTP与HTTPS违反了同源策略。就Cookie而言,如果这些Cookie已经设置了一个等于顶级域名的域属性,那么它们将自动随着AJAX请求一起发送,以便在这些域之间共享。 - Darin Dimitrov
是的,协议是HTTPS。我注意到除了OPTIONS问题之外,cookie没有被捕获。我需要在调用中更改任何内容吗? - hashg
@hashg,域名必须匹配:https://internal.company.comhttps://company.com不同,违反了策略。请查看我在回答中链接的维基百科文章,并确保域名和子域名完全匹配。否则,您的AJAX调用将始终失败。 - Darin Dimitrov

0

如果您正在尝试调用另一个域中的不同服务器,则克服此问题的策略应该驻留在后端,以使服务器允许从不同的前端域进行调用,在这种情况下,您不应该费心在前端进行调整。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接