Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 1|Resposta: 0

[Fonte] O .NET/C# usa o Socket para enviar requisições HTTP(s) baseadas no Protocolo de Transferência de Hipertexto

[Copiar link]
Publicado em44 segundos atrás | | | |
Requisitos: Todos os dias, ao abrir páginas web ou aplicativos, as informações que você navega quase sempre são acessadas enviando respostas a requisições HTTP ou HTTPS. Uso de C# baseado no Protocolo de Transferência de Hipertexto e sockets nativos para enviar requisições HTTP.

acordo

Protocolo de Transferência de Hipertexto (HTTP) é um protocolo da camada de aplicação sem estado usado para sistemas de informação hipertexto distribuídos e colaborativos.

HTTP / Protocolo 1.1 (RFC 9112):O login do hiperlink está visível.
Semântica HTTP (RFC 9110):O login do hiperlink está visível.

Exemplo de pedido:
GET /hello.txt HTTP/1.1
User-Agent: curl/7.64.1
Host: O login do hiperlink está visível.
Accept-Language: en, mi

Resposta de exemplo:
HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain

Olá, Mundo! Meu conteúdo inclui um CRLF em avanço.

O socket envia requisições

O código-fonte é o seguinte:
O código-fonte suporta o envio de requisições para protocolos HTTP e HTTPS. Como mostrado abaixo:



Conexão: perto vs manter vivo

Se você usar ReadToEndAsync para ler todos os dados da resposta, precisa configurar a Conexão para fechar. Se você configurar para manter viva, a resposta ReadToEndAsync vai travar. Razões para não travar: Muitos servidores web (como Nginx, Apache ou certos gateways de API) iniciam ativamente um pacote FIN para fechar a conexão TCP se o cliente for nativo para escrever um socket sem ação subsequente, ou se o servidor acionar um timeout ocioso (geralmente definido para 5 segundos).

pipeline HTTP, enviando múltiplas requisições simultaneamente:O login do hiperlink está visível.

Transfer-Encoding: chunked 表示数据是以分块的形式传输的。每个数据块前面都有一个指示该块大小的十六进制数字,这个数字后面跟着一个换行符(CRLF),然后是实际的数据内容,再接着另一个换行符来结束这一块。这种编码方式允许服务器在不知道全部内容长度的情况下开始发送数据。

FDD8 é um número hexadecimal que especifica o tamanho do seguinte bloco de dados (em bytes). Converter fdd8 de hexadecimal para decimal resulta em 65.016 bytes. Isso significa que imediatamente após fdd8 e CRLF há 65.016 bytes de dados. Depois disso, pode haver mais blocos de dados até que um bloco de tamanho 0 seja encontrado, indicando que a transmissão está completa.

O FDD8 informa ao receptor que o próximo bloco de dados tem 65.016 bytes de comprimento.




Anterior:Resumo do Local de Teste HTTP(s) (Atualizado Continuamente)
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com