一、HTTP报文的结构
1、HTTP报文
- HTTP通信过程包括客户端往服务器端发送请求以及服务器端给客户端返回响应两个过程。在这两个过程中就会产生请求报文和响应报文。
- HTTP报文是用于HTTP协议交互的信息,HTTP报文本身是由多行数据构成的字符串文本。客户端的HTTP报文叫做请求报文,服务器端的HTTP报文叫做响应报文。
- HTTP报文由报文首部和报文主体构成,中间由一个空行分隔。 报文首部是客户端或服务器端需处理的请求或响应的内容及属性, 可以传递额外的重要信息。报文首部包括请求行和请求头部,报文主体主要包含应被发送的数据。通常,不一定有报文主体。
2、HTTP报文首部的结构
由首部字段名和字段值构成的,中间用冒号“:”分割。首部字段格式: 首部字段名:字段值。
例如,在HTTP首部中以Content-Type这个字段来表示报文主体的对象类型:Content-Type:text/html。
上述的Content-Type是首部字段名,text/html是字段值,字段值可以是多个值,例如:Keep-Alive:timeout=15,max=10。
HTTP首部字段通常有4种类型:通用首部,请求首部,响应首部,实体首部。
3、HTTP请求方法
请求方法 | 描述 |
GET | 请求指定的页面信息,并返回实体主体。 |
POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。 |
HEAD | 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头。 探测网站内是否存在某个文件,经常使用这个方法扫描 |
OPTIONS | 探测目标网站服务器开启了哪些HTTP方法 |
PUT | 向目标服务器上传数据,例如文本文档 |
PATCH | 是对 PUT 方法的补充,用来对已知资源进行局部更新 。 |
DELETE | 请求服务器删除指定的页面。 |
TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
CONNECT | HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。 |
1.GET方法和POST方法的区别:
1:GET方法用于信息获取,它是安全的(安全:指非修改信息,如数据库方面的信息),而POST方法是用于修改服务器上资源的请求;
2:GET请求的数据会附在URL之后,而POST方法提交的数据则放置在HTTP报文实体的主体里,所以POST方法的安全性比GET方法要高;
3:GET方法传输的数据量一般限制在2KB,其原因在于:GET是通过URL提交数据,而URL本身对于数据没有限制,但是不同的浏览器对于URL是有限制的,比如IE浏览器对于URL的限制为2KB,而Chrome,FireFox浏览器理论上对于URL是没有限制的,它真正的限制取决于操作系统本身;POST方法对于数据大小是无限制的,真正影响到数据大小的是服务器处理程序的能力。
4、请求报文结构
一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据(请求体)4个部分组成。
1.请求行
请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。比如 GET /info.html HTTP/1.1
方法字段就是HTTP使用的请求方法,比如常见的GET/POST
其中HTTP协议版本有两种:HTTP1.0/HTTP1.1 可以这样区别:
HTTP1.0对于每个连接都只能传送一个请求和响应,请求就会关闭,HTTP1.0没有Host字段;而HTTP1.1在同一个连接中可以传送多个请求和响应,多个请求可以重叠和同时进行,HTTP1.1必须有Host字段。
2.请求头部
HTTP客户程序(例如浏览器),向服务器发送请求的时候必须指明请求类型(一般是GET或者 POST)。如有必要,客户程序还可以选择发送其他的请求头。大多数请求头并不是必需的,但Content-Length除外。对于POST请求来说 Content-Length必须出现。
3.空行
它的作用是通过一个空行,告诉服务器请求头部到此为止。
4.请求数据
若方法字段是GET,则此项为空,没有数据。
若方法字段是POST,则通常来说此处放置的就是要提交的数据。
请求报文示例:
5、响应报文结构
HTTP响应报文由三部分组成:响应行、响应头、响应体。
1.响应行
响应行一般由协议版本、状态码及其描述组成 比如 HTTP/1.1 200 OK
其中协议版本HTTP/1.1或者HTTP/1.0,200就是它的状态码,OK则为它的描述。
2.响应头
响应头用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据。
3.响应体
响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码,如此之类。
响应报文示例:
二、HTTP状态码
HTTP状态码的作用是:Web服务器用来告诉客户端,发生了什么事。
当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。
1、状态码分类
HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:
1xx消息——请求已被服务器接收,继续处理
2xx成功——请求已成功被服务器接收、理解、并接受
3xx重定向——需要后续操作才能完成这一请求
4xx请求错误——请求含有词法错误或者无法被执行
5xx服务器错误——服务器在处理某个正确请求时发生错误
常见状态码
100 | Contiune | 继续,客户端应继续其请求 |
200 | OK | 请求成功 |
201 | Created | 成功请求并创建了新资源 |
301 | Moved Permanently | 永久移动,返回信息包括新url,浏览器自动定向到新URL |
302 | Found | 临时移动,客户端应继续使用原有URL |
303 | See Other | 查看其它地址,使用Get,POST请求查看 |
403 | Forbidden | 服务器理解客户端的请求,但拒绝执行此请求 |
404 | Not Found | 服务器无法根据客户端的请求找到资源 |
500 | Internal Server Error | 服务器内部错误 |