> Date: Sat, 26 Apr 2014 11:43:05 +0530
> Subject: Re: CORS issue with Tomcat and Android Webview
> From: ankising...@gmail.com
> To: users@tomcat.apache.org
> 
> On Sat, Apr 26, 2014 at 12:53 AM, Terence M. Bandoian 
> <tere...@tmbsw.com>wrote:
> 
> > On 4/24/2014 11:16 PM, Ankit Singhal wrote:
> >
> >> Hi
> >>
> >> I did more research on this and figure out the issue.If you see the
> >> headers
> >> from Android and look into Origin Header.
> >>
> >> Origin: file://
> >>
> >> Tomcat CORS filter tries to validate the URI in Origin header and
> >> considers
> >> "file://" as an invalid URI and returns back 403.
> >>
> >> I have applied <accept-origin>*</accept-origin> params. So shouldn't CORS
> >> filter honor this ?
> >>
> >> I agree that Client also has the problem , but still server should also
> >> allow...
> >>
> >
> >
> > Hi, Ankit-
> >
> > Have you tried disabling or removing the CORS filter when you're testing
> > from the Android device? The flowchart in the Tomcat CORS documentation
> > indicates that the filter will attempt to validate the origin before it
> > determines whether or not it is allowed. Apparently, the file scheme is not
> > considered valid.

