70 lines
1.2 KiB
JavaScript
70 lines
1.2 KiB
JavaScript
|
|
/**
|
|
* Module dependencies.
|
|
*/
|
|
|
|
var Polling = require('./polling');
|
|
var util = require('util');
|
|
|
|
/**
|
|
* Module exports.
|
|
*/
|
|
|
|
module.exports = XHR;
|
|
|
|
/**
|
|
* Ajax polling transport.
|
|
*
|
|
* @api public
|
|
*/
|
|
|
|
function XHR (req) {
|
|
Polling.call(this, req);
|
|
}
|
|
|
|
/**
|
|
* Inherits from Polling.
|
|
*/
|
|
|
|
util.inherits(XHR, Polling);
|
|
|
|
/**
|
|
* Overrides `onRequest` to handle `OPTIONS`..
|
|
*
|
|
* @param {http.IncomingMessage}
|
|
* @api private
|
|
*/
|
|
|
|
XHR.prototype.onRequest = function (req) {
|
|
if ('OPTIONS' === req.method) {
|
|
var res = req.res;
|
|
var headers = this.headers(req);
|
|
headers['Access-Control-Allow-Headers'] = 'Content-Type';
|
|
res.writeHead(200, headers);
|
|
res.end();
|
|
} else {
|
|
Polling.prototype.onRequest.call(this, req);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Returns headers for a response.
|
|
*
|
|
* @param {http.IncomingMessage} request
|
|
* @param {Object} extra headers
|
|
* @api private
|
|
*/
|
|
|
|
XHR.prototype.headers = function (req, headers) {
|
|
headers = headers || {};
|
|
|
|
if (req.headers.origin) {
|
|
headers['Access-Control-Allow-Credentials'] = 'true';
|
|
headers['Access-Control-Allow-Origin'] = req.headers.origin;
|
|
} else {
|
|
headers['Access-Control-Allow-Origin'] = '*';
|
|
}
|
|
|
|
return Polling.prototype.headers.call(this, req, headers);
|
|
};
|