HTTP报文之"请求报文"和"响应报文"详解
一、报文序言
HTTP协议简介:超文本传输协议(英文:Hyper Text Transfer Protocol,缩写:HTTP)是互联网上应用最为广泛的一种网络协议。
HTTP报文:它是HTTP应用程序之间发送的数据块。这些数据块以一些文本形式的元信息开头,这些信息描述了报文的内容及含义,后面跟着可选的数据部分。这些报文都是在客户端、服务器和代理之间流动。
HTTP报文的流动方向:一次HTTP请求,HTTP报文会从“客户端”流到“代理”再流到“服务器”,在服务器工作完成之后,报文又会从“服务器”流到“代理”再流到“客户端”。
ps: 报文分为请求报文和响应报文
请求报文:从客户端发往服务器的报文叫请求报文。
响应报文:服务器收到请求报文后,作为响应发往客户端的报文称为响应报文。
二、请求报文
请求报文:它会向Web服务器请求一个动作
请求报文的格式:
起始行: <method> <request-URL> <version>
头部: <headers>
主体: <entity-body>
1
2
3
4
5
请求报文包括三个部分,第一部分是请求行,第二部分是Headers,第三部分是Body。
详细分析如下
①请求行
请求行包括三个部分,第一个是方法。常见的有get,post,put,delete。第二个是路径,也就是服务器地址后面的部分,第三个是http的版本。
比如 https://mp.csdn.net/users,这个users就是路径,当前的主流版本是http 1.1。具体格式如下,
GET /users HTTP/1.1
②请求头 Headers
Headers有很多,这里只介绍一些常用的。
Content-Type:内容的类型
常见类型 含义
text/html 用于浏览器间响应
x-www-form-urlencoded 纯⽂本表单的提交⽅式
multitype/form-data 含有⼆进制⽂件时的提交⽅式
application/json json格式
Content-Length:指定 Body 的⻓度(字节)
Location:指定重定向的⽬标 URL
User-Agent:⽤户代理,即是谁发送或接受响应的,可以用来区分浏览器发送的请求还是手机发送的请求。
③主体
报文主体就是报文的主要数据部分,它可以是任意数据类型的数据。
比如请求主体中包含了要发给服务器的数据,响应主体中装载了要返回给客户端的数据。
起始行和首部都是文本化且具有特定结构的,主体则可包含所有二进制数据和文本。
三、响应报文
响应报文:它会将请求的结果返回给客户端。
响应报文的格式:
起始行: <version> <status> <reason-phrase>
头部: <headers>
主体: <entity-body>
1
2
3
4
5
响应报文也包括三个部分,第一部分是状态行,第二部分是Headers,第三部分是Body。
①关于状态行
状态包括三个部分.第一个是http版本,常用的还是1.1。第二个是状态码,常见的有200,表示成功,404,表示找不到内容。第三个是状态信息。
具体格式如:HTTP/1.1 200 OK
②响应头部
与请求头部类似,为响应报文添加了一些附加信息。
常见响应头部如下:
常见单词 含义
Server 服务器应用程序软件的名称和版本
Content-Type 响应正文的类型(是图片还是二进制字符串)
Content-Length 响应正文长度
Content-Charset 响应正文使用的编码
Content-Encoding 响应正文使用的数据压缩格式
Content-Language 响应正文使用的语言
③响应正文Body
服务器发送给客户端的内容,也是客户端所请求的内容。
请求报文和响应报文 参考图解
状态码拓展
HTTP状态码被分成了五大类。状态码为客户端提供了一种理解事务处理结果的便捷方式。
状态码 含义
100~199 (信息性状态码) HTTP/1.1向协议中引入了信息性状态码
200~299 (成功状态码) 客户端发起请求时,这些请求通常都是成功的。服务器有一组用来表示成功的状态码,分别对应于不同类型的请求
300~399 (重定向状态码) 重定向状态码要么告知客户端使用替代位置来访问他们所感兴趣的资源,要么就提供一个替代的响应而不是资源的内容
400~499 (客户端错误状态码) 有时客户端会发送一些服务器无法处理的东西。浏览网页时,我们都看到过臭名昭著的404 Not Found错误码,这只是服务器在告诉我们,它对我们请求的资源一无所知
500~599 (服务器错误状态码) 有时客户端发送了一条有效请求,服务器自身却出错了,这些会返回5xx状态码
The best investment is in yourself