深入浅出学习HTTP协议

时间:2023-03-10 06:28:22
深入浅出学习HTTP协议

之前学习javaWeb只是大致了解了一下,今天重点介绍下http请求,当是复习吧!

一、http基础概念

1、什么是http协议?

HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETF(Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFC,RFC 1945定义了HTTP/1.0版本。其中最著名的就是RFC 2616。RFC 2616定义了今天普遍使用的一个版本——HTTP 1.1。

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。

2、http响应模型

HTTP协议永远都是客户端发起请求,服务器回送响应。见下图所示:
   深入浅出学习HTTP协议

这样就限制了使用HTTP协议,无法实现在客户端没有发起请求的时候,服务器将消息推送给客户端。

3、工作流程

一次HTTP操作称为一个事务,其工作过程可分为四步:

1)首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。

2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。

3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。

如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。

二、http请求

2.1、HTTP请求包括的内容

  客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个HTTP请求

一个完整的HTTP请求包括如下内容:一个请求行、若干消息头、以及实体内容
范例:

  深入浅出学习HTTP协议

2.2、HTTP请求的细节——请求行

  请求行中的GET称之为请求方式,请求方式有:POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT,常用的有: GET、 POST
  用户如果没有设置,默认情况下浏览器向服务器发送的都是get请求,例如在浏览器直接输地址访问,点超链接访问等都是get,用户如想把请求方式改为post,可通过更改表单的提交方式实现。
  不管POST或GET,都用于向服务器请求某个WEB资源,这两种方式的区别主要表现在数据传递上:如果请求方式为GET方式,则可以在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分隔,例如:GET /mail/1.html?name=abc&password=xyz HTTP/1.1
  GET方式的特点:在URL地址后附带的参数是有限制的,其数据容量通常不能超过1K。
  如果请求方式为POST方式,则可以在请求的实体内容中向服务器发送数据,Post方式的特点:传送的数据量无限制。

2.3、HTTP请求的细节——消息头

  HTTP请求中的常用消息头

  accept:浏览器通过这个头告诉服务器,它所支持的数据类型
  Accept-Charset: 浏览器通过这个头告诉服务器,它支持哪种字符集
  Accept-Encoding:浏览器通过这个头告诉服务器,支持的压缩格式
  Accept-Language:浏览器通过这个头告诉服务器,它的语言环境
  Host:浏览器通过这个头告诉服务器,想访问哪台主机
  If-Modified-Since: 浏览器通过这个头告诉服务器,缓存数据的时间
  Referer:浏览器通过这个头告诉服务器,客户机是哪个页面来的  防盗链
  Connection:浏览器通过这个头告诉服务器,请求完后是断开链接还是何持链接

例如:

深入浅出学习HTTP协议
1 Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg,
2 application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
3 Referer: http://localhost:8080/JavaWebDemoProject/Web/2.jsp
4 Accept-Language: zh-CN
5 User-Agent: Mozilla/4.0 (compatible; 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; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3)
6 Accept-Encoding: gzip, deflate
7 Host: localhost:8080
8 Connection: Keep-Alive

三、HTTP响应

3.1、HTTP响应包括的内容

  一个HTTP响应代表服务器向客户端回送的数据,它包括: 一个状态行、若干消息头、以及实体内容 。

  深入浅出学习HTTP协议
范例:

深入浅出学习HTTP协议
 1 HTTP/1.1 200 OK
2 Server: Apache-Coyote/1.1
3 Content-Type: text/html;charset=ISO-8859-1
4 Content-Length: 105
5 Date: Tue, 27 May 2014 16:23:28 GMT
6
7 <html>
8 <head>
9 <title>Hello World JSP</title>
10 </head>
11 <body>
12 Hello World!
13
14 </body>
15 </html>
深入浅出学习HTTP协议

3.2、HTTP响应的细节——状态行

    状态行格式: HTTP版本号 状态码 原因叙述<CRLF>
      举例:HTTP/1.1 200 OK
  状态码用于表示服务器对请求的处理结果,它是一个三位的十进制数。响应状态码分为5类,如下所示:
  aaarticlea/png;base64,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" alt="" />

3.3、HTTP响应细节——常用响应头

  HTTP响应中的常用响应头(消息头)
  Location: 服务器通过这个头,来告诉浏览器跳到哪里
  Server:服务器通过这个头,告诉浏览器服务器的型号
  Content-Encoding:服务器通过这个头,告诉浏览器,数据的压缩格式
  Content-Length: 服务器通过这个头,告诉浏览器回送数据的长度
  Content-Language: 服务器通过这个头,告诉浏览器语言环境
  Content-Type:服务器通过这个头,告诉浏览器回送数据的类型
  Refresh:服务器通过这个头,告诉浏览器定时刷新
  Content-Disposition: 服务器通过这个头,告诉浏览器以下载方式打数据
  Transfer-Encoding:服务器通过这个头,告诉浏览器数据是以分块方式回送的
  Expires: -1  控制浏览器不要缓存
  Cache-Control: no-cache  
  Pragma: no-cache

