polling-xhr.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /**
  2. * Module dependencies.
  3. */
  4. var Polling = require('./polling');
  5. var Transport = require('../transport');
  6. var debug = require('debug')('engine:polling-xhr');
  7. /**
  8. * Module exports.
  9. */
  10. module.exports = XHR;
  11. /**
  12. * Ajax polling transport.
  13. *
  14. * @api public
  15. */
  16. function XHR(req){
  17. Polling.call(this, req);
  18. }
  19. /**
  20. * Inherits from Polling.
  21. */
  22. XHR.prototype.__proto__ = Polling.prototype;
  23. /**
  24. * Overrides `onRequest` to handle `OPTIONS`..
  25. *
  26. * @param {http.ServerRequest}
  27. * @api private
  28. */
  29. XHR.prototype.onRequest = function (req) {
  30. if ('OPTIONS' == req.method) {
  31. var res = req.res;
  32. var headers = this.headers(req);
  33. headers['Access-Control-Allow-Headers'] = 'Content-Type';
  34. res.writeHead(200, headers);
  35. res.end();
  36. } else {
  37. Polling.prototype.onRequest.call(this, req);
  38. }
  39. };
  40. /**
  41. * Returns headers for a response.
  42. *
  43. * @param {http.ServerRequest} request
  44. * @param {Object} extra headers
  45. * @api private
  46. */
  47. XHR.prototype.headers = function(req, headers){
  48. headers = headers || {};
  49. if (req.headers.origin) {
  50. headers['Access-Control-Allow-Credentials'] = 'true';
  51. headers['Access-Control-Allow-Origin'] = req.headers.origin;
  52. } else {
  53. headers['Access-Control-Allow-Origin'] = '*';
  54. }
  55. return Polling.prototype.headers.call(this, req, headers);
  56. };