- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我们发现 Gingerbread 默认浏览器处理跨域请求的方式与大多数其他浏览器不同。服务器代码使用所有正确的 header 访问控制 header 和 200
状态代码适本地响应 OPTIONS
调用,并响应 POST
使用 200
状态代码和适当的正文进行调用。服务器是用 Node 编写的,使用 Express,并且出于本次测试的目的,它的规模非常小:
var express = require('express');
var http = require('http');
var app = express();
var server = http.createServer(app);
// middleware
app.use(express.logger('dev'));
app.use(function(req, res, next) {
var origin = req.get('origin');
if (origin) {
res.header({
'Access-Control-Allow-Origin': origin,
'Access-Control-Allow-Methods': 'GET,POST,OPTIONS',
'Access-Control-Allow-Headers': 'Content-Type',
'Access-Control-Allow-Credentials': true
});
}
if (req.method === "OPTIONS")
return res.send(200);
if (req.method !== "GET" && req.method !== "POST")
return res.send(405);
next();
});
app.use(express.json());
app.use(app.router);
app.post('/the/route', function(req, res) {
res.json(200, {some: 'json object'});
});
server.listen(process.env.PORT || 3000);
当 Gingerbread 浏览器向/the/route 发出 CORS 请求时,它收到 responseText
的 “OK{some:'json object'}”
。由于我们使用的是 jQuery,并且 Content-Type
响应 header 是 application/json
,因此 jQuery 由于无法解析 json 响应正文而导致请求失败。我们测试的所有其他浏览器都以 "{some:'json object'}"
响应,并按预期进行解析。
那么“OK”从何而来?
我们进一步简化了服务器,完全忽略了 app.router
。也许这就是问题所在。
...
// middleware
app.use(express.logger('dev'));
app.use(function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,POST,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type');
res.header('Access-Control-Allow-Credentials', true);
res.json(200, {some: 'json object'});
});
这一次,令我们惊讶的是,服务器在 Gingerbread 浏览器上响应了 "{some:'json object'}{some:'json object'}"
,并且 "{ some:'json object}"
在所有其他浏览器上。当然,前者仍然不是有效的 json,所以我们仍然遇到了错误。
这是怎么回事?
最佳答案
事实证明,Gingerbread(至少是我们使用的版本)自动连接了 OPTIONS
请求和 POST
请求的响应。此外,对于没有特定正文和状态代码 200
的响应,Express 会自动发送 “OK”
正文。
上面的例子让这一点变得非常明显,但我们并没有将其简化到那个程度。因此,我们正在追寻已知工作版本和失败版本之间 header 等方面最微小的差异。
关于jquery - Gingerbread 浏览器跨域响应串联错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17936277/
这是一个晦涩的问题,我发布它只是为了防止其他人遇到它。 我正在开发 Node/Backbone/Marionette JavaScript Web 应用程序,它使用 snap.js 来隐藏/显示抽屉导
我们发现 Gingerbread 默认浏览器处理跨域请求的方式与大多数其他浏览器不同。服务器代码使用所有正确的 header 访问控制 header 和 200 状态代码适本地响应 OPTIONS 调
This是我的 AES 代码。 在 Gingerbread 下,我在 2.2 上加密数据然后尝试在 2.3 上解密后出现以下错误: Caused by: javax.crypto.BadPaddin
已更新 我在 android 2.3 上遇到渐变位图问题。我读了这个great article并使用下一个选项解码我的位图: BitmapFactory.Options options = new B
我创建了一个自定义的 RatingBar,它可以有 5 种不同的颜色,并且有矩形条,点在星形下方。这是它的样子: 我在几个地方使用这个 View ,在 Android 4.0+ 上一切正常。但是在 G
我正在为 Android 编写一个使用 Fragments 的应用程序,但是当我在 GingerBread 手机上运行该应用程序时,我在这一行中收到错误: inflater.inflate(R.lay
我想扩展 Android 2.3 键盘 (LatinIme)。我从 https://android.googlesource.com/platform/packages/inputmethods/La
我可以毫无问题地连接和使用 Android 3.0+、4.0+ 设备,也可以从 Eclipse 中查看和使用它们。 但是,当我尝试将任何 Froyo/Gingerbread 设备连接到我的电脑时,它甚
如果我在 Gingerbread 模拟器上运行我的代码,它会给我: 网页不可用,下面列出了页面的源代码。 如果我在 ICS 或 JB(物理电话和模拟器)上运行该应用程序,它确实有效: webv
我正在开展一个个人项目,该项目将包括一个主屏幕小部件,该小部件使用来自服务的信息进行更新 - 我正在使用 Android 3.1 平板电脑(实体)和 Android 2.3 模拟手机进行开发。 对于
我在使用浏览器为 Cordova 应用模拟 Android Gingerbread 时遇到问题。你看,我发布了一个使用 Cordova 的 Gingerbread+ 应用程序到 GooglePlay。
根据android documentation : Alternatively, starting with ICE_CREAM_SANDWICH, you can also safely restr
我正在使用 android x86 gingerbread live CD,当我想通过以下方式提供 ip 地址时Alt + F1 su ifconfig "ip address" eth0 up 显示
我想以编程方式检查当前的 android 版本并在版本高于 Gingerbread 时执行一段代码但是当我尝试使用 android.os.Build.VERSION_CODES.GINGERBREAD
我需要知道如何在 Android 中为 Gingerbread 版本实现拖放操作。据我所知,Gingerbread 默认不支持。 我编写的代码:一个 ViewGroup 类来保存动态添加的子项,每个子
我只是想在我的 Activity 中创造一种看起来像 Gingerbread 电池的趋势(见上图) 我正在深入观察 Android git并找到似乎是正确的 Activity 不幸的是,我找不到与 C
起初我认为这是我的应用程序的问题,但它似乎发生在 Gingerbread 模拟器的任何应用程序中(尽管有趣的是,不是主屏幕)。 要复制我的问题,打开 eclipse 并启动 Gingerbread 的
我相信这是来自 androidsnippets.org 的 fragment - 为什么它在 Android 2.3 上不起作用?如何解决? 错误 03-05 23:19:17.479: WARN/S
我正在尝试创建一个其中包含子文件夹的文件夹。我写了这段代码 File myFolder = new File(Environment.getExternalStorageDirectory().get
在我的工作中,我需要从设置“无线和网络”中删除“蓝牙”。所以我不知道第一步是什么。我认为是编辑Android的Kernel或UI。 请问有人可以帮我吗? 最佳答案 除非您正在构建自己的 ROM,否则您
我是一名优秀的程序员,十分优秀!