MG>referencing the request processing flowchart at
MG>https://tomcat.apache.org/tomcat-7.0-doc/images/cors-flowchart.png
MG>you will need to carefully shepherd your request thru TC 
Valve/Filter/ServletProcessing gauntlet
MG>did you supply a valid origin header?
MG>http://en.wikipedia.org/wiki/List_of_HTTP_header_fields
MG>did you supply a valid request method e.g. POST/GET?
MG>Android is a much diffferent User-agent than Browser and you will need to 
set the request headers properly
MG>HttpConnection httpConn = null;
        try {
          // Open an HTTP Connection object
          httpConn = 
(HttpConnection)Connector.open(http://LOCALHOST:8080/services/getdata);
          // Setup HTTP Request to POST
          httpConn.setRequestMethod(HttpConnection.POST);
          httpConn.setRequestProperty("User-Agent",
           ???????);
http://www.useragentstring.com/pages/Mobile%20Browserlist/
MG>

> > Hope that helps.
> >
> > -Terence Bandoian
> >
> >
> >
> >>
> >>
> >> On Fri, Apr 25, 2014 at 1:36 AM, Terence M. Bandoian <tere...@tmbsw.com
> >> >wrote:
> >>
> >> On 4/24/2014 1:14 PM, Jose María Zaragoza wrote:
> >>>
> >>> 2014-04-24 19:00 GMT+02:00 Terence M. Bandoian <tere...@tmbsw.com>:
> >>>>
> >>>> On 4/22/2014 1:37 PM, Jose María Zaragoza wrote:
> >>>>>
> >>>>> ---------- Forwarded message ----------
> >>>>>> From: Terence M. Bandoian <tere...@tmbsw.com>
> >>>>>> Date: 2014-04-22 20:12 GMT+02:00
> >>>>>> Subject: Re: CORS issue with Tomcat and Android Webview
> >>>>>> To: Tomcat Users List <users@tomcat.apache.org>
> >>>>>>
> >>>>>>
> >>>>>> On 4/22/2014 11:03 AM, Ankit Singhal wrote:
> >>>>>>
> >>>>>> Also we tried to give the same call from Android App to some
> >>>>>>> different
> >>>>>>> Node
> >>>>>>> server and things worked fine. So it seems some problem with Tomcat
> >>>>>>> only.
> >>>>>>>
> >>>>>>> A silly question:
> >>>>>>>
> >>>>>> What does it have to do Tomcat's CORS support with W3C Widget Access
> >>>>>> specification ?
> >>>>>>
> >>>>>> I have no idea about Phonegap but it looks like that it prefers to
> >>>>>> follow that specification for managing requests to different domains ,
> >>>>>> right ?
> >>>>>>
> >>>>>>
> >>>>> Hi, Jose-
> >>>>>
> >>>>> The request/response headers in the original post were difficult for me
> >>>>> to
> >>>>> follow but basically, requests to Tomcat are successful when tested
> >>>>> with
> >>>>> Chrome (desktop? laptop? server? same as Tomcat?) and unsuccessful when
> >>>>> tested from an Android device. What are the differences between the two
> >>>>> environments? Do those differences have any effect on request
> >>>>> processing
> >>>>> by
> >>>>> the Tomcat CORS filter? If it were me, I'd find out.
> >>>>>
> >>>>> Well , I have no idea, but according this page
> >>>>
> >>>> http://www.html5rocks.com/en/tutorials/cors/
> >>>>
> >>>> if Content-Type is application/json , then request is a "not simple
> >>>> request" ( sic. ) and it requires a OPTIONS preflight request (
> >>>> including "Origin" header)
> >>>> And "Once the preflight request gives permissions, the browser makes
> >>>> the actual request"
> >>>>
> >>>> First case (Chrome browser) did but, but the second didn't
> >>>>
> >>>> Are you test to change the Content-Type ?
> >>>>
> >>>> Regards
> >>>>
> >>>>
> >>> Hi, Jose-
> >>>
> >>> From the page you cited:
> >>>
> >>> "The use-case for CORS is simple. Imagine the site alice.com has some
> >>> data that the site bob.com wants to access. This type of request
> >>> traditionally wouldn’t be allowed under the browser’s same origin policy.
> >>> However, by supporting CORS requests, alice.com can add a few special
> >>> response headers that allows bob.com to access the data."
> >>>
> >>> In this case, alice.com would be the server that hosts Tomcat. As you
> >>> suggest, the problem may very well be in the client but - FOR ME - it's
> >>> worth the effort to understand what should happen on both the client and
> >>> the server and to ensure that both are configured correctly.
> >>>
> >>> -Terence Bandoian
> >>>
> >>>
> >>>
> >>>
> >>>> On Tue, Apr 22, 2014 at 9:22 PM, Ankit Singhal
> >>>>
> >>>>> <ankising...@gmail.com>wrote:
> >>>>>>>
> >>>>>>> Hi All
> >>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> I am facing a strange problem with Tomcat 8 and CORS. I am
> >>>>>>>> developing
> >>>>>>>> a
> >>>>>>>> Hybrid web app using ionicframework, AngularJS, Cordova as front end
> >>>>>>>> and
> >>>>>>>> Tomcat 8 and Spring 3 as back-end.
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> For easy development I am testing the functionality in chrome ,
> >>>>>>>> where
> >>>>>>>> things are working fine. I added CORS filter with standard
> >>>>>>>> configuration
> >>>>>>>> to
> >>>>>>>> allow CROSS ORIGIN requests from browser.
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> Today I converted my app into Android App and started making AJAX
> >>>>>>>> calls
> >>>>>>>> to
> >>>>>>>> tomcat server. To my surprise things stopped working . I debugged
> >>>>>>>> further
> >>>>>>>> and anomalies in the headers of browser and Android webview.
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> Browser sends 2 requests for same call OPTION and POST. But Android
> >>>>>>>> Webview only send POST request.
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> Browser Request Headers:
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> OPTION:
> >>>>>>>>
> >>>>>>>> Remote Address:54.254.159.166:80
> >>>>>>>>
> >>>>>>>> Request URL:http://medistreet.in/auth2
> >>>>>>>>
> >>>>>>>> Request Method:OPTIONS
> >>>>>>>>
> >>>>>>>> Status Code:200 OK
> >>>>>>>>
> >>>>>>>> Request Headers
> >>>>>>>>
> >>>>>>>> OPTIONS /auth2 HTTP/1.1
> >>>>>>>>
> >>>>>>>> Host: medistreet.in
> >>>>>>>>
> >>>>>>>> Connection: keep-alive
> >>>>>>>>
> >>>>>>>> Access-Control-Request-Method: POST
> >>>>>>>>
> >>>>>>>> Origin: http://localhost
> >>>>>>>>
> >>>>>>>> User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36
> >>>>>>>> (KHTML,
> >>>>>>>> like Gecko) Chrome/34.0.1847.116 Safari/537.36
> >>>>>>>>
> >>>>>>>> Access-Control-Request-Headers: accept, content-type
> >>>>>>>>
> >>>>>>>> Accept: */*
> >>>>>>>>
> >>>>>>>> Referer: http://localhost/
> >>>>>>>>
> >>>>>>>> Accept-Encoding: gzip,deflate,sdch
> >>>>>>>>
> >>>>>>>> Accept-Language: en-US,en;q=
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> POST:
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> Remote Address:54.254.159.166:80
> >>>>>>>>
> >>>>>>>> Request URL:http://medistreet.in/auth2
> >>>>>>>>
> >>>>>>>> Request Method:POST
> >>>>>>>>
> >>>>>>>> Status Code:200 OK
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> Request Headers
> >>>>>>>>
> >>>>>>>> Accept:application/json, text/plain, */*
> >>>>>>>>
> >>>>>>>> Accept-Encoding:gzip,deflate,sdch
> >>>>>>>>
> >>>>>>>> Accept-Language:en-US,en;q=
> >>>>>>>>
> >>>>>>>> Connection:keep-alive
> >>>>>>>>
> >>>>>>>> Content-Length:39
> >>>>>>>>
> >>>>>>>> Content-Type:application/json;charset=8
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> Host:medistreet.in
> >>>>>>>>
> >>>>>>>> Origin:http://localhost
> >>>>>>>>
> >>>>>>>> Referer:http://localhost/
> >>>>>>>>
> >>>>>>>> User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36
> >>>>>>>> (KHTML,
> >>>>>>>> like Gecko) Chrome/34.0.1847.116 Safari/537.36
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> Android Request Headers:
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> Request URL:http://medistreet.in/auth2
> >>>>>>>>
> >>>>>>>> Request Method:POST
> >>>>>>>>
> >>>>>>>> Status Code:403 Forbidden
> >>>>>>>>
> >>>>>>>> Request Headers
> >>>>>>>>
> >>>>>>>> POST http://medistreet.in/auth2
> >>>>>>>> HTTP/1.1<http://medistreet.in/auth2%20HTTP/1.1>
> >>>>>>>>
> >>>>>>>> Accept: application/json, text/plain, */*
> >>>>>>>>
> >>>>>>>> Origin: file://
> >>>>>>>>
> >>>>>>>> User-Agent: Mozilla/5.0 (Linux; Android 4.4.2; XT1033
> >>>>>>>> Build/KXB20.25-1.31)
> >>>>>>>> AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0
> >>>>>>>> Mobile
> >>>>>>>> Safari/537.36
> >>>>>>>>
> >>>>>>>> Content-Type: application/json;charset=8
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> The difference here I see is with Number of headers and specially
> >>>>>>>> Origin
> >>>>>>>> Header which contains "file://". To overcome this I added more
> >>>>>>>> option
> >>>>>>>> is CORS filter:
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> <filter>
> >>>>>>>>
> >>>>>>>> <filter-name>CorsFilter</filter-name>
> >>>>>>>>
> >>>>>>>> <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
> >>>>>>>>
> >>>>>>>> <init-param>
> >>>>>>>>
> >>>>>>>> <param-name>cors.allowed.origins</param-name>
> >>>>>>>>
> >>>>>>>> <param-value>*</param-value>
> >>>>>>>>
> >>>>>>>> </init-param>
> >>>>>>>>
> >>>>>>>> </filter>
> >>>>>>>>
> >>>>>>>> <filter-mapping>
> >>>>>>>>
> >>>>>>>> <filter-name>CorsFilter</filter-name>
> >>>>>>>>
> >>>>>>>> <url-pattern>/*</url-pattern>
> >>>>>>>>
> >>>>>>>> </filter-mapping>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> Another strange thing is that when we send the same Android request
> >>>>>>>> Headers from POSTMAN (chrome REST plugin) request is successful.
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> POSTMAN Headers:
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> Remote Address:54.254.159.166:80
> >>>>>>>>
> >>>>>>>> Request URL:http://medistreet.in/auth2
> >>>>>>>>
> >>>>>>>> Request Method:POST
> >>>>>>>>
> >>>>>>>> Status Code:200 OK
> >>>>>>>>
> >>>>>>>> Request Headers
> >>>>>>>>
> >>>>>>>> Accept:application/json, text/plain, */*
> >>>>>>>>
> >>>>>>>> Accept-Encoding:gzip,deflate,sdch
> >>>>>>>>
> >>>>>>>> Accept-Language:en-US,en;q=
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> Cache-Control:no-cache
> >>>>>>>>
> >>>>>>>> Connection:keep-alive
> >>>>>>>>
> >>>>>>>> Content-Length:39
> >>>>>>>>
> >>>>>>>> Content-Type:application/json;charset=8
> >>>>>>>>
> >>>>>>>> Cookie:fbm_464284963672217�se_domain=edistreet.in;
> >>>>>>>> JSESSIONID�435755F03D7B045DD6E33D1D16AC51;
> >>>>>>>>
> >>>>>>>> fbsr_464284963672217=SqF-nWquTFPk_-5wAtI0jTImBNkVxglUT-gHNSw.
> >>>>>>>> eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImNvZGUiOiJBUUQ0UEZZVXE4
> >>>>>>>> eDFIa3V6OW9RV3RlVzE4clQ3SmtVRjBzU1VVcXhfV1BENG8tV1BZYjZuTVdD
> >>>>>>>> dDJGMmw4TjJUeUxLSzhIYUU1TUc2MkY5cXZOaXRMN3NGdklNZkhySmluYkdj
> >>>>>>>> MWs1THAyZnZYa2Zpa1lLVGJ0OWlZeXVvRDNWUDhTblp4czJCeTQ4RTlYY1Zj
> >>>>>>>> UmhGWGJsNnFMeG5YcWxxQ0d3b0hRM1ctRWhlLU02ejVITnhhakJtaVFRVk9P
> >>>>>>>> anFBVUtMSlk4Y3pLa0RtejFSY3RjTEFRaW16X1lkLUFkUngxUGwzajVNczdW
> >>>>>>>> OFdiMW9xeC05QjA0T2xraXktVU9ZalpSRUJsZjhibnZjQXQ2aUZTc1d2QTA3
> >>>>>>>> TjVUYnFIekVxQ0JIYjJNRG4tSUJhajl6TEMwQlVpckM0YzJXbC1GVDNhcyIs
> >>>>>>>> Imlzc3VlZF9hdCI6MTM5ODE4MDg2NCwidXNlcl9pZCI6IjU3NjI1MjI2MiJ9
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> Host:medistreet.in
> >>>>>>>>
> >>>>>>>> Origin:chrome-extension://fdmmgilgnpjigdojojpjoooidkmcomcm
> >>>>>>>>
> >>>>>>>> User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36
> >>>>>>>> (KHTML,
> >>>>>>>> like Gecko) Chrome/34.0.1847.116 Safari/537.36
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> After this also there is no solution to the problem . I suspect
> >>>>>>>> that
> >>>>>>>> Android Webview is not sending something which Tomcat is rejecting.
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> Any help will highly be appreciated.
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> Regards
> >>>>>>>>
> >>>>>>>> Ankit
> >>>>>>>>
> >>>>>>>> Hi, Ankit-
> >>>>>>
> >>>>>> I would double-check the documentation for the Tomcat CORS filter and
> >>>>>> the Cordova whitelist implementation:
> >>>>>>
> >>>>>> https://tomcat.apache.org/tomcat-7.0-doc/config/filter.
> >>>>>> html#CORS_Filter
> >>>>>> http://docs.phonegap.com/en/3.4.0/guide_appdev_whitelist_
> >>>>>> index.md.html
> >>>>>>
> >>>>>> Hope that helps.
> >>>>>>
> >>>>>> -Terence Bandoian
> >>>>>>
> >>>>>>
> >>>>>> ---------------------------------------------------------------------
> >>>>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> >>>>>> For additional commands, e-mail: users-h...@tomcat.apache.org
> >>>>>>
> >>>>>>
> >>>>>> ------------------------------------------------------------
> >>>>> ---------
> >>>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> >>>>> For additional commands, e-mail: users-h...@tomcat.apache.org
> >>>>>
> >>>>>
> >>>>> ---------------------------------------------------------------------
> >>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> >>> For additional commands, e-mail: users-h...@tomcat.apache.org
> >>>
> >>>
> >>>
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> > For additional commands, e-mail: users-h...@tomcat.apache.org
> >
> >
> 
> Hi
> 
> Removing the CORS filter is not an option , as our site is serving the Web
> pages as well and also the JSON data for the mobile app created in Phonegap.
> 
> @Chris: I checked the trunk code as well. If you see "dofilter()" method ,
> it first do "checkRequestType ()" , where it checks for "isValidOrigin"
> first. Based of the results it makes it INVALID CORS. .
> I hacked the code and made "IsValidOrigin" always return true. Things
> started working after that..
                                          

Reply via email to