Friday 10 November 2017

Multipart Content Transfer Coding Binary Options


Manipulação de dados binários com o Axis2 (MTOMSwA) Introdução Apesar da flexibilidade, interoperabilidade e aceitação global do XML, há momentos em serializar dados em XML não faz sentido. Os usuários de serviços da Web podem querer transmitir anexos binários de vários tipos, como imagens, desenhos, documentos XML, etc., juntamente com uma mensagem SOAP. Esses dados são muitas vezes em um formato binário particular. Tradicionalmente, duas técnicas têm sido usadas para lidar com dados opacos em XML. Enviar dados binários por valor é obtido incorporando dados opacos (obviamente após alguma forma de codificação) como um elemento ou conteúdo de atributo do componente XML de dados. A principal vantagem desta técnica é que dá aos aplicativos a capacidade de processar e descrever dados, com base apenas no componente XML dos dados. O XML suporta dados opacos como conteúdo através do uso de codificação de texto base64 ou hexadecimal. Ambas as técnicas incham o tamanho dos dados. Para UTF-8 codificação de texto subjacente, codificação base64 aumenta o tamanho dos dados binários por um fator de 1,33 x do tamanho original, enquanto codificação hexadecimal expande dados por um fator de 2x. Os fatores acima serão duplicados se a codificação de texto UTF-16 for usada. Também é preocupante a sobrecarga nos custos de processamento (real e percebido) para esses formatos, especialmente quando a decodificação volta para binário bruto. O envio de dados binários por referência é conseguido anexando dados binários puros como entidades externas não segmentadas fora do documento XML e incorporando URIs de referência a essas entidades como elementos ou valores de atributo. Isso evita o inchaço desnecessário de dados e desperdício de poder de processamento. O principal obstáculo para o uso dessas entidades não analisadas é a sua grande dependência de DTDs, o que impede a modularidade, bem como o uso de namespaces XML. Havia várias especificações introduzidas no mundo dos serviços da Web para lidar com esse problema de anexos binários usando a técnica quotby referencequot. O SOAP com Anexos é um desses exemplos. Como o SOAP proíbe declarações de tipo de documento (DTD) em mensagens, isso leva ao problema de não representar dados como parte da mensagem infoset, criando, portanto, dois modelos de dados. Esse cenário é como enviar anexos com uma mensagem de e-mail. Mesmo que esses anexos estejam relacionados ao conteúdo da mensagem, eles não estão dentro da mensagem. Isso faz com que as tecnologias que processam e descrevem os dados com base no componente XML dos dados em mau funcionamento. Um exemplo é o WS-Security. Onde o MTOM vem no MTOM (SOAP Message Transmission Optimization Mechanism) é outra especificação que se concentra na resolução do problema quotAttachmentsquot. MTOM tenta aproveitar as vantagens das duas técnicas acima, tentando mesclar as duas técnicas. O MTOM é realmente um método quotby referencequot. O formato de fio de uma mensagem otimizada MTOM é a mesma que a mensagem SOAP com anexos, que também torna compatível com Swa endpoints. A característica mais notável do MTOM é o uso do elemento XOP: Include, que é definido na especificação XOP (XML Binary Optimized Packaging) para fazer referência aos anexos binários (entidades gerais externas não analisadas) da mensagem. Com o uso deste elemento exclusivo, o conteúdo binário anexado logicamente torna-se inline (por valor) com o documento SOAP mesmo que ele seja realmente anexado separadamente. Isso funde os dois domínios, tornando possível trabalhar apenas com um modelo de dados. Isso permite que as aplicações processem e descrevam apenas olhando para a parte XML, tornando obsoleta a dependência de DTDs. Em uma nota mais leve, MTOM tem padronizado o mecanismo de referência SwA. O seguinte é um extrato da especificação XOP. No nível conceitual, esses dados binários podem ser considerados como codificados em base64 no documento XML. Como esta forma conceitual pode ser necessária durante algum processamento do documento XML (por exemplo, para assinar o documento XML), é necessário ter uma correspondência um-para-um entre os conjuntos de informações XML e os pacotes XOP. Portanto, a representação conceitual de tais dados binários é como se fosse codificada em base64, usando a forma léxica canônica do tipo de dados XML Schema base64Binary (consulte XML Schema Parte 2: Datatypes Second Edition 3.2.16 base64Binary). Na direção inversa, XOP é capaz de otimizar apenas dados de Infoset codificados em base64 que estão na forma lexical canônica. Apache Axis2 suporta codificação Base64. SOAP com anexos e MTOM (mecanismo de otimização de transmissão de mensagens SOAP). MTOM com Modelo de Programação Axis2 AXIOM é (e pode ser o primeiro) Modelo de Objeto que tem a capacidade de armazenar dados binários. Ele tem essa capacidade como OMText pode armazenar conteúdo binário bruto na forma de javax. activation. DataHandler. O OMText foi escolhido para este fim com dois motivos. Uma delas é que o XOP (MTOM) é capaz de otimizar apenas dados de Infoset codificados em base64 que estão na forma léxica canônica do tipo de dados base64Binary Schema XML. Outro é preservar o infoset tanto no remetente como no receptor. (Para armazenar o conteúdo binário no mesmo tipo de objeto, independentemente de ser otimizado ou não). O MTOM permite codificar seletivamente porções da mensagem, o que nos permite enviar dados codificados em base64, bem como dados binários brutos conectados externamente, referenciados pelo elemento quotXOPquot (conteúdo otimizado) para ser enviado em uma mensagem SOAP. Você pode especificar se um nó OMText que contém dados binários brutos ou dados binários base64encoded está qualificado para ser otimizado no momento da construção desse nó ou posterior. Para obter uma ótima eficiência do MTOM, um usuário é aconselhado a enviar anexos binários menores usando base64encoding (não otimizado) e anexos maiores como conteúdo otimizado. Além disso, um usuário pode criar um nó de conteúdo binário otimizável usando uma seqüência codificada em base64, que contém conteúdo binário codificado, fornecido com o tipo MIME da representação binária real. Axis2 usa javax. activation. DataHandler para manipular os dados binários. Todos os nós de conteúdo binário otimizados serão serializados como String Base64 se quotMTOM não estiver ativadoquot. Você também pode criar nós de conteúdo binário, que não serão otimizados em qualquer caso. Eles serão serializados e enviados como Cordas Base64. Habilitando a otimização do MTOM no lado do cliente Em Opções, defina a propriedade quotenableMTOMquot como True quando enviar mensagens. Quando essa propriedade é definida como True, qualquer envelope SOAP, independentemente de ele conter conteúdo otimizável ou não, será serializado como uma mensagem MIME MTOM otimizado. Axis2 serializa todos os nós de conteúdo binário como seqüências codificadas Base64 independentemente se eles são qualificados para serem otimizados ou não se a propriedade quotenableMTOMquot estiver definida como False. Se o envelope contiver quaisquer itens de informação de elemento do nome xop: Include (veja XML-binário Otimizado Embalagem 3. XOP Infosets Constructs). O usuário não precisa especificar nada para que o Axis2 receba mensagens MTOM otimizadas. O Axis2 irá automaticamente identificar e de-serializar em conformidade, como e quando uma mensagem MTOM chega. Habilitando a otimização do MTOM no lado do servidor O servidor do Axis 2 identifica automaticamente as mensagens otimizadas de MTOM recebidas com base no tipo de conteúdo e as desalifa adequadamente. O usuário pode habilitarMTOM no lado do servidor para mensagens de saída, Para habilitarMTOM globalmente para todos os serviços, os usuários podem definir o parâmetro quotenableMTOMquot como True no Axis2.xml. Quando está configurado, todas as mensagens de saída serão serializadas e enviadas como mensagens MIME Otimizadas MTOM. Se não estiver definido, todos os dados binários nos nós de conteúdo binário serão serializados como cadeias codificadas em Base64. Essa configuração pode ser substituída em services. xml com base em por serviço e por operação. Você deve reiniciar o servidor após a configuração desse parâmetro. Acessando Dados Binários Recebidos (Código de Amostra) O seguinte conteúdo foi capturado no TcpMon: Pedido feito pelo SoapUI Pro 3.0.2: POST tf6servicesxdsrepositoryb HTTP1.1 Accept-Encoding: gzip, deflate Tipo de conteúdo: multipartrelated typeapplicationxopxml start start-infoapplicationsoapxml action boundary - --- Part1728349551.1260534830078 MIME-Versão: 1.0 User-Agent: Jakarta Commons-HttpClient3.1 Anfitrião: ihexds. nist. gov:9080 Content-Length: 13318 ------ Part1728349551.1260534830078 Tipo de conteúdo: applicationxopxml charsetUTF -8 typeapplicationsoapxml actionProvideAndRegisterDocumentSetRequest Content-Transfer-Codificação: 8bit ID do conteúdo: ------ Part1728349551.1260534830078 Tipo de conteúdo: textplain charsetus-ascii Content-Transfer-Codificação: 7bit Content-ID: ltgt Este é depeches documento. Pedido feito pela ferramenta xdstest: POST tf6servicesxdsrepositoryb HTTP1.1 Content-Type: multipartrelated boundaryMIMEBoundaryurnuuid613A2BD2D99F1E6B5912 60534073176 typeapplicationxopxml startlt0.urn: uuid: 613A2BD2D99F1E6B591260534073177 apache. orggt iniciar-infoapplicationsoapxml actionurn: IHE: iti: 2007 rovideAndRegisterDocumentSet-b User-agent: Axis2 acolhimento: ihexds. nist. gov: 9080 Transfer-Encoding: blocos 20f1 --MIMEBoundaryurnuuid613A2BD2D99F1E6B59126053407 3176 Content-Type: applicationxopxml charsetUTF-8 typeapplicationsoapxml Content-Transfer-Encoding: binário Content-ID: lt0.urn: uuid: 613A2BD2D99F1E6B591260534073177apache. orggt --MIMEBoundaryurnuuid613A2BD2D99F1E6B59126053407 3176 conteúdo - Tipo: textplain Content-Transfer-Encoding: binário Content-ID: lt1. Urn: uuid: 613A2BD2D99F1E6B591260534073366apache. or g gt Este é o meu documento. De onde posso definir Content-Transfer-Encoding como binário No registro público nist, você pode exibir o documento de texto que foi enviado como um anexo: Eu também tentei fazer Encode Anexos como true em TestRequest Properties. Mas não está funcionando. Obrigado pelo helpContent-Type: cabeçalhos multipart Multi-part Content-Type identificam mensagens multipart. Eles exigem que um subtipo e outros elementos sejam incluídos no cabeçalho. O tipo de conteúdo multipartalternative é usado quando a mesma informação é apresentada em diferentes partes do corpo em diferentes formas. As partes do corpo são ordenadas pelo aumento da complexidade. Por exemplo, uma mensagem que consiste em um documento Microsoft Word 97 fortemente formatado também pode ser apresentada no formato do Microsoft Word versão 6.0, formato rich text e um formato de texto simples. Nesse caso, o texto simples seria apresentado como a primeira parte do corpo alternativo. A versão de texto rico seguiria, em seguida, o Word 6.0 e, em seguida, o mais complexo, o Word 97. Colocar a versão de texto simples em primeiro lugar é o esquema mais amigável para usuários com UAs não compatíveis com MIME, porque eles verão a versão reconhecível em primeiro lugar. Os UAs compatíveis com MIME devem apresentar a versão mais complexa que podem reconhecer ou dar ao usuário a opção de qual versão exibir. Os valores de Content-ID devem ser diferentes para cada parte onde existam diferentes níveis de complexidade entre as partes. O conteúdo-ID de cada parte deve ser diferente do conteúdo-ID do total multipartalternative. Ou seja, um valor de ID de conteúdo se referirá à entidade multipartes, enquanto um ou mais valores de ID de conteúdo se referirão às partes dentro dele. O tipo de conteúdo multipartbyteranges é definido como uma parte do protocolo de mensagem HTTP. Ele inclui duas ou mais partes, cada uma com seus próprios campos Content-Type e Content-Range. As partes são separadas usando um parâmetro de limite MIME. Ele permite que arquivos binários, bem como de 7 bits e 8 bits sejam enviados como várias partes, com os comprimentos das partes sendo especificados no cabeçalho de cada parte. Observe que, enquanto o HTTP faz provisões para usar MIME para documentos HTTP, o HTTP não é estritamente compatível com MIME. O tipo de conteúdo multipartdigest usado para enviar coleções de mensagens de texto simples. É realizado da mesma forma que o tipo de conteúdo multipartmixed, mas cada parte do corpo é esperado para ser de tipo de conteúdo: messagerfc822. O tipo de conteúdo de dados multipartform destina-se a permitir que os provedores de informações expressem solicitações de upload de arquivo uniformemente e para fornecer uma representação compatível com MIME para respostas de upload de arquivo. O tipo de conteúdo multipartmixed é usado quando as partes do corpo são independentes e precisam ser empacotadas em uma ordem particular. Quando um UA não reconhece um subtipo multipart, ele tratará a mensagem como multipartmixed. O objetivo do tipo de conteúdo multipartparallel é exibir todas as partes simultaneamente em hardware e software que podem fazê-lo. Por exemplo, um arquivo de imagem pode ser exibido enquanto um arquivo de som está sendo reproduzido. O tipo de conteúdo multipartem é usado para documentos compostos, aquelas mensagens nas quais as partes separadas do corpo são destinadas a trabalhar em conjunto para fornecer o significado completo da mensagem. Além disso, multipartrelated pode ser usado para fornecer links para conteúdo não contidos dentro da mensagem. Multipartrelated pode ser usado para documentos compostos onde o objeto é construído progressivamente a partir de peças, começando com a parte do corpo raiz conforme especificado no parâmetro start. Se o parâmetro de partida não for especificado, então a primeira parte do corpo é considerada o ponto de partida ou a parte do corpo da raiz. Multipartrelated requer um parâmetro de tipo. O parâmetro de tipo especifica o tipo de conteúdo da primeira ou parte raiz. O processamento multiparteado prevalece sobre a disposição do conteúdo. Muitos agentes de usuário MIME não reconhecem multipartrelated e tratam essas mensagens como multipartmixed. Para permitir isso, alguns UAs incluirão o cabeçalho de Content-Disposition desnecessariamente técnico em partes de corpo multipartrelated. Os cabeçalhos Content-Location e Content-Base são definidos para resolver referências de URL a outras partes do corpo. Ambos os cabeçalhos são válidos em qualquer mensagem ou parte do corpo. Eles são válidos para o cabeçalho de conteúdo ou o cabeçalho da mensagem onde eles ocorrem e para seu conteúdo. Os cabeçalhos Content-Location e Content-Base aplicam-se a cabeçalhos e partes do corpo onde ocorrem e não têm significado em títulos de várias partes. O cabeçalho Content-Base fornece uma base para URIs relativos ocorrendo em outros campos de título e em documentos HTML que não têm nenhum elemento BASE em seu código HTML. Seu valor deve ser um URI absoluto. O cabeçalho Content-Location contém um URL que especifica o corpo dessa parte do corpo. O URL pode ser relativo a uma URL especificada em um cabeçalho Content-Base. O exemplo a seguir mostra como esses cabeçalhos são usados: O tipo de conteúdo de multitransporte foi definido para retornar relatórios de status de entrega, com mensagens incluídas opcionais. Está encontrando maior uso na comunicação máquina-máquina. O multiparteporte é usado para a Notificação de Disposição de Mensagens. Multiparatizado. Multipartencrypted RFC1847 Os tipos de conteúdo multiparados e multipartencrypted fornecem uma estrutura de segurança para partes MIME. Esses cabeçalhos não definem protocolos de segurança, mas existem para transportar os documentos protegidos. Cada parte de corpo multiparticulado ou multipartencrypted é transportada como duas partes relacionadas, uma com as informações de controle descrevendo o protocolo e uma com o documento protegido. O tipo de conteúdo multipartito especifica como suportar serviços de autenticação e integridade usando assinatura digital. A informação de controle é realizada na segunda das duas partes do corpo necessárias. O tipo de conteúdo multipartencrypted especifica como apoiar a confidencialidade usando criptografia. A informação de controle é realizada na primeira das duas partes necessárias do corpo. Show: Inherited ProtectedConfigure codificação de transferência de conteúdo Aplica-se a: Exchange Online, Exchange Server 2013 A codificação de transferência de conteúdo define métodos de codificação para transformar dados de mensagem de e-mail binário no formato de texto simples US-ASCII. Essa transformação permite que a mensagem percorra servidores de mensagens SMTP mais antigos que suportam somente mensagens em texto US-ASCII. A codificação de transferência de conteúdo é definida na RFC 2045. O método de codificação de transferência é armazenado no campo de cabeçalho Content-Transfer-Encoding na mensagem. No Microsoft Exchange Server 2013, os seguintes métodos de codificação de transferência de conteúdo estão disponíveis: 7 bits Este valor indica que os dados do corpo da mensagem já estão no formato de texto simples ASCII dos EUA e nenhuma codificação de mensagem foi feita para a mensagem. Quoted-printable (QP) Este método de codificação usa caracteres US-ASCII imprimíveis para codificar os dados do corpo da mensagem. Se o texto original da mensagem for principalmente texto US-ASCII, a codificação QP dará resultados um pouco legíveis e compactos. Por padrão, o Exchange 2013 usa QP para codificar dados de mensagem binária. Base64 Este método de codificação baseia-se principalmente no padrão de email aprimorado (PEM) definido na RFC 1421. A codificação Base64 usa o método de codificação do alfabeto de 64 caracteres e os caracteres de preenchimento de saída definidos pelo PEM para codificar os dados do corpo da mensagem. A codificação Base64 cria um aumento previsível no tamanho da mensagem e é ideal para dados binários e texto não-US-ASCII. Você configura o método de codificação de transferência usando o parâmetro ByteEncoderTypeFor7BitCharsets nos cmdlets Set-OrganizationConfig e Set-RemoteDomain. As configurações de codificação de transferência de conteúdo que você configura com Set-OrganizationConfig se aplicam a todas as mensagens na organização do Exchange. As configurações de codificação de transferência de conteúdo que você configura com Set-RemoteDomain aplicam-se apenas à mensagem enviada para destinatários externos no domínio remoto. A tabela a seguir lista os valores que você pode usar para definir o método de codificação de transferência. Parâmetro no parâmetro Set-OrganizationConfig em Set-RemoteDomain

No comments:

Post a Comment