http请求,get请求和post请求体以及响应体

一、http请求

1.Http请求格式

Http请求即客户端发送给服务器的请求。该请求的内容格式如下所示:

请求首行

请求头信息

空行

请求正文,也称请求体

2.使用HttpWatch抓包工具

请求信息详细内容如下:

GET /Example03/ HTTP/1.1
Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/x-shockwave-flash, application/msword, application/vnd.ms-powerpoint, application/vnd.ms-excel, */*
Accept-Language: en-US,zh-CN;q=0.5
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; qdesk 2.4.1265.203; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.3)
Accept-Encoding: gzip, deflate
Host: localhost:8080
Connection: Keep-Alive
Cookie: JSESSIONID=9E0C4BDEAFD1EB2B1060D69C3B96F72D

(1)首先分析其请求首行:GET  /Example03/ HTTP/1.1

GET :指的是请求方式。

/Example03 :指的是请求地址,即URL

HTTP/1.1 :指的是协议及版本号。

(2)接着分析请求头信息,由以上请求头信息可知,请求头信息的格式如下所示:

l请求头名称

冒号

请求头值

现在我们来一一分析这些请求头,理解它们的作用:

Accept :告诉服务器当前浏览器支持的MIME类型。

Accept-Language :告诉服务器当前浏览器支持的语言环境,这里的值是en-USzh-CNenà表示英文,USà表示美国,zhà表示中文,CNà表示中国。

User-Agent :表示当前浏览器的类型和OS的类型,其中MSIE 8.0表示是ie浏览器,版本是8.0等。

Accept-Encoding :当前浏览器支持的数据压缩格式,有时候服务器给浏览器发送的东西很大,这时候服务器就要考虑当数据被压缩后,浏览器能不能给解压出来,那么这个请求头就是浏览器告诉服务器它能够解压的格式。

Host :浏览器请求的主机名和端口号,在这里它请求的主机是localhost,虽然后面没有显示端口号,但是你要知道这个端口号是80,它是http协议默认的端口号。

Connection :连接的方式,Keep-Alive表示的意思是连接一会。

Cookie :这是一个与cookie相关的请求头。

(3)请求信息中的空行,处于请求头和请求正文之间。

(4)以上请求信息中没有请求正文,是因为该请求方式是GET请求,而GET方式的请求信息中是没有请求正文的,我们接下来要学习POST请求有请求正文。后面我们会详细介绍请求正文。

二、http的get和post请求

HTTP请求消息中,请求方式有GETPOSTHEADOPTIONSDELETETRACEPUTCONNECT八种。而在以后们最常用的有两种请求方式:POST请求、GET请求。这两种请求方式所对应的请求协议内容略有不同,在上面中,我们已经了解了GET请求方式的请求信息,下面是Post请求。

1.POST请求

我们在浏览器地址栏上直接输入网址访问资源,这种请求方式是GET请求,超链接请求也属于GET请求,下面我们要演示的是POST请求:

(1) 创建一个web应用,名称为Example04,并在该应用中的WebRoot目录下新建一个form.html文件

用户名:
密码:

(2) 将Example04发布到Tomcat中,启动Tomcat服务器。在浏览器端地址栏上输入http://localhost:8080/Example04/form.html,并使用HttpWatch进行抓包。

(3) 在用户名文本框中输入:zhangsan,密码文本框中输入:123再点击【提交】按钮。

(4)我们通过HttpWatch成功的抓取到form表单提交之后的请求信息。

POST /Example04/index.jsp HTTP/1.1
Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/x-shockwave-flash, application/msword, application/vnd.ms-powerpoint, application/vnd.ms-excel, */*
Referer: http://localhost:8080/Example04/form.html
Accept-Language: en-US,zh-CN;q=0.5
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; qdesk 2.4.1265.203; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.3)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: localhost:8080
Content-Length: 30
Connection: Keep-Alive
Cache-Control: no-cache
 
username=zhangsan&password=123

(5)现在我们再抓取一段GET方式请求信息,在浏览器地址栏上输入:http://localhost:8080/Example04?username=zhangsan&password=123

(6)get请求信息

GET /Example04?username=zhangsan&password=123 HTTP/1.1
Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/x-shockwave-flash, application/msword, application/vnd.ms-powerpoint, application/vnd.ms-excel, */*
Accept-Language: en-US,zh-CN;q=0.5
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; qdesk 2.4.1265.203; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.3)
Accept-Encoding: gzip, deflate
Host: localhost:8080
Connection: Keep-Alive
Cookie: JSESSIONID=5386A9443729D7EB0B61E38A9C7CF52F

post方式请求信息与get方式请求信息进行比较,有以下两点区别:

1.请求首行区别:请求参数的位置不同

以上两种请求方式都是带参数的请求,POST请求首行是:POST /Example04/index.jsp HTTP/1.1GET请求首行为: GET /Example04?username=zhangsan&password=123 HTTP/1.1,其中GET请求首行中,”?”后面的是请求参数,多个请求参数之间用”&”连接。可以看出,POST请求的请求参数并不在请求首行中。

2.GET请求没有请求体,POST请求有请求体

GET请求没有请求体。从例1-2可以看出,POST请求有请求体,而且请求体的内容是从form.html页面提交过来的参数。这些参数的格式:参数名=参数值&参数名=参数值&…,get请求没有请求体,它的请求参数附加在请求首行的url后面。

三、http的响应

1.什么是HTTP响应

当服务器收到浏览器的请求后,会发送响应消息给浏览器。一个完整的响应消息主要包括响应首行、响应头信息、空行和响应正文。其中,每个部分都代表了不同的含义。下面我们会围绕HTTP响应消息的每个组成部分进行详细分析。

2.HTTP响应消息分析

下面我们通过HttpWatch抓包工具,抓取一段响应信息,然后对该信息进行分析。

(1)创建web应用Example05,将该应用发布到Tomcat服务器,启动Tomcat服务器。在浏览器地址栏输入http://localhost:8080/Example05/index.jsp。使用HttpWatch进行抓包,抓取的响应消息

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=UTF-8
Content-Length: 624
Date: Mon, 03 Nov 2014 06:37:28 GMT
 


  
    
    My JSP 'index.jsp' starting page


    



  
  
    This is my JSP page. 

响应消息内容,分析可知:

(1)响应首行:其内容是”HTTP/1.1  200  OK”

HTTP/1.1 :表示协议版本

200 :表示响应状态码,200表示响应成功。

OK :表示响应成功,对响应状态码的解释。

(2)响应头信息:类似于请求消息中的请求头,其格式和请求头信息格式一样,即响应头:响应头值。

Server响应头 :该响应头是服务器告诉浏览器,当前响应的服务类型和版本。

Content-Type响应头 :服务器告诉浏览器响应内容是什么类型,以及采用的是什么字符编码。该响应头的值现在为:text/html;charset=utf-8。说明响应信息的类型是文本类型中的html,使用的字符编码是utf-8

Content-Length响应头 :服务器告诉浏览器,响应内容的长度,该响应内容的长度现在是624个字节。

Date响应头 :表示是服务器是在什么时候响应回浏览器,注意这里的时间是按照美国时间来计算。

(3)空行:响应头和响应体由空行连接。

(4)响应体:该响应消息的响应体是一个html文档。浏览器可以直接识别这个html文件。而我们访问的是一个jsp文件,响应回去的是一个html文件。说明服务器将该jsp翻译成了一个html,然后再响应给浏览器。




你可能感兴趣的:(http请求,get请求和post请求体以及响应体)