Thread: Re: [Cppcms-users] Cppcms-users Digest, Vol 26, Issue 8
Brought to you by:
artyom-beilis
From: 刘怀宇 <mys...@gm...> - 2011-09-08 09:24:37
|
Thanks for your reply! I found out that maybe it is just the Same Origin Policy related errors. I used your HTML example ,and deploy it with json_rpc service in one cppcms application. have a see at my config.js { "service" : { "api" : "http", "port" : 8080 }, "http" : { "script_names" : ["/jsonrpc","/html"] } } We add two applications into cppcms application pool as following: 1. cppcms::service srv(argc,argv); 2. srv.applications_pool().mount(cppcms::applications_factory<my_hello_world>() , cppcms::mount_point(std::string( "/html")) ); 3. srv.applications_pool().mount(cppcms::applications_factory<json_service>() , cppcms::mount_point(std::string( "/jsonrpc")) ); So there are two applications in the same service but different URI. I got the response from jsonrpc successfully by this method. But if I request the jsonrpc service from another computer by javascript ,it doesn't work. Is it related to the Same Origin Policy ? Is there any method to solve this problem? 2011/9/7 <cpp...@li...> > Send Cppcms-users mailing list submissions to > cpp...@li... > > To subscribe or unsubscribe via the World Wide Web, visit > https://lists.sourceforge.net/lists/listinfo/cppcms-users > or, via email, send a message with subject or body 'help' to > cpp...@li... > > You can reach the person managing the list at > cpp...@li... > > When replying, please edit your Subject line so it is more specific > than "Re: Contents of Cppcms-users digest..." > > > Today's Topics: > > 1. Can't get correct response from json rpc server when using > javascript (???) > 2. Re: Can't get correct response from json rpc server when > using javascript (Artyom Beilis) > > > ---------------------------------------------------------------------- > > Message: 1 > Date: Wed, 7 Sep 2011 16:44:52 +0800 > From: ??? <mys...@gm...> > Subject: [Cppcms-users] Can't get correct response from json rpc > server when using javascript > To: cpp...@li... > Message-ID: > <CAM...@ma... > > > Content-Type: text/plain; charset="iso-8859-1" > > Hello > There is a json rpc example in cppcms project. Now I want to send json_rpc > request using javascript , but it doesn't work. > I found that the Content-Type field of the HttpRequest message must be > "application/json" for cppcms application ,otherwise I got error messages > as follows " invalid content type " > And I tested successfully by python(in tests dir) and curl command > > 1.python: > > def test(name,A,B): > if A != B: > print "Error :" + name > print "-----Actual--" > print A,"---Expected--" > print B,"-------------" > sys.exit(1) > else: > print "Ok:"+name > > def test_status(h,stat): > if h.status != stat: > print "Status mistmatch:",h.status,"!=",stat > sys.exit(1) > > def test_valid(name,params,ans,method='POST'): > h=httplib.HTTPConnection('192.168.30.17:8080'); > headers = {"Content-type": "application/json"} > h.request(method,'/rpc',params,headers) > r=h.getresponse() > test(name,r.read(),ans) > > test_valid('sum','{"method" : "sum" , "params" : [ 1, 2 ], "id" : > 1}','{"id":1,"error":null,"result":3}') > > 2.curl command: > curl -i -X POST --header "Content-Type:application/json" -d > '{"method":"sum","params":[1,2],"id":1}' http://192.168.30.17:8080/rpc > > They both succeeded. > > But I can't get correct response by using javascript.The following code > has > been tested in IE8 , Chrome13 and firefox6.It only success in IE8. > > var xhr = new XMLHttpRequest(); > var rpcUrl = 'http://192.168.30.17:8080/rpc'; > var postData = '{"method":"sum","params":[1,2],"id":1}'; > > xhr.open("post", rpcUrl, true); > > xhr.setRequestHeader("Content-Type","application/json"); > > xhr.onreadystatechange = function() { > if (xhr.readyState === 4) { > if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) { > alert(xhr.responseText) > } > } > } > xhr.send(postData); > > Maybe the problem is that I can't set the "Content-Type" as > "application/json" successfully in Chrome and Firefox. > > Do you have any experience about ajax? > Or just give me an idea! > -------------- next part -------------- > An HTML attachment was scrubbed... > > ------------------------------ > > Message: 2 > Date: Wed, 7 Sep 2011 03:02:34 -0700 (PDT) > From: Artyom Beilis <art...@ya...> > Subject: Re: [Cppcms-users] Can't get correct response from json rpc > server when using javascript > To: "cpp...@li..." > <cpp...@li...> > Message-ID: > <131...@we...> > Content-Type: text/plain; charset="utf-8" > > Actually I don't see any specific reason why wouldn't it work. > Are you sure you don't have Same Origin Policy related errors? > > I've added an HTML example of JSON RPC service in the json_rpc examples > directory: > > ?? > http://cppcms.svn.sourceforge.net/viewvc/cppcms/framework/trunk/examples/json_rpc/index.html?view=markup > > ? > Artyom Beilis > > > > >________________________________ > >From: ??? <mys...@gm...> > >To: cpp...@li... > >Sent: Wednesday, September 7, 2011 11:44 AM > >Subject: [Cppcms-users] Can't get correct response from json rpc server > when using javascript > > > > > >Hello?There is a json rpc example in cppcms project. Now I want to send > json_rpc request ?using javascript , but it doesn't work. > >?I found that the Content-Type field of the HttpRequest message must be > "application/json" for ?cppcms application ,otherwise I got error messages > as follows ?" invalid content type "? > >And I tested ?successfully by python(in tests dir) and curl command > > > > > >1.python: > > > > > >def test(name,A,B): > >? ? if A != B: > >? ? ? ? print "Error :" + name? > >? ? ? ? print "-----Actual--" > >? ? ? ? print A,"---Expected--" > >? ? ? ? print B,"-------------" > >? ? ? ? sys.exit(1) > >? ? else: > >? ? ? ? print "Ok:"+name > > > > > >def test_status(h,stat): > >? ? if h.status != stat: > >? ? ? ? print "Status mistmatch:",h.status,"!=",stat > >? ? ? ? sys.exit(1) > > > > > >def test_valid(name,params,ans,method='POST'): > >? ? h=httplib.HTTPConnection(' 192.168.30.17:8080'); > >? ? headers = {"Content-type": "application/json"} > >? ? h.request(method,'/rpc',params,headers) > >? ? r=h.getresponse() > >? ? test(name,r.read(),ans) > > > > > >test_valid('sum','{"method" : "sum" , "params" : [ 1, 2 ], "id" : > 1}','{"id":1,"error":null,"result":3}') > > > > > >2.curl command: > >?curl -i -X POST --header "Content-Type:application/json" -d > '{"method":"sum","params":[1,2],"id":1}' http://192.168.30.17:8080/rpc > > > > > >They both succeeded. > > > > > >But I can't get correct response by using ?javascript.The following code > has been tested in IE8 , Chrome13 and firefox6.It only success in IE8. > > > > > >var xhr = new XMLHttpRequest(); > >var rpcUrl = 'http://192.168.30.17:8080/rpc'; > >var postData = '{"method":"sum","params":[1,2],"id":1}'; > > > >xhr.open("post", rpcUrl, true); > > > >xhr.setRequestHeader("Content-Type","application/json"); > > > >xhr.onreadystatechange = function() { > >if (xhr.readyState === 4) { > >if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) { > >alert(xhr.responseText) > >} > >} > >} > >xhr.send(postData);? > > > > > >Maybe the problem is that I can't set the "Content-Type" as > "application/json" successfully in Chrome and Firefox. > > > > > >Do you have any experience about ajax? > >Or just give me an idea! > > > > > > > > > > >------------------------------------------------------------------------------ > >Using storage to extend the benefits of virtualization and iSCSI > >Virtualization increases hardware utilization and delivers a new level of > >agility. Learn what those decisions are and how to modernize your storage > >and backup environments for virtualization. > >http://www.accelacomm.com/jaw/sfnl/114/51434361/ > >_______________________________________________ > >Cppcms-users mailing list > >Cpp...@li... > >https://lists.sourceforge.net/lists/listinfo/cppcms-users > > > > > > > -------------- next part -------------- > An HTML attachment was scrubbed... > > ------------------------------ > > > ------------------------------------------------------------------------------ > Using storage to extend the benefits of virtualization and iSCSI > Virtualization increases hardware utilization and delivers a new level of > agility. Learn what those decisions are and how to modernize your storage > and backup environments for virtualization. > http://www.accelacomm.com/jaw/sfnl/114/51434361/ > > ------------------------------ > > _______________________________________________ > Cppcms-users mailing list > Cpp...@li... > https://lists.sourceforge.net/lists/listinfo/cppcms-users > > > End of Cppcms-users Digest, Vol 26, Issue 8 > ******************************************* > |
From: Artyom B. <art...@ya...> - 2011-09-08 17:56:27
|
> Hello,Artyom: My Java developers told me they solved the > cross-domain problem using JSONP. Does CppCMS support it? > I mean JSON_RPC over JSONP. Or do you have any better > idea for this problem? CppCMS Supports JSON-RPC over HTTP via POST requests. So basically that means if you want to implement JSONP you will just to need to handle it on your own. It should be quite trivial to implement with existing JSON support. (See sample below) Now you should remember that: 1. JSONP may expose the application to many security problems. 2. GET requests have limited size this you'll have problems passing big parameters. So it should not be a problem to use but it has no real connection to JSON-RPC. Artyom -------------------------- void main(std::string url) { wrapper_function = request().get("jsonp"); std::string method = request().get("method"); cppcms::json::value params; { std::istringstream params(request().get("params")); if(!v.load(params,true)) { response().make_error_response(503); return; } } response.out() << wrapper_function <<'('; if(method=="sum") sum(v); else if ... response.out() << '); } void sum(json::value const &v) { int x = v[0].number(); int y = v[0].number(); json::value res = x+y; response.out() << res; } ------------- <script src="http://someurl.com/rpc?method=sum&wrapper=parseRequest&parms=[10,20]"></script> |
From: 陈抒 <csf...@gm...> - 2011-09-08 14:06:33
|
Hello,Artyom: My Java developers told me they solved the cross-domain problem using JSONP. Does CppCMS support it? I mean JSON_RPC over JSONP. Or do you have any better idea for this problem? 陈抒 Best regards http://blog.csdn.net/sheismylife On Thu, Sep 8, 2011 at 5:24 PM, 刘怀宇 <mys...@gm...> wrote: > Thanks for your reply! > I found out that maybe it is just the Same Origin Policy related errors. > I used your HTML example ,and deploy it with json_rpc service in one cppcms > application. > have a see at my config.js > { > "service" : { > "api" : "http", > "port" : 8080 > }, > "http" : { > "script_names" : ["/jsonrpc","/html"] > } > } > We add two applications into cppcms application pool as following: > > 1. cppcms::service srv(argc,argv); > 2. > srv.applications_pool().mount(cppcms::applications_factory<my_hello_world>() , cppcms::mount_point(std::string( > "/html")) ); > 3. > srv.applications_pool().mount(cppcms::applications_factory<json_service>() , cppcms::mount_point(std::string( > "/jsonrpc")) ); > > So there are two applications in the same service but different URI. > I got the response from jsonrpc successfully by this method. > But if I request the jsonrpc service from another computer by javascript > ,it doesn't work. > Is it related to the Same Origin Policy ? > Is there any method to solve this problem? > > > 2011/9/7 <cpp...@li...> > >> Send Cppcms-users mailing list submissions to >> cpp...@li... >> >> To subscribe or unsubscribe via the World Wide Web, visit >> https://lists.sourceforge.net/lists/listinfo/cppcms-users >> or, via email, send a message with subject or body 'help' to >> cpp...@li... >> >> You can reach the person managing the list at >> cpp...@li... >> >> When replying, please edit your Subject line so it is more specific >> than "Re: Contents of Cppcms-users digest..." >> >> >> Today's Topics: >> >> 1. Can't get correct response from json rpc server when using >> javascript (???) >> 2. Re: Can't get correct response from json rpc server when >> using javascript (Artyom Beilis) >> >> >> ---------------------------------------------------------------------- >> >> Message: 1 >> Date: Wed, 7 Sep 2011 16:44:52 +0800 >> From: ??? <mys...@gm...> >> Subject: [Cppcms-users] Can't get correct response from json rpc >> server when using javascript >> To: cpp...@li... >> Message-ID: >> < >> CAM...@ma...> >> Content-Type: text/plain; charset="iso-8859-1" >> >> Hello >> There is a json rpc example in cppcms project. Now I want to send json_rpc >> request using javascript , but it doesn't work. >> I found that the Content-Type field of the HttpRequest message must be >> "application/json" for cppcms application ,otherwise I got error messages >> as follows " invalid content type " >> And I tested successfully by python(in tests dir) and curl command >> >> 1.python: >> >> def test(name,A,B): >> if A != B: >> print "Error :" + name >> print "-----Actual--" >> print A,"---Expected--" >> print B,"-------------" >> sys.exit(1) >> else: >> print "Ok:"+name >> >> def test_status(h,stat): >> if h.status != stat: >> print "Status mistmatch:",h.status,"!=",stat >> sys.exit(1) >> >> def test_valid(name,params,ans,method='POST'): >> h=httplib.HTTPConnection('192.168.30.17:8080'); >> headers = {"Content-type": "application/json"} >> h.request(method,'/rpc',params,headers) >> r=h.getresponse() >> test(name,r.read(),ans) >> >> test_valid('sum','{"method" : "sum" , "params" : [ 1, 2 ], "id" : >> 1}','{"id":1,"error":null,"result":3}') >> >> 2.curl command: >> curl -i -X POST --header "Content-Type:application/json" -d >> '{"method":"sum","params":[1,2],"id":1}' http://192.168.30.17:8080/rpc >> >> They both succeeded. >> >> But I can't get correct response by using javascript.The following code >> has >> been tested in IE8 , Chrome13 and firefox6.It only success in IE8. >> >> var xhr = new XMLHttpRequest(); >> var rpcUrl = 'http://192.168.30.17:8080/rpc'; >> var postData = '{"method":"sum","params":[1,2],"id":1}'; >> >> xhr.open("post", rpcUrl, true); >> >> xhr.setRequestHeader("Content-Type","application/json"); >> >> xhr.onreadystatechange = function() { >> if (xhr.readyState === 4) { >> if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) { >> alert(xhr.responseText) >> } >> } >> } >> xhr.send(postData); >> >> Maybe the problem is that I can't set the "Content-Type" as >> "application/json" successfully in Chrome and Firefox. >> >> Do you have any experience about ajax? >> Or just give me an idea! >> -------------- next part -------------- >> An HTML attachment was scrubbed... >> >> ------------------------------ >> >> Message: 2 >> Date: Wed, 7 Sep 2011 03:02:34 -0700 (PDT) >> From: Artyom Beilis <art...@ya...> >> Subject: Re: [Cppcms-users] Can't get correct response from json rpc >> server when using javascript >> To: "cpp...@li..." >> <cpp...@li...> >> Message-ID: >> <131...@we...> >> Content-Type: text/plain; charset="utf-8" >> >> Actually I don't see any specific reason why wouldn't it work. >> Are you sure you don't have Same Origin Policy related errors? >> >> I've added an HTML example of JSON RPC service in the json_rpc examples >> directory: >> >> ?? >> http://cppcms.svn.sourceforge.net/viewvc/cppcms/framework/trunk/examples/json_rpc/index.html?view=markup >> >> ? >> Artyom Beilis >> >> >> >> >________________________________ >> >From: ??? <mys...@gm...> >> >To: cpp...@li... >> >Sent: Wednesday, September 7, 2011 11:44 AM >> >Subject: [Cppcms-users] Can't get correct response from json rpc server >> when using javascript >> > >> > >> >Hello?There is a json rpc example in cppcms project. Now I want to send >> json_rpc request ?using javascript , but it doesn't work. >> >?I found that the Content-Type field of the HttpRequest message must be >> "application/json" for ?cppcms application ,otherwise I got error messages >> as follows ?" invalid content type "? >> >And I tested ?successfully by python(in tests dir) and curl command >> > >> > >> >1.python: >> > >> > >> >def test(name,A,B): >> >? ? if A != B: >> >? ? ? ? print "Error :" + name? >> >? ? ? ? print "-----Actual--" >> >? ? ? ? print A,"---Expected--" >> >? ? ? ? print B,"-------------" >> >? ? ? ? sys.exit(1) >> >? ? else: >> >? ? ? ? print "Ok:"+name >> > >> > >> >def test_status(h,stat): >> >? ? if h.status != stat: >> >? ? ? ? print "Status mistmatch:",h.status,"!=",stat >> >? ? ? ? sys.exit(1) >> > >> > >> >def test_valid(name,params,ans,method='POST'): >> >? ? h=httplib.HTTPConnection(' 192.168.30.17:8080'); >> >? ? headers = {"Content-type": "application/json"} >> >? ? h.request(method,'/rpc',params,headers) >> >? ? r=h.getresponse() >> >? ? test(name,r.read(),ans) >> > >> > >> >test_valid('sum','{"method" : "sum" , "params" : [ 1, 2 ], "id" : >> 1}','{"id":1,"error":null,"result":3}') >> > >> > >> >2.curl command: >> >?curl -i -X POST --header "Content-Type:application/json" -d >> '{"method":"sum","params":[1,2],"id":1}' http://192.168.30.17:8080/rpc >> > >> > >> >They both succeeded. >> > >> > >> >But I can't get correct response by using ?javascript.The following code >> has been tested in IE8 , Chrome13 and firefox6.It only success in IE8. >> > >> > >> >var xhr = new XMLHttpRequest(); >> >var rpcUrl = 'http://192.168.30.17:8080/rpc'; >> >var postData = '{"method":"sum","params":[1,2],"id":1}'; >> > >> >xhr.open("post", rpcUrl, true); >> > >> >xhr.setRequestHeader("Content-Type","application/json"); >> > >> >xhr.onreadystatechange = function() { >> >if (xhr.readyState === 4) { >> >if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) { >> >alert(xhr.responseText) >> >} >> >} >> >} >> >xhr.send(postData);? >> > >> > >> >Maybe the problem is that I can't set the "Content-Type" as >> "application/json" successfully in Chrome and Firefox. >> > >> > >> >Do you have any experience about ajax? >> >Or just give me an idea! >> > >> > >> > >> > >> >> >------------------------------------------------------------------------------ >> >Using storage to extend the benefits of virtualization and iSCSI >> >Virtualization increases hardware utilization and delivers a new level of >> >agility. Learn what those decisions are and how to modernize your storage >> >and backup environments for virtualization. >> >http://www.accelacomm.com/jaw/sfnl/114/51434361/ >> >_______________________________________________ >> >Cppcms-users mailing list >> >Cpp...@li... >> >https://lists.sourceforge.net/lists/listinfo/cppcms-users >> > >> > >> > >> -------------- next part -------------- >> An HTML attachment was scrubbed... >> >> ------------------------------ >> >> >> ------------------------------------------------------------------------------ >> Using storage to extend the benefits of virtualization and iSCSI >> Virtualization increases hardware utilization and delivers a new level of >> agility. Learn what those decisions are and how to modernize your storage >> and backup environments for virtualization. >> http://www.accelacomm.com/jaw/sfnl/114/51434361/ >> >> ------------------------------ >> >> _______________________________________________ >> Cppcms-users mailing list >> Cpp...@li... >> https://lists.sourceforge.net/lists/listinfo/cppcms-users >> >> >> End of Cppcms-users Digest, Vol 26, Issue 8 >> ******************************************* >> > > > > ------------------------------------------------------------------------------ > Doing More with Less: The Next Generation Virtual Desktop > What are the key obstacles that have prevented many mid-market businesses > from deploying virtual desktops? How do next-generation virtual desktops > provide companies an easier-to-deploy, easier-to-manage and more affordable > virtual desktop model.http://www.accelacomm.com/jaw/sfnl/114/51426474/ > _______________________________________________ > Cppcms-users mailing list > Cpp...@li... > https://lists.sourceforge.net/lists/listinfo/cppcms-users > > |