本文主要分为以下几个模块:
- Http简介及工作流程
- Http消息结构
- Http请求方法和常见状态信息
一、Http简介及工作流程
Http是计算机网络中应用层的一个协议,是基于Tcp/Ip协议之上的。咱们不说得那么官方,协议 说白了就是规范了一种数据传递的标准;试想,如果没有协议的规范,那么我们传递和接受数据时,岂不是五花八门,各有各的说法了。
Http工作流程如图:
二、Http消息结构
Request消息结构
前面说了,协议就是一种规范。那么http协议是怎样规范传递的数据呢?所以我们有必要研究以下Http的消息结构。
其实Http的消息只有两种,一种是Request请求消息,一种是Response接收消息。前者是客户端给服务端发送的,用于请求相应资源;后者是服务端给客户端发送的,用于响应客户端的请求。
Request消息结构如图:
以上图我们可以简单理解为:
<Request Line> //请求行
<Request Head> //请求头部
<Request Body> //请求体
通常,请求行中会携带一些简单的信息,如Http协议版本、请求方式GET或POST等。请求头中会有一些重要信息,比如:
Host:你所请求的主机
Refer:客户端主机Ip
Accept-Language: 客户端能接受的语言
User-Agent: 客户端的一些信息
......
请求体中往往会是客户端请求提交的一些参数(POST请求方式下),以及其他的一些请求数据。
Request头部了解这么多应该就可以了。
Response消息结构
Response消息结构如图所示,抓包过程中所观察到的Response消息内容:
第一行是Response的消息行,可以说是最重要的部分了。
它指明了所使用的HTTP协议类型(Http/1.1),也指明了响应信息,此处 状态码 是200,就是说请求成功,一切正常,除此之外还有常见的404, 500等错误都是出自于这里的状态码。
响应报头大概看看就行了,Content-Length指明了响应报的长度,在抓包暴破过程中是有些用的,Content-Type指明了Response-Body中返回的文档类型,这里我们可以看到,后面的文档显然是html类型的。
Response-Body称为响应体,生活中,我们请求的大多数都是html页面,所以一般来讲,Response-body中都会包含一个几百上千行的html代码。由此可见,Response消息的大小应该是远远大于Resquest消息的。
三、Http请求方法和常见状态信息
前面我们在介绍消息结构的时候简要带了一下请求方法和状态信息,这里还需要详细讲讲,因为这两个部分太重要了。
Request请求方法我们只需要知道两个,GET和POST。这两个请求方法在JavaEE开发中见了很多次。
GET方法:
其特点是客户端的参数会设置到请求行(Request Line)中,所以url上会显示出用户的请求参数;这样的传参非常简单,而且所耗资源少,但保密性不强,不够安全。
POST方法:
其特点是,客户端的参数会设置到Request-body请求体中去,这样的话就更加安全了。
Response常见状态信息
2** 往往就是操作成功,典型代表就是200
4** 往往就是客户端的错误,典型代表404。共同特点都是客户端操作失误,跟服务器的代码逻辑无关。
5** 往往就是服务器端的错误,典型代表是500。往往是服务器出现了bug,导致崩溃,是服务器的错误。