Changes between Version 100 and Version 101 of doc/meek


Ignore:
Timestamp:
Aug 13, 2014, 11:06:32 AM (5 years ago)
Author:
dcf
Comment:

Update some links.

Legend:

Unmodified
Added
Removed
Modified
  • doc/meek

    v100 v101  
    311311== Ideas ==
    312312
    313 An idea to reduce overhead and eliminate polling is to use HTTP as a long-lived bidirectional channel, sending upstream data in a POST body and receiving data in the response body simultaneously. (That is, you send a POST with no Content-Length, the server reads your header and forwards the request to the relay, the server writes back a header, and after that you use the connection as an ordinary socket, with upstream and downstream data interleaved.) An implementation of this idea is at !https://www.bamsoftware.com/git/meeker.git. The idea doesn't work with App Engine, for two reasons. 1) [https://developers.google.com/appengine/docs/go/#Go_The_request_timer requests must be handled within 60 seconds], and 2) [https://developers.google.com/appengine/docs/go/#Go_Responses App Engine doesn't support streaming requests] of this kind:
     313An idea to reduce overhead and eliminate polling is to use HTTP as a long-lived bidirectional channel, sending upstream data in a POST body and receiving data in the response body simultaneously. (That is, you send a POST with no Content-Length, the server reads your header and forwards the request to the relay, the server writes back a header, and after that you use the connection as an ordinary socket, with upstream and downstream data interleaved.) An implementation of this idea is at !https://www.bamsoftware.com/git/meeker.git. The idea doesn't work with App Engine, for two reasons. 1) [https://developers.google.com/appengine/docs/go/requests#Go_The_request_timer requests must be handled within 60 seconds], and 2) [https://developers.google.com/appengine/docs/go/requests#Go_Responses App Engine doesn't support streaming requests] of this kind:
    314314 "App Engine calls the handler with a Request and a !ResponseWriter, then waits for the handler to write to the !ResponseWriter and return. When the handler returns, the data in the !ResponseWriter's internal buffer is sent to the user.
    315315 This is practically the same as when writing normal Go programs that use the http package. The one notable difference is that App Engine does not support streaming data in response to a single request."
     
    318318Instead of sending TLS with a front SNI, think about sending TLS with no SNI at all. (It might look like a really old browser or a non-browser daemon or something.) Then the censor doesn't have an SNI to match on, and has the choice of blocking an entire IP address (which may virtually host many domains) instead of a single SNI. This idea could be useful in deployment with a CDN, which though it may have thousands of domains, is blockable if we choose just one of those domains as a front. See #12208.
    319319
    320 The App Engine [https://developers.google.com/appengine/docs/go/channel/ Channel API] provides a way to have long-lived push connections to the client, subject to a restricted interface. (HTTP handlers are otherwise [https://developers.google.com/appengine/docs/go/#Go_The_request_timer required to finish within 60 seconds].) The client could use HTTP request bodies to send data, and a channel to receive, and remove the need for polling. It would require us to reimplement the [https://developers.google.com/appengine/docs/go/channel/javascript client JavaScript channel API] in order to make use of the particular [https://en.wikipedia.org/wiki/Comet_%28programming%29 Comet]-based protocol.
     320The App Engine [https://developers.google.com/appengine/docs/go/channel/ Channel API] provides a way to have long-lived push connections to the client, subject to a restricted interface. (HTTP handlers are otherwise [https://developers.google.com/appengine/docs/go/requests#Go_The_request_timer required to finish within 60 seconds].) The client could use HTTP request bodies to send data, and a channel to receive, and remove the need for polling. It would require us to reimplement the [https://developers.google.com/appengine/docs/go/channel/javascript client JavaScript channel API] in order to make use of the particular [https://en.wikipedia.org/wiki/Comet_%28programming%29 Comet]-based protocol.
    321321
    322322Paid apps can create outbound sockets. I don't think it helps us because then the web app would be responsible for managing the session id mapping.