This is a great addition, and it ensures that developers can control the
caching behavior at all levels of the stack (makeRequest, getProxyUrl, and
now rewritten content).

On Wed, Jul 16, 2008 at 1:43 PM, Louis Ryan <[EMAIL PROTECTED]> wrote:

> Hi,
>
>
> Now that we've had some experience with the rewriter I'd like to propose an
> additional feature to allow developers to control the caching behavior of
> the open-proxy through which rewritten content is directed. The new param
> 'expires' can have a value of either HTTP or a positive integer that
> represents the TTL of the content in the browser cache and in any cache the
> open-proxy may use internally. If the value is HTTP then the cache-headers
> on the original content are respected by the cache used by the proxy and
> carried through to the browser.
>
> This gives gadget developers finer-grained control over their contents TTL
> while still getting the latency benefit of the cache. It is also useful for
> developers that host content at sites where they dont have explicit control
> of the cache-headers. Containers are still free to enforce a minimum TTL if
> they so chose and should document it for developers.
>
> <Optional feature="content-rewrite">
>         <Param name="expires">86400</Param>
>         <Param name="include-tags">script,link,img,embed</Param>
>         <Param name="include-pattern">.*</Param>
>          <Param name="exclude-pattern"></Param>
> </Optional>
>
> Thoughts?
>
> -Louis
>
>
> On Wed, Jun 4, 2008 at 4:18 AM, Louis Ryan <[EMAIL PROTECTED]> wrote:
>
>> Yes, for this kind of security you should just use a regex to exclude the
>> swf from the proxy. Many apps use swf's for simple animations and other non
>> security sensitive displays for which proxying would be perfectly fine. If
>> you want to use a secure & trusted communication channel you may want to use
>> the flash to js bridge to call signed makeRequest or do the equivalent
>> yourself in flash.
>>
>>
>> On Tue, Jun 3, 2008 at 4:08 AM, Kevin Brown <[EMAIL PROTECTED]> wrote:
>>
>>> I think the best option is probably to just opt out for the rewriting of
>>> the swf files. Automatic rewriting flash isn't very practical anyway due to
>>> IE's limitations, so use of gadgets.flash.embedFlash would be the
>>> recommended way to handle this.
>>>
>>>
>>> On Mon, Jun 2, 2008 at 5:57 PM, Luke <[EMAIL PROTECTED]> wrote:
>>>
>>>>
>>>> This relates more to implementation of the proxying server itself
>>>> rather than the gadget spec... I would like to see that the proxying
>>>> be useful for people who do flash development. The proxying, if not
>>>> implemented with flash in mind, will be a security hole for flash
>>>> developers. We use crossdomain.xml as a security mechanism to prevent
>>>> unwanted access and including *.gmodules.com, *.msappspace.com, or
>>>> *.hi5modules.com as an allowed domain in our crossdomain isn't secure
>>>> if those domains proxy arbitrary urls. We may as well allow access
>>>> from all domains.
>>>>
>>>> I see 2 ways we can get around the problem:
>>>>
>>>> 1) Create urls for proxied content using the original domain as part
>>>> of the subdomain. Thus, something a url like
>>>> http://static.myminilife.com/someswf.swf
>>>> would be cached at static.myminilife.gmodules.com/... . Thus, we can
>>>> allow the static.myminilife.gmodules.com specifically in the
>>>> crossdomain file. The proxying server would have to ensure that the
>>>> subdomain is the same as the url being proxied.
>>>>
>>>> 2) Do filtering of the request's http host against the proxied url
>>>> being asked for. With that in place, then I can create a CNAME
>>>> pointing one of our subdomains to the server doing the proxying. Ie,
>>>> gmodules.myminilife.com points to gmodules.com. When I have a swf at
>>>> static.myminilife.com/someswf.swf, I can replace that url with
>>>> gmodules.myminilife.com, which will retrieve the content from the
>>>> proxying server. Like above, The proxying server has to ensure that
>>>> the request's http host is the same as the content being proxied.
>>>>
>>>> On May 28, 10:21 am, "Louis Ryan" <[EMAIL PROTECTED]> wrote:
>>>> > Glad to hear it. Currently the implementation in Shindig is a work in
>>>> > progress though it already provides useful functionality. In
>>>> particular
>>>> > because the configurable rewriting rules need to carry across a chain
>>>> of
>>>> > requests emanating from a gadget we need to carry the ability to
>>>> lookup the
>>>> > rule through that chain, this is something that is not yet
>>>> implemented. Nor
>>>> > for that matter is the ability to include or exclude URLs be regex
>>>> though
>>>> > that will be added soon.
>>>> >
>>>> > On Wed, May 28, 2008 at 1:12 AM, Kevin Brown <[EMAIL PROTECTED]> wrote:
>>>> > > On Wed, May 28, 2008 at 12:39 AM, Paul Walker <[EMAIL PROTECTED]>
>>>> wrote:
>>>> >
>>>> > >>  Great news.  Without caching rules, we are definitely prepared to
>>>> > >> support this.
>>>> >
>>>> > >> However, speaking of Shindig and the process of proposals…since you
>>>> have
>>>> > >> contributed the code to Shindig, is it just expected to be approved
>>>> as a
>>>> > >> proposal without voting?
>>>> >
>>>> > > No -- Shindig will always implement whatever the standard specifies,
>>>> so if
>>>> > > the standard deviates from Louis' current proposal Shindig will be
>>>> modified
>>>> > > to support it. Shindig is a useful test bed for ironing out issues
>>>> in a
>>>> > > proposal before they are finalized, with enough users to easily test
>>>> a wide
>>>> > > range of container deployment needs.
>>>> >
>>>> > >>   And on the specifics of what has been contributed to Shindig,
>>>> what does
>>>> > >> it actually do?
>>>> >
>>>> > > What Louis has contributed so far rewrites links as proposed on this
>>>> > > thread. The content is examined for any links and those links are
>>>> rewritten
>>>> > > to go through a caching proxy. Several optimizations are done to try
>>>> to
>>>> > > reduce http overhead, such as merging contiguous http requests into
>>>> one.
>>>> > > We've deployed this to the Orkut sandbox as well to get some
>>>> real-world
>>>> > > feedback from developers. You can take a look at the code here:
>>>> > >
>>>> http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src.
>>>> ..
>>>> >
>>>> > >> Is this a specific to your provider?  Where does the code you
>>>> contributed
>>>> > >> actually persist the content and rewrite the URLs to?
>>>> >
>>>> > > Shindig's proxy provides a cache interface that users can implement
>>>> to
>>>> > > store the data however they like. A default in memory LRU cache is
>>>> provided.
>>>> >
>>>> > >> Thanks,
>>>> >
>>>> > >> Paul
>>>> >
>>>> > >> *From:* [EMAIL PROTECTED] [mailto:
>>>> > >> [EMAIL PROTECTED] *On Behalf Of *Louis
>>>> Ryan
>>>> > >> *Sent:* Thursday, May 22, 2008 2:11 PM
>>>> > >> *To:* [EMAIL PROTECTED]
>>>> > >> *Cc:* [EMAIL PROTECTED]; Bryan Green
>>>> >
>>>> > >> *Subject:* Re: PROPOSAL : Rewriting links in generated and proxied
>>>> > >> content
>>>> >
>>>> > >> Paul,
>>>> >
>>>> > >> You certainly can use the include rule to specify the parameter
>>>> matching
>>>> > >> implementation and just document that for your container. The
>>>> implementation
>>>> > >> in shindig no longer cares about recognized file extensions but
>>>> rather uses
>>>> > >> the referencing HTML tag (script, link, img & embed currently) to
>>>> determine
>>>> > >> whether rewriting should occur so the revised proposal looks
>>>> like....
>>>> >
>>>> > >> <Optional feature="content-rewrite">
>>>> > >>         <Param name="include-tags">script,link,img,embed</Param>
>>>> > >>         <Param name="include-pattern">.*</Param>
>>>> >
>>>> > >>         <Param name="exclude-pattern"></Param>
>>>> > >> </Optional>
>>>> >
>>>> > >> Params are shown with their default values, defaults are used if
>>>> param is
>>>> > >> omitted.
>>>> >
>>>> > >> Exclude pattern overrides include pattern if exclude pattern is
>>>> defined.
>>>> > >> The feature can be turned off by explicitly setting include-tags to
>>>> an empty
>>>> > >> list of exclude-pattern to '.*'
>>>> >
>>>> > >> I didnt mean to imply that the cache-control rules are defined by
>>>> this
>>>> > >> feature, thats an implementation detail that containers are free to
>>>> change
>>>> > >> at their discretion. I provided the discussion to give folks some
>>>> idea what
>>>> > >> a typical container might do. Completely agree that good developers
>>>> will
>>>> > >> version content and that containers are free to enforce this policy
>>>> by
>>>> > >> setting cache-control to eons on rewritten content.
>>>> >
>>>> > >> -Louis
>>>> >
>>>> > >> On Fri, May 16, 2008 at 7:10 PM, Paul Walker <[EMAIL PROTECTED]>
>>>> wrote:
>>>> >
>>>> > >> Our thoughts at MySpace were to parse and persist external
>>>> resources on
>>>> > >> our end and the developer would simply opt in by supplying a
>>>> standardized
>>>> > >> query parameter on the URI of the resource.  I think we can
>>>> understand why
>>>> > >> developers would want us to persist/cache some images/swfs for them
>>>> and not
>>>> > >> others.  We need a way for users to opt in individual files and
>>>> while the
>>>> > >> pattern matching would work, the parameter just seems easier.  I
>>>> suppose for
>>>> > >> users that create apps on our developer site, we could publish the
>>>> use of
>>>> > >> this parameter as a pattern match and still be compliant with the
>>>> pattern
>>>> > >> matching detail of this proposal.
>>>> >
>>>> > >> We'd like to obey caching headers, but would need to have a
>>>> significant
>>>> > >> floor.  We will be storing the parsed resources on Akamai and would
>>>> have to
>>>> > >> run a job that updated these files and I don't like the messiness
>>>> of that.
>>>> > >>  I don't see developers having a huge issue versioning URIs as is
>>>> typically
>>>> > >> done w/ JS libraries and update their gadget xml, so I'm not so
>>>> concerned
>>>> > >> about this.  I'm more concerned about the 90%+ developers that
>>>> don't
>>>> > >> properly use cache control headers.  Developers that are
>>>> sophisticated
>>>> > >> enough to and have the need to invalidate these resources
>>>> periodically are
>>>> > >> sophisticated enough to use URI versioning and update their gadget
>>>> xml.
>>>> > >> Again, they also have the option of hosting the resource themselves
>>>> and
>>>> > >> controlling any complicated/varying user-agent caching they have on
>>>> the
>>>> > >> resource.
>>>> >
>>>> > >> We pre-process all markup when it is saved/published and the live
>>>> version
>>>> > >> for installed users is retrieved already compressed to gzip (for
>>>> users that
>>>> > >> don't already have it cached on their user-agent), so we don't have
>>>> the same
>>>> > >> performance implications as shindig it sounds like.  I assume that
>>>> Shindig
>>>> > >> could store a lookup of cached urls and check/replace where it
>>>> finds matches
>>>> > >> and where it does not, throw the work of fetching/caching to a
>>>> background
>>>> > >> task and not rewrite those until it has, but I'll leave that up to
>>>> the
>>>> > >> Shindig experts.
>>>> >
>>>> > >> Cc'ed Bryan Green, the main developer who has already finished most
>>>> of our
>>>> > >> implementation, if someone would like to discuss.  We're keen on
>>>> this
>>>> > >> support so a general BIG +1 here.  Could we separate the cache
>>>> control
>>>> > >> portion of this proposal and move forward with resource
>>>> parsing/persisting
>>>> > >> w/out it for now?
>>>> >
>>>> > >> Thx…
>>>> >
>>>> > >> ~Paul
>>>> >
>>>> > >> *From:* [EMAIL PROTECTED] [mailto:
>>>> > >> [EMAIL PROTECTED] *On Behalf Of *Louis
>>>> Ryan
>>>> > >> *Sent:* Friday, May 16, 2008 4:47 PM
>>>> > >> *To:* [EMAIL PROTECTED]
>>>> > >> *Cc:* [EMAIL PROTECTED]
>>>> > >> *Subject:* Re: PROPOSAL : Rewriting links in generated and proxied
>>>> > >> content
>>>> >
>>>> > >> An initial implementation of this is now available as a patch for
>>>> Shindig
>>>> >
>>>> > >>https://issues.apache.org/jira/browse/SHINDIG-276
>>>> >
>>>> > >>  On Wed, May 7, 2008 at 5:22 PM, Louis Ryan <[EMAIL PROTECTED]>
>>>> wrote:
>>>> >
>>>> > >> 1. Yes
>>>> > >> 2. Yes, My sample implementation is now doing this
>>>> > >> 3. To some extent. Developers have a lot of control using the
>>>> > >> cache-control headers. Containers are likely to require a minimum
>>>> value
>>>> >
>>>> > >> On Wed, May 7, 2008 at 4:40 PM, Graham Spencer <[EMAIL PROTECTED]>
>>>> wrote:
>>>> >
>>>> > >> Thanks Louis. A few minor questions:
>>>> >
>>>> > >> [1] I assume DEFAULT should also include CSS files. It might make
>>>> sense to
>>>> > >> base DEFAULT not on pattern matching targets but rather on the
>>>> context (e.g.
>>>> > >> <IMG>, CSS, etc.).
>>>> >
>>>> > >> [2] Will CSS files be parsed to extract background images and such?
>>>> >
>>>> > >> [3] Should we give developers control over timeouts?
>>>> >
>>>> > >> --g
>>>> >
>>>> > >> On Tue, May 6, 2008 at 4:48 PM, Louis Ryan <[EMAIL PROTECTED]>
>>>> wrote:
>>>> >
>>>> > >> Hi,
>>>> >
>>>> > >> Many containers offer the ability to rewrite links to use their
>>>> proxy
>>>> > >> loading mechanism using *gadgets.io.getProxyUrl() *Typically the
>>>> > >> generated proxy URL can be expected to give better download
>>>> performance for
>>>> > >> users of that particular container and also potentially reducing
>>>> the load on
>>>> > >> gadget developer backends. Currently however there is no standard
>>>> way for a
>>>> > >> gadget to have links in its generated markup be rewritten to use
>>>> the proxy
>>>> > >> URL format. I would like to propose creating a new feature to allow
>>>> for
>>>> > >> rewriting of links in generated gadget content
>>>> >
>>>> > >> Create a new standard gadget feature called *proxy-rewriter *which
>>>> allows
>>>> > >> gadgets to control whether they want content re-writing enabled.
>>>> Containers
>>>> > >> can choose to turn the feature on by default for all gadgets and
>>>> gadgets can
>>>> > >> use this mechanism to opt-out.
>>>> >
>>>> > >> An 'include' param is used to control which URLs to rewrite:
>>>> >
>>>> > >>    - ALL - All URLs in the content
>>>> > >>    - DEFAULT - is recognized static file extension types such as
>>>> .js,
>>>> > >>    .png, .gif ...
>>>> > >>    - NONE - disables the feature even if it is enabled by default
>>>> by the
>>>> > >>    container
>>>> >
>>>> > >> An 'include-pattern' and 'exclude-pattern' can be specified to
>>>> implement
>>>> > >> more exact filtering rules. Patterns are applied to the URL to
>>>> rewrite,
>>>> > >> excludes are processed after includes
>>>> >
>>>> > >> An 'apply-to' is used to specify the comma separated list of
>>>> mime-types
>>>> > >> which the rewriter should recognize and rewrite. By default the
>>>> list is
>>>> > >> text/html,text/xml,application/xml (suggestions welcome here)
>>>> >
>>>> > >>      <Optional feature="proxy-rewriter">
>>>> > >>         <Param name="include">DEFAULT</Param>
>>>> > >>         <Param
>>>> name="include-pattern">.*\/mystaticcontent\/.*</Param>
>>>> > >>         <Param
>>>> name="exclude-pattern">.*\/mynonstaticcontent\/.*</Param>
>>>> > >>         <Param name="apply-to">text/html</Param>
>>>> > >>      </Optional>
>>>> >
>>>> > >> This feature will not only impact the content generated when the
>>>> gadget is
>>>> > >> rendered but is also used to control whether any content fetched
>>>> through
>>>> > >> makeRequest, Preload and proxied URLs is also rewritten.
>>>> >
>>>> > >> It is probably also
>>>> >
>>>> > ...
>>>> >
>>>> > read more »
>>>>
>>>>
>>>
>>>
>>>
>>
>
> --~--~---------~--~----~------------~-------~--~----~
> You received this message because you are subscribed to the Google Groups
> "OpenSocial and Gadgets Specification Discussion" group.
> To post to this group, send email to
> [EMAIL PROTECTED]
> To unsubscribe from this group, send email to
> [EMAIL PROTECTED]
> For more options, visit this group at
> http://groups.google.com/group/opensocial-and-gadgets-spec?hl=en
> -~----------~----~----~----~------~----~------~--~---
>
>

Reply via email to