1. O que é o protocolo HTTP
HTTP é a abreviação do protocolo de transferência de hipertexto. É um protocolo da camada de aplicativo do protocolo TCP/IP, usado para definir o processo de troca de dados entre o navegador da Web e o servidor da Web. Depois que o cliente se conecta ao servidor da Web, se você deseja obter um determinado recurso da Web no servidor da Web, deve cumprir um determinado formato de comunicação. O protocolo HTTP é usado para definir o formato para o cliente se comunicar com o servidor da Web.
2. Versão do protocolo HTTP
Protocolo HTTP Versão: http/1.0, http/1.1
3. A diferença entre http1.0 e http1.1
No protocolo HTTP 1.0, depois que o cliente estabelece uma conexão com o servidor da Web, apenas um recurso da Web pode ser obtido.
No protocolo HTTP 1.1, depois que o cliente estabelece uma conexão com o servidor da Web, vários recursos da Web são obtidos em uma conexão.
4. Solicitação HTTP
4.1. Conteúdo incluído nas solicitações HTTP
Depois que o cliente se conecta ao servidor, ele solicita um determinado recurso da Web do servidor, que é chamado de cliente enviando uma solicitação HTTP ao servidor.
Uma solicitação HTTP completa inclui o seguinte conteúdo: uma linha de solicitação, vários cabeçalhos de mensagens e um exemplo de conteúdo de entidade:
4.2. Detalhes das solicitações HTTP - Linha de solicitação
A linha de solicitação GET é chamada de método de solicitação. Os métodos de solicitação incluem: postar, obter, cabeça, opções, excluir, rastrear, put e comumente usados incluem: get, post
Se o usuário não tiver configurações, por padrão, o navegador envia solicitações GET para o servidor. Por exemplo, o acesso é inserido diretamente no navegador, o acesso é clicado no hiperlink, etc. etc. são todos. Se o usuário quiser alterar o método de solicitação para publicar, ele poderá alterar o método de envio do formulário.
Se postar ou obter é usado para solicitar um recurso da Web do servidor. A diferença entre esses dois métodos é refletida principalmente na transmissão de dados: se o método de solicitação for obtido, os dados entregues ao servidor poderão ser trazidos na forma de A? Após o endereço da URL solicitado, e vários dados são separados por &, por exemplo: get /mail/1.html?name=abc&password=xyz http/1.1
Recursos do método GET: Os parâmetros anexados ao endereço URL são limitados e a capacidade de dados geralmente não pode exceder 1K.
Se o método de solicitação estiver postado, os dados poderão ser enviados ao servidor no conteúdo da entidade solicitado. As características do método do post são: a quantidade de dados transmitidos é ilimitada.
4.3. Detalhes das solicitações HTTP - cabeçalho da mensagem
Cabeçalhos de mensagem comuns em solicitações HTTP
Aceitar: o navegador informa ao servidor através deste cabeçalho e o tipo de dados que ele suporta. Aceitar-Charset: O navegador informa ao servidor através deste cabeçalho, qual o caractere definido que ele suporta. Acepção de aceitação: o navegador informa ao servidor através deste cabeçalho e o formato de compactação suportado-linguagem aceita: o navegador informa ao servidor através desse cabeçalho e seu host de localidade: o navegador informa ao servidor através deste cabeçalho e qual host para acessar. Se modificado-uma vez: o navegador informa ao servidor através deste cabeçalho e a hora de armazenar em cache os dados. Referente: o navegador informa ao servidor através deste cabeçalho e de qual página é o cliente. Conexão: o navegador informa ao servidor através deste cabeçalho e se deve desconectar o link ou o link após a conclusão da solicitação.
Por exemplo:
Aceitar: Application/X-Ms-Aplicação, Image/JPEG, Application/Xaml+XML, Image/GIF, Imagem/PJPEG,
Application/X-MS-XBAP, Application/VND.MS-Excel, Application/Vnd.MS-PowerPoint, Application/Msword, */ *
Referente: http: // localhost: 8080/javawebdemoProject/web/2.jsp
Aceitar-Language: ZH-CN
Agente do usuário: mozilla/4.0 (compatível; msie 8.0; windows nt 6.1; wow64; trident/4.0; slcc2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729;
Aceitar-se-codificador: gzip, deflate
Host: Localhost: 8080
Conexão: Keep-alive
5. Resposta HTTP
5.1. Conteúdo incluído na resposta HTTP
Uma resposta HTTP representa os dados enviados de volta pelo servidor ao cliente, que inclui: uma linha de status, vários cabeçalhos de mensagens e conteúdo de entidade.
exemplo:
HTTP/1.1 200 OkServer: Apache-Coyote/1.1Content-Type: Text/Html; Charset = ISO-8859-1Content-Length: 105Date: Ter, 27 de maio de 2014 16:23:28 GMT <Html> <head> <title> Hello Jorld </title </body> </html>
5.2. Detalhes da resposta HTTP - linha de status
Formato da linha de status: HTTP Número da versão Status Código Motivo da declaração <Crlf>
Exemplo: http/1.1 200 ok
O código de status é usado para representar o resultado do processamento do servidor da solicitação. É um número decimal de três dígitos. Os códigos de status de resposta são divididos em 5 categorias, como mostrado abaixo:
5.3. Detalhes da resposta HTTP - Cabeçalhos de resposta comumente usados
Cabeçalhos de resposta comuns (cabeçalhos de mensagens) em respostas HTTP
Localização: O servidor usa esse cabeçalho para dizer ao navegador onde pular para o servidor: o servidor usa esse cabeçalho para dizer ao navegador o modelo do codificação de conteúdo do servidor: o servidor usa esse cabeçalho para dizer ao navegador que o language do navegador de dados é retornado ao redor do conteúdo de conteúdo: o servidor usa o conteúdo do teor de dados: o language de conteúdo de dados: o que o Brower usa o conteúdo do conteúdo de dados: o conteúdo do conteúdo de dados: o language do conteúdo de dados: o language do conteúdo de dados: o que é o que o Browser é o que é regressivo para que o Browser é o que é regressado no conteúdo do Brower. O servidor usa este cabeçalho para informar ao navegador o tipo de dados a ser retornado: o servidor usa esse cabeçalho para dizer ao navegador para atualizar a disposição de conteúdo: o servidor usa esse cabeçalho para dizer ao navegador para que o navegador seja que o Bloco de transferência para que o Blocks é que o Bloco de Bloco para o Bloco para o Browser. Sem cache
Pragma: sem cache
6. Defina cabeçalhos de resposta no servidor para controlar o comportamento do navegador do cliente
6.1. Defina o cabeçalho de resposta do local para realizar o redirecionamento de solicitação
package gacl.http.study;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * @author GACL * */public class ServletDemo01 estende HttPServlet {public void Doget (solicitação httpServletRequest, httpServletResponse Response) lança o servidor de servirxception, IoException {Response.SetStus (302); // o Set O Código de Resposta do servidor para o Código do servidor/** ** Definir o respostas do servidor. Este é o chamado redirecionamento de solicitação*/Response.setheader ("localização", "/javaweb_httprotocol_study_20140528/1.jsp"); } public void DoPost (solicitação httpServletRequest, httpServletResponse resposta) lança servletexception, ioexception {this.Doget (request, resposta); }}Quando você usa o endereço da URL "http: // localhost: 8080/javaweb_httprotocol_study_20140528/servlet/servletDemo01" Para acessar o servletDemo01, você pode ver o código e a figura de resposta enviados ao Browser após o servidor,
O servidor retorna um código de status 302 para dizer ao navegador que não tenho os recursos que você deseja, mas digo onde está através do cabeçalho da resposta do local. Depois que o navegador analisa o cabeçalho da resposta, ele sabe que deseja pular para o /javaweb_httprotocol_study_20140528/1.jsp Página, para que ela saltará automaticamente para 1.jsp, como mostrado na figura abaixo:
6.2. Defina o cabeçalho de resposta de codificação de conteúdo para informar ao navegador o formato de compressão dos dados
pacote gacl.http.study; importar java.io.byteArrayoutputStream; importar java.io.ioException; importar java.util.zip.gzipoutputStream; import javax.servlet.servleTleTexception; import javax.servlet.http.ttslett.htpslet. javax.servlet.http.httpServletRequest; importar javax.servlet.http.httpServletRequest; importar javax.servlet.http.httpServletResponse;/***@author gacl*Esse apetre é usado para demonstrar o seguinte o seguinte Use o fluxo gzipOutputStream para comprimir dados*2. Defina o codificação do conteúdo do cabeçalho da resposta para informar ao navegador que o formato compactado dos dados enviados de volta pelo servidor*/public class ServletDemo02 estende httpServlet {public void Doget (httpServletReQuest Solicitação, string, strings = resposta da resposta)) "ABCDABCDABCDABCDABCDABCDABCDABCBCBCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDBCDBCDBCDBCDBCDBCAME bcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabc dabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcda bcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd "cdabcdabcdabcdabcdabcdabcdabcdabc" + "dabcdabcdabcdabcdabcdabcdabcdabc" + "dabcdabcdabcdabcdabcdabcdabcdabcdab" + "cdabcdabcdabcdabcdabcdabcdabcdabcdab" + "cdabcdabcdabcdabcdabcdabcdabcdabcdab" + "cdabcdabcdabcdabcdabcdabcdabcdabcdab" + "cdabcdabcdabcdabcdabcdabcdabcdabcdabcd"; System.out.println ("原始数据的大小为 ::" + data.getBytes (). Comprimento); ByteArrayOutputStream bout = new ByteArrayOutputStream (); GzipOutputStream gota = new GzipOutputStream (luta); // buffer got.write (data.getbytes ()); got.close (); // Obtenha o byte de dados compactado g [] = bout.tobytearray (); Response.setheader ("codificação de conteúdo", "gzip"); Response.setheader ("Length-comprimento", G.Length +""); Response.getOutputStream (). Write (G); } public void DoPost (solicitação httpServletRequest, httpServletResponse resposta) lança servletexception, ioexception {this.Doget (request, resposta); }}As informações de resposta enviadas pelo servidor para o navegador são as seguintes:
Os formatos de compressão suportados pelo navegador são:
6.3. Defina o cabeçalho da resposta do tipo conteúdo e especifique o tipo de dados de loopback
pacote gacl.http.study; importar java.io.ioException; importar java.io.inputStream; importar java.io.outputStream; importar javax.servlet.servletexception; import javax.servlet.htp.httpslets; importexception; servletL.ServletL.Servlet.Servlet.Servlet.htp.httpslets; javax.servlet.http.httpServletRequest; importar javax.servlet.http.httpServletResponse; public class ServletDemo03 estende httpServlet {public Void Doget (httpSerTrequest, htttTeSceptleSonsOnsion) Throws) Throws (httpServleTereTEx, solicitação, htttServExSonsOnsion) Throws) Throws) Throws (httpSertTereTEx, solicitação, htttSExSensoSSONSOnsion) Throws). O navegador pode receber (aceitar) são: * Application/X-Ms-Aplicação, * Image/JPEG, * Application/Xaml+Xml, * Image/Gif, * Image/Pjpeg, * Application/X-Ms-Powerpopp, * Application/Vnd.ms-Excel, * Application/VSD.R-Powerpoint, Application/Msword, * Excel, * Application/VSD.Ir-Powerpoint, * Application/Msword, * Excel, * Application/VSD.R.M. "Image/jpeg"); // Use o cabeçalho da resposta do tipo conteúdo para especificar o tipo de dados enviado ao navegador como "imagem/jpeg" // leia a imagem wp_20131005_002.jpg na pasta IMG localizada no diretório raiz do projeto e retornar um fluxo de entrada no fluxo de entrada em = = this.getServletContext (). getResourceasStream ("/img/wp_20131005_002.jpg"); buffer de byte [] = novo byte [1024]; int len = 0; OutputStream out = Response.getOutputStream (); // Obtenha o fluxo de saída enquanto ((len = in.read (buffer))> 0) {// Leia o conteúdo no fluxo de entrada (em) e armazená -los no tampão (tampão) out.write (buffer, 0, len); HttpServletResponse resposta) lança servletexception, ioexception {this.Doget (solicitação, resposta); }}As informações de resposta enviadas pelo servidor para o navegador são as seguintes:
Os resultados em execução do servletDemo03 são mostrados na figura abaixo:
As imagens são exibidas no navegador
6.4. Defina o cabeçalho de resposta de atualização para atualizar o navegador regularmente
pacote gacl.http.study; importar java.io.ioException; importar javax.servlet.servletexception; importar javax.servlet.http.httpServlet; import javax.servlet.htttp.httpsletlequest; ServletDemo04 estende httpServlet {public void Doget (solicitação httpServletRequest, httpServletResponse resposta) lança servletexception, ioexception { / ** * defina o cabeçalho de refresh para deixar o navegador atualizar regularmente a cada 3 segundos * / // resposta.setherader (" /** * Defina o cabeçalho da resposta de atualização para deixar o navegador pular para http://www.baidu.com em 3 segundos */Response.setheader ("Refresh", "3; url = 'http: //www.baidu.com'"); Response.getWriter (). Write ("GACL"); } public void DoPost (solicitação httpServletRequest, httpServletResponse resposta) lança servletexception, ioexception {this.Doget (request, resposta); }} 6.5. Defina o cabeçalho da resposta da disposição de conteúdo para deixar o navegador baixar o arquivo
pacote gacl.http.study; importar java.io.ioException; importar java.io.inputStream; importar java.io.outputStream; importar javax.servlet.servletexception; import javax.servlet.htp.httpslets; importexception; servletL.ServletL.Servlet.Servlet.Servlet.htp.httpslets; javax.servlet.http.httpServletRequest; importar javax.servlet.http.httpServletResponse; public class ServletDemo05 estende httpServlet {public void doget (httpSleTreQuest, htttTesembexSonsOnsion) Throws). Cabeçalho de resposta para deixar o navegador baixar o arquivo */ Response.setheader ("Content-Disposition", "Applement; nome do arquivo = xxx.jpg"); InputStream in = this.getServletContext (). GetResourceasStream ("/img/1.jpg"); buffer de byte [] = novo byte [1024]; int len = 0; OutputStream out = Response.getOutputStream (); while ((len = in.read (buffer))> 0) {out.write (buffer, 0, len); }} public void DoPost (solicitação httpServletRequest, httpServletResponse resposta) lança servletexception, ioexception {this.Doget (request, resposta); }}Ao acessar o ServletDemo05 no navegador, a caixa de download de arquivos será exibida, conforme mostrado na figura a seguir:
O exposto acima é tudo sobre este artigo, espero que seja útil para o aprendizado de todos.