四、在服务端设置响应头来控制客户端浏览器的行为

4.1、设置Location响应头,实现请求重定向

 import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class ServletDemo01 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/**
* 设置服务器状态响应码:请求资源移动新地址
*/
response.setStatus(302);
/**
* 通过设置Location告诉浏览器跳转到哪里,所谓的请求重定向
*/
response.setHeader("Location", "/http_study/1.jsp");
} }

当在浏览器中使用URL地址"http://localhost:8080/http_study/ServletDemo01"访问ServletDemo01时,服务器返回一个302状态码告诉浏览器,你要的资源我没有,但是我通过Location响应头告诉你哪里有,而浏览器解析响应头Location后知道要跳转到//http_study/1.jsp页面,所以就会自动跳转到1.jsp,如下图所示:

深入浅出学习HTTP协议

4.2、设置Content-Encoding响应头,告诉浏览器数据的压缩格式

 package servlet;

 import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.GZIPOutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class ServletDemo02 extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
} protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String data = "我是asadfdsf我是asadfdsf我是asadfds"
+ "f我是asadfdsf我是asadfdsf"
+ "我是asadfdsf我是asadfdsf我是"
+ "asadfdsf我是asadfdsf我是asadfd"
+ "sf我是asadfdsf我是asadfdsf我是as"
+ "adfdsf我是asadfdsf我是asadfdsf我是"
+ "asadfdsf我是asadfdsf我是asadfdsf"
+ "我是asadfdsf我是asadfdsf我是asadfd"
+ "sf我是asadfdsf我是asadfdsf我是asa"
+ "dfdsf我是asadfdsf我是asadfdsf我是a"
+ "sadfdsf我是asadfdsf我是asadfdsf我是"
+ "asadfdsf我是asadfdsf我是asadfdsf我是"
+ "asadfdsf我是asadfdsf我是asadfdsf我是"
+ "asadfdsf我是asadfdsf我是asadfdsf我是"
+ "asadfdsf我是asadfdsf我是asadfdsf我是a"
+ "sadfdsf我是asadfdsf我是asadfdsf"; System.out.println("压缩前大小:"+data.getBytes().length);
/**
* 开始压缩
*/
ByteArrayOutputStream bout=new ByteArrayOutputStream();
GZIPOutputStream gout=new GZIPOutputStream(bout);
gout.write(data.getBytes());
gout.close();
//得到压缩数据
byte []b=bout.toByteArray();
response.setHeader("Content-Encoding", "gzip");
response.setHeader("Content-Length", b.length+"");
response.getOutputStream().write(b); } }
这里使用GZIPOutputStream流来压缩数据
当在浏览器中使用URL地址"http://localhost:8080/http_study/ServletDemo02"访问ServletDemo02时,可以看到请求头信息如下:

深入浅出学习HTTP协议

深入浅出学习HTTP协议

4.3、设置content-type响应头,指定回送数据类型

浏览器能接收(Accept)的数据类型有:
 application/x-ms-application,
 image/jpeg,
 application/xaml+xml,
 image/gif,
 image/pjpeg,
 application/x-ms-xbap,
 application/vnd.ms-excel,
 application/vnd.ms-powerpoint,
 application/msword,

 package servlet;

 import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class ServletDemo03 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //使用content-type指定发送给浏览器的数据类型为image/jpeg
response.setHeader("content-type", "image/jpeg");
//获取流
InputStream in=request.getServletContext().getResourceAsStream("/images/1.jpg");
//InputStream in=new InputStream("/images/1.jpg");
byte[] b=new byte[1024];
int ln=0;
OutputStream os=response.getOutputStream();
while((ln=in.read(b))!=-1){
os.write(b,0,ln);
}
} }

得到的响应为如图:

深入浅出学习HTTP协议

运行结果如下:

深入浅出学习HTTP协议

4.4、设置content-disposition响应头,让浏览器下载文件

package servlet;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class ServletDemo04 extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
} protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
/**
* 设置content-disposition响应头,让浏览器下载文件
*/
response.setHeader("content-disposition", "attachment;filename="+"1.jpg");
InputStream in=request.getServletContext().getResourceAsStream("images/1.jpg"); byte []b=new byte[1024];
OutputStream os=response.getOutputStream();
int len=0;
while((len=in.read())!=-1){
os.write(b,0,len);
} } }

在浏览器中访问localhost:8080/http_study/ServletDemo04就会弹出文件下载框,如下图所示:

深入浅出学习HTTP协议