Changes between Version 141 and Version 142 of doc/meek


Ignore:
Timestamp:
Oct 26, 2014, 6:27:32 AM (5 years ago)
Author:
dcf
Comment:

Unredirect some App Engine links.

Legend:

Unmodified
Added
Removed
Modified
  • doc/meek

    v141 v142  
    7474}}}
    7575
    76 [https://developers.google.com/appengine/ Google App Engine] is web application hosting on Google's infrastructure. The front domain can be any Google domain, as far as I can tell, from www.google.com to www.youtube.com to www.orkut.com.
     76[https://cloud.google.com/appengine/docs Google App Engine] is web application hosting on Google's infrastructure. The front domain can be any Google domain, as far as I can tell, from www.google.com to www.youtube.com to www.orkut.com.
    7777
    7878There are quotas for unpaid apps:
    79  * https://developers.google.com/appengine/docs/quotas
     79 * https://cloud.google.com/appengine/docs/quotas
    8080You can pay to get higher quotas:
    81  * https://developers.google.com/appengine/docs/pricing
     81 * https://cloud.google.com/appengine/pricing
    8282The cost is $0.12 per gigabyte, with 1 gigabyte free each day. There are other potential ancillary costs, having to do with things like how often your app is reloaded.
    8383
     
    437437== Ideas ==
    438438
    439 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/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:
     439An 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://cloud.google.com/appengine/docs/go/requests#Go_The_request_timer requests must be handled within 60 seconds], and 2) [https://cloud.google.com/appengine/docs/go/requests#Go_Responses App Engine doesn't support streaming requests] of this kind:
    440440 "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.
    441441 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."
     
    446446[[GoAgent]] is similar in that it also uses App Engine as a middleman.
    447447
    448 [https://github.com/zlyuan/GTor GTor] a.k.a. CloudEntry is based on !GoAgent and uses App Engine. It [https://github.com/zlyuan/GTor/blob/460d2c78ce1ebc88a0a0843e93259003fc18dc4a/GTor-1.0.1/upload/python/wsgi.py uses App Engine's socket support] to make two outgoing connections from App Engine: one to the relay and one back to the client. For that reason, the client can't be behind NAT (just like with [https://crypto.stanford.edu/flashproxy/ flash proxy]). The sockets can't live longer than 60 seconds because of [[#GeneralnotesaboutAppEngine|App Engine limits]], so after that your connection is broken and you have to start again. GTor works as an upstream HTTPProxy for Tor.
     448[https://github.com/zlyuan/GTor GTor] a.k.a. CloudEntry is based on !GoAgent and uses App Engine. It [https://github.com/zlyuan/GTor/blob/460d2c78ce1ebc88a0a0843e93259003fc18dc4a/GTor-1.0.1/upload/python/wsgi.py uses App Engine's socket support] to make two outgoing connections from App Engine: one to the relay and one back to the client. For that reason, the client can't be behind NAT (just like with [https://crypto.stanford.edu/flashproxy/ flash proxy]). The sockets can't live longer than 60 seconds because of App Engine limits, so after that your connection is broken and you have to start again. GTor works as an upstream HTTPProxy for Tor.
    449449
    450450[https://github.com/getlantern/flashlight Flashlight] from Lantern uses the Host header trick with CloudFlare. Like !GoAgent, it uses local MITM for HTTPS connections and makes the actual HTTP requests from the remote server.