De quem eh a culpa? Opera, Tomcat ou minha?

Oi pessoal

Tenho uma webapp, que roda bonitinha. Mas com o opera, tenho alguns problemas na hora de passar parametros por POST e na url ao MESMO tempo.

Nao sei se na RFC do http 1.1 isso eh valido, mas explorer, mozilla, netscape e ateh lynx aceitam isso. Isso que eu falo, eh, ao mesmo tempo de passar parametros por um POST pelos inputs, eu passo pela action!

<form method=post action="servletzinha?var1=x">
  <input type=hidden name="var2" value=y>
</form>

No opera, soh a var2 chega do outro lado. faz sentido?

bem, se vc criar outo input hidden da ná mesma, vc tentou mandar assim??
daí deve funcionar em tudo qto é browser.
tá que é mei “porcão” + se funcionar, prá manter a compatibildade tá valendo né… hehehehe

a rfc nao suporta esse tipo de comando pq vai da interpretacao do web server
isto eh: os browsers do netscape e ie tao tratando sua request antes de enviar (o q eh ERRADO)… o opera segue as regras e por isso o webserver nao consegue entender seu request…
o mesmo problema do netscape e ie nao seguirem o padrao eh qdo eles tentam “chutar” qual o tipo de arquivo q tah sendo retornado, se eh xml, html, … quando eles deveriam simplesmente receber o que foi passado e ponto final…

abracao do teu irmaozao

Gui

imaginei

http 1.1
http://www.w3.org/Protocols/rfc2068/rfc2068

post e multipart
http://www.ietf.org/rfc/rfc1867.txt

deve ta aqui, mas nao acho

Isso é provavelmente um bug no Opera, ou pelo menos deveria ser tratado como tal. No HTTP 1.1, URI eh URI, nao interessa se vc está usando POST, GET, DELETE, FUCKME ou qqer que seja o comando… e, pela definicao do RFC, uma URI eh:

URIs in HTTP can be represented in absolute form or relative to some
known base URI, depending upon the context of their use. The two
forms are differentiated by the fact that absolute URIs always begin
with a scheme name followed by a colon.

      URI            = ( absoluteURI | relativeURI ) [ "#" fragment ]

      absoluteURI    = scheme ":" *( uchar | reserved )

      relativeURI    = net_path | abs_path | rel_path

      net_path       = "//" net_loc [ abs_path ]
      abs_path       = "/" rel_path
      rel_path       = [ path ] [ ";" params ] [ "?" query ]

      path           = fsegment *( "/" segment )
      fsegment       = 1*pchar
      segment        = *pchar

      params         = param *( ";" param )
      param          = *( pchar | "/" )

      scheme         = 1*( ALPHA | DIGIT | "+" | "-" | "." )
      net_loc        = *( pchar | ";" | "?" )

      query          = *( uchar | reserved )
      fragment       = *( uchar | reserved )

      pchar          = uchar | ":" | "@" | "&" | "=" | "+"
      uchar          = unreserved | escape
      unreserved     = ALPHA | DIGIT | safe | extra | national

      escape         = "%" HEX HEX
      reserved       = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+"
      extra          = "!" | "*" | "'" | "(" | ")" | ","
      safe           = "$" | "-" | "_" | "."
      unsafe         = CTL | SP | <"> | "#" | "%" | "<" | ">"
      national       = <any OCTET excluding ALPHA, DIGIT,
                       reserved, extra, safe, and unsafe>

Opera feio :x

a URI indica o servico que o webserver deve retornar…
pelo que sei, os parametros lidos como ?a=b&c=d nao fazem parte do protocolo http e sao interpretados pelo webserver da maneira que ele bem entender, num eh isso?

de qq jeito, se o opera esta errado em enviar os parametros, basta fazer um proxy para ver o que o internet explorer e o netscape enviam na request… comparar com o que o opera envia… paulo, me manda o codigo que voce ta usando no seu form (bem diminuto) preu tenta no proxy aqui e mostrar os requests diferentes…

eu ainda assumo que o ie e o netscape parseam a URL ? e transforma eles em parametros a serem enviados via POST, o que nao eh o funcionamento default de um browser… eh opcional. agora se os dois realmente enviam no request:

abaixo vai o exemplo (bem zoado) de um form e seu request como deveria ser: (sei q o multi part e o boundary estao bizarros mas eh pra ilustrar…

deveria gerar o codigo a seguir

uma vez que o target eh xxx?a=b e os parametros sao o c e o d…
se o internet explorer e o netscape enviarem o request a seguir, eles estao errados ou nao?

no caso do opera estar errado, qual seria o codigo q ele envia q geraria tal erro? (pois nao consigo imaginar)

Guilherme

&lt;form action=&quot;panda?MAMUTE_ACTION=trabalho.CriaEquipe,trabalho.PegaTrabalhoAluno&amp;MAMUTE_TEMPLATE=aluno/MostraTrabalho&amp;trabalhoDescricaoId=$FORM.trabalhoDescricaoId&quot; method=post enctype=&quot;multipart/form-data&quot;&gt;
                &lt;tr&gt;&lt;td width=&quot;510&quot; valign=&quot;middle&quot; bgcolor=&quot;white&quot;&gt;
                  &lt;div align=&quot;left&quot; id=&quot;smalltext&quot;&gt;	
              #*********** CRIACAO DE EQUIPE *************#
               crie uma nova equipe&#58; &lt;input type=&quot;text&quot; name=&quot;equipe&quot; id=&quot;form_input&quot;&gt; 
               &lt;input type=&quot;submit&quot; value=&quot;criar&quot; id=&quot;form_input_submit&quot;&gt;
				  &lt;/div&gt;
	     		&lt;/td&gt;&lt;/tr&gt;
	     		&lt;/form&gt;

essa variavel EQUIPE nao chega, nem vazio.

resultados:

  1. form:
  1. internet explorer:

isto eh, ele interpretou corretamente

  1. opera

ele tambem interpretou corretamente

la estao os parametros e a url, tudo certinho… resultado? o meu opera eh igual ao meu internet explorer… as versoes estao escritas no header… testei com a 6.2 (ou 6.5) do opera e tambem deu o mesmo request…
qual c ta usando paulo?

gui

guilherme
tenta mandar valor nenhum no campo
deixa ele em branco
e ve o header dos dois profavor
creio que o do opera nao vira simplesmente nada

Opera 7.0:

(certo)

  1. ie 5.5:

(certo)

paulo, instala o TCPSniffer (programa em java gratuito, faz parte do grinder versao 2.7 ou 2.8…)… o grinder esta no sourceforge. ele faz esse sniffing…

gui