我在Node.js的express框架上编写了一个REST API,它适用于来自Chrome的js控制台和URL栏等的请求。我现在正在尝试让它处理来自另一个应用程序的请求,域(CORS)。
第一个由JavaScript前端自动完成的请求是/ api / search?uri =,并且在“预检”OPTIONS请求中显示为失败。
var allowCrossDomain = function(req,res,next) { res.header('Access-Control-Allow-Origin','*'); res.header('Access-Control-Allow-Methods','GET,PUT,POST,DELETE,OPTIONS'); res.header('Access-Control-Allow-Headers','Content-Type,Authorization,Content-Length,X-Requested-With'); // intercept OPTIONS method if ('OPTIONS' == req.method) { res.send(200); } else { next(); } };
和:
app.configure(function () { app.use(express.bodyParser()); app.use(express.methodoverride()); app.use(app.router); app.use(allowCrossDomain); app.use(express.static(path.join(application_root,"public"))); app.use(express.errorHandler({ dumpExceptions: true,showStack: true })); });
从Chrome控制台,我得到这些标题:
请求网址:http://furIoUs-night-5419.herokuapp.com/api/search?uri = http:// localhost:5000 / collections / 1 / documents / 1
请求方法:选项
状态码:200 OK
请求标头
Accept:*/* Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3 Accept-Encoding:gzip,deflate,sdch Accept-Language:en-US,en;q=0.8 Access-Control-Request-Headers:origin,x-annotator-auth-token,accept Access-Control-Request-Method:GET Connection:keep-alive Host:furIoUs-night-5419.herokuapp.com Origin:http://localhost:5000 Referer:http://localhost:5000/collections/1/documents/1 User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.5 (KHTML,like Gecko) Chrome/19.0.1084.56 Safari/536.5
查询字符串参数
uri:http://localhost:5000/collections/1/documents/1
响应头
Allow:GET Connection:keep-alive Content-Length:3 Content-Type:text/html; charset=utf-8 X-Powered-By:Express
这看起来像是缺少由API应用程序发送的正确标头?
谢谢。
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。