- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在开发一项新服务,我在 C++ 应用程序中构建了一个 REST API。 C++ 应用程序监听特定端口并接收 HTTP/S 流量,处理发送的内容,然后发回 HTTP 响应。
我的想法是,我将拥有能够在 C++ API 中发布 REST API 的不同库。我可以从任何地方和任何地方收到请求,所以它可能是另一种软件,例如通过 CURL,或者来自浏览器的 POST 请求。
在我开发一个将与 Javascript 一起使用以通过 AJAX 帖子发送 C++ API 请求的库之前,API 一直在工作。
因为我正在从一个网站向另一个域发送 AJAX 帖子,所以我必须使用 CORS。当我第一次开始设计这个时,我使用的是 Chrome,我遇到了一个问题,即 Chrome 会发送一个 HTTP OPTIONS 请求,而我会以 403 方法不允许作为响应,因为我当时并不知道这一点。我对此进行了调查,发现需要什么,然后让它开始工作,这样 Chrome 就会发送 OPTIONS 请求,C++ 应用程序会发送 200 OK,然后 Chrome 随后会发送实际的 AJAX POST。
这在 Chrome 中完全有效,但是,在 Internet Explorer 和 Firefox 中测试时,浏览器发送 OPTIONS,C++ 应用程序发回 200 OK,但随后两个浏览器都没有发送实际的 POST 请求。
以下是来自 Chrome 和 Firefox 的请求 header 和响应 header 。
Chrome 请求 header
Request URL: http://192.168.1.96:500/initialise
Request Method: OPTIONS
Remote Address: 192.168.1.96:500
Referrer Policy: no-referrer-when-downgrade
Provisional headers are shown
Access-Control-Request-Headers: authorisation-token,device_id,session_id
Access-Control-Request-Method: POST
Origin: http://localhost
User-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Mobile Safari/537.36
Chrome 响应 header
Access-Control-Allow-Headers: *
Access-Control-Allow-Methods: POST, OPTIONS
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: session_id
Allow: POST,OPTIONS
Content-Length: 0
Content-Type: application/json
Status Code: 200 OK
Firefox 请求 header
Accept: text/html,application/xhtml+xm…plication/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language: en-GB,en;q=0.5
Access-Control-Request-Headers: authorisation-token,device_id,session_id
Access-Control-Request-Method: POST
Connection: keep-alive
Host: 192.168.1.96:500
Origin: http://localhost
Referer: http://localhost/_js/
User-Agent: Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/64.0
Request URL:http://192.168.1.96:500/initialise
Request method:OPTIONS
Remote address:192.168.1.96:500
Firefox 响应 header
Access-Control-Allow-Headers: *
Access-Control-Allow-Methods: POST, OPTIONS
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: session_id
Allow: POST,OPTIONS
Content-Length: 0
Content-Type: application/json
Status code:200
下面是我如何处理 ajax 请求的引用:
var url = "http://192.168.1.96:500/";
url += api_endpoint;
$.ajax({
type: "POST",
url: url,
async: true,
headers: {
"authorisation-token": app.api_key,
"session_id": app.cookie,
"device_id": app.device_id
},
data: postArray,
crossDomain: true,
success: function(object, status, xhr){
if (api_endpoint === "initialise")
{
app.cookie = xhr.getResponseHeader("session_id");
setCookie("session_id", app.cookie, true);
}
if (callbackResult !== null)
{
callbackResult(object);
}
},
error: function(xhr)
{
console.error("Status: " + xhr.status);
console.error("Status Text:" + xhr.statusText);
console.error("Response Text: " + xhr.responseText);
if (callbackResult !== null)
{
callbackResult(xhr);
}
}
});
我正在使用 Jquery 执行 ajax 发布。
谁能看出为什么在这种情况下 Firefox 不会在 200 OK 之后发送实际请求,请求和响应看起来是一样的,这在 Google Chrome 中完美运行。
最佳答案
感谢@Manoj Purohit 的评论,我已经想通了,可以再次检查控制台。我这样做了,发现有一些警告已被过滤,我必须添加以下 header 以使其在 Firefox 和 Internet 中工作——奇怪的是它在 Chrome 中被接受。
this->addHeader("Access-Control-Allow-Headers", "authorisation-token, device_id, session_id");
关于http - Firefox 和 Internet Explorer 在 OPTIONS 请求后收到 200 OK 后不发送 POST 请求 - 在 Chrome 中工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53806487/
像其他人一样,我需要在 Internet Explorer 6 和 Internet Explorer 7 上测试我的代码。现在,Internet Explorer 8 为开发人员提供了一些很棒的工具
这个问题在这里已经有了答案: 10年前关闭。 Possible Duplicate: Running Internet Explorer 6, Internet Explorer 7, and Int
作为一名开发者,我发现新的 Internet Explorer 版本完全是一场噩梦。我关闭了 Windows 功能,但无法安装 Internet Explorer 10 。它说它已经安装,但事实并非如
我通过Blogger有一个博客-http://www.concertexperiencepeeps.com。每当我尝试通过Internet Explorer查看我的博客时,该页面都会崩溃,并且不允许我
这个问题在这里已经有了答案: 10年前关闭。 Possible Duplicate: Running Internet Explorer 6, Internet Explorer 7, and Int
我正在使用新的Internet Explorer 11开发人员工具将文档模式切换为“8”,但条件注释仍然被忽略,也就是说,它们没有被正确解析并且表现得像普通注释。因此,浏览器不会请求/加载条件注释内的
我在我的一个站点上遇到 Internet Explorer 6 问题,我真的希望我安装它而不是 Internet Explorer 7。有没有一种快速的方法来做到这一点? 最佳答案 下载Microso
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and t
如何访问 Internet Explorer 运行实例的经典 Internet Explorer COM 自动化对象?也就是说,如果我在多个窗口中打开 Internet Explorer,如何从 Po
string filename = Server.UrlPathEncode(Path.GetFileName(_Filename))); Response.AddHeader("Content-Di
当我尝试使用 Apache 2.2 在 Windows7(64 位)上的 IE9 或 IE10 中打开 localhost 时,解析 URL 需要很长时间。其他浏览器没有问题并立即解析 URL,只有
我有一个批处理文件,必须启动 Internet Explorer 并打开 www.google.com .当整个页面加载完成时,它应该终止 IE 进程,即关闭该系统中的所有 IE 实例。我的批处理文件
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6 个月前关闭。 Improve t
基本上,无论我使用 IE 访问哪个网站,我都可以看到那些黑色/白色形状,一旦我将鼠标移到它们上,它们就会消失。 想知道是否有人知道可能导致这种情况的原因? 另外:http://imageshack.c
我检查了所有注册表,但找不到所有已安装扩展的列表。 此时,IE 扩展/加载项的任何一般位置都会有所帮助。 最佳答案 取自 here : 浏览器帮助对象 - 旨在增强浏览器功能的浏览器插件。 条目可以在
我在Internet Explorer 8的LAN设置中使用了2个不同的自动配置脚本地址。在工作过程中,我需要经常在它们之间进行切换。每次我必须手动进行。 有没有一种方法可以通过脚本等自动执行操作,以
这是一个两部分的问题。我正在构建一个网页,我需要知道: 有没有办法检测 IE 是否启用了平滑滚动(如果是,如何)? 有没有办法强制 IE 关闭我网页的平滑滚动功能? 明确地说,我不是在问如何关闭整个计
我想强制 IE10 在 IE9 模式下从我的 Intranet 呈现某些站点。 我曾尝试使用本地兼容性列表但无济于事(%LocalAppData%\Microsoft\Internet Explore
我在使用 IE8 时遇到问题,其中带有查询字符串的 URL 在下载时被破坏。 特别是,像这样的 URL http://domain.com/software/Software%202.1%20Beta
我有一个非常基本的页面,其中包括 元素。当我提交带有选定文件的表单时,服务器会响应一个在 Excel 中打开的电子表格(“新窗口”)。这种行为意味着初始屏幕和输入元素在 IE 中仍然可见。如果我更改所
我是一名优秀的程序员,十分优秀!