2

Amber Smalltalk IDE 与用 nodejs 编写的服务器一起工作。如何配置允许 XMLHttpRequests 访问同一域的不同端口的服务器?

Amber 的默认访问权限是

http://127.0.0.1:4000/

为了检索和存储 JSON 数据,我想使用一个 couchDB 实例(默认端口是 5984)

| req |

req := XMLHttpRequest new.

req open: 'GET' url: 'http://127.0.0.1:5984/' asynchronous: false.

req send: ''.

问题

由于跨域访问策略,无法访问。

笔记

调用服务器

amber-master\bin\server.bat

服务器在

amber-master\cli\js\amber-cli.js

客户端是 Firefox,它应该允许 XMLHttpRequest 对象可以访问不同的端口,前提是服务器使用“Access-Control-Allow-Origin 标头”指示这一点。

参考

http://www.w3.org/TR/cors/#access-control-allow-origin-response-header

来自 XMLHttpRequest 的 CouchDB 跨域访问?

MKroenert 回答后

我升级到 CouchDB 1.4.0 版并调整了 local.ini 文件以允许 CORS (C:\Program Files\Apache Software Foundation\CouchDB\etc\couchdb\local.ini)

[httpd]
enable_cors = true

[cors]
origins = *

更多关于 http://wiki.apache.org/couchdb/CORS 特别是如何限制访问。

3.12.1。启用 CORS http://docs.couchdb.org/en/latest/configuring.html

然后在重新启动 couchDB 服务后,以下代码片段在 Amber Smalltalk 工作区中运行良好

| req colordict mimeType |
colordict := HashedCollection new.

colordict at: 'red' put: 'rot'.
colordict at: 'blue' put: 'blau'.
colordict at: 'yellow' put: 'gelb'.

req := XMLHttpRequest new.
req open: 'PUT' 
    url: 'http://localhost:5984/components/test2' asynchronous: false.

mimeType :='application/json'.

req setRequestHeader:  'Content-Type'  mimeType: mimeType. 
req send: (JSON stringify: colordict).
req responseText  

'printit' 回馈

'{"ok":true,"id":"test2","rev":"1-8d2356ebdbabdd87a35e0ae3b137bdb5"}
' 
4

1 回答 1

3

如果我正确理解您的问题,您可以尝试127.0.0.1:5984从 Amber 程序中访问资源。

由于问题中未提及,因此该问题有两种可能的情况:

  1. 非 Amber 服务器正在端口上运行5984

    在这种情况下,运行在端口上的特定服务器负责5984提供 Access-Control-Allow-Origin: *标头,而 Amber 服务器不是问题。

  2. 另一个 Amber 服务器正在端口上运行5984

    在这种情况下,我们目前没有实现发送Access-Control-Allow-Origin: *标头。Amber 服务器是一个简单的开发服务器,不应用于部署。

但是,如果存在需要发送此标头的特定用例,我们可以在Amber 邮件列表上讨论此问题,或在GitHub 跟踪器上创建问题并将其标记为功能请求。

于 2013-09-03T15:42:12.630 回答