目录
HTTP协议简介
超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求—响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。
请求和响应消息的头以ASCII形式给出,而消息内容则具有一个类似MIME的格式。HTTP协议采用了请求/响应的交互模型
,这个简单模型是早期Web成功的有功之臣,因为它使开发和部署非常地直截了当。
HTTP请求
由于HTTP协议属于客户端浏览器和服务器之间的通信协议。因此,客户端发起的请求叫做HTTP请求
,客户端发送到服务器的消息叫做 HTTP请求消息
。请求消息也叫做请求报文
。HTTP请求消息由请求行
(request line)、请求头部
( header ) 、空行
和请求体
4个部分组成。下图可见它们的格式。
1、请求行
请求行由请求方式
、URL
和HTTP协议版本
3个部分组成,他们之间使用空格隔开。如下图get请求:从左到右分别是请求方式、url和http协议版本。post请求同理。如何发送get/post请求可以移步我的Node.js这篇博客:Node.js接口的编写
2、请求头部
请求头部用来描述客户端的基本信息,从而把客户端相关的信息告知服务器。比如: User-Agent
用来说明当前是什么类型的浏览器;Content-Type
用来描述发送到服务器的数据格式;Accept
用来描述客户端能够接收什么类型的返回内容;Accept-Language
用来描述客户端期望接收哪种人类语言的文本内容。请求头部由多行键/值对组成,每行的键和值之间用英文的冒号分隔。
一些常见的请求头字段如下表:
头部字段 | 说明 |
---|---|
Host | 要请求的服务器域名 |
Connection | 客户端与服务器的连接方式(close 或 keepalive) |
Content-Length | 用来描述请求体的大小 |
Accept | 客户端可识别的响应内容类型列表 |
User-Agent | 产生请求的浏览器类型 |
Content-Type | 客户端告诉服务器实际发送的数据类型 |
Accept-Encoding | 客户端可接收的内容压缩编码形式 |
Accept-Language | 用户期望获得的自然语言的优先顺序 |
3、空行
最后一个请求头字段的后面是一个空行,通知服务器请求头部至此结束。请求消息中的空行用来分隔请求头部与请求体。
4、请求体
请求体中存放的是要通过POST方式提交到服务器的数据。注意:只有POST请求才有请求体,GET请求没有请求体!
HTTP响应消息
HTTP响应消息(也就是响应内容)由状态行
、响应头部
、空行
和响应体
4个部分组成:
1、状态行
状态行由HTTP协议版本
、状态码
和状态码的描述文本
3个部分组成,他们之间使用空格隔开。示例如下图:
2、响应头部
响应头部用来描述服务器的基本信息。响应头部由多行键/值对组成,每行的键和值之间用英文的冒号分隔。示例如下:
3、空行
在最后一个响应头部字段结束之后会紧跟一个空行,用来通知客户端响应头部至此结束。
4、响应体
响应体中存放的是服务器响应给客户端的资源内容。
下图中response的内容就是响应体:
HTTP请求方法
HTTP请求方法属于HTTP协议中的一部分,请求方法的作用是用来表明要对服务器上的资源执行的操作。
最常用的请求方法是GET和POST。
HTTP中的所有请求方法
方法 | 描述 |
---|---|
GET | (查询)发送请求来获得服务器上的资源,请求体中不会包含请求数据,请求数据放在协议头中。 |
POST | (新增)向服务器提交资源(例如提交表单或上传文件)。数据被包含在请求体中提交给服务器。 |
PUT | (修改)向服务器提交资源,并使用提交的新资源替换掉服务器对应的旧资源。 |
DELETE | (删除)请求服务器删除指定的资源。 |
HEAD | HEAD方法请求一个与GET请求的响应相同的响应,但没有响应体 。 |
OPTIONS | 获取http服务器支持的http请求方法,允许客户端查看服务器的性能,比如ajax跨域时的预检等。 |
CONNECT | 建立一个到由目标资源标识的服务器的隧道。 |
TRACE | 用沿着到目标资源的路径执行一个消息环回测试,主要用于测试或诊断。 |
PATCH | 是对PUT方法的补充,用来对已知资源进行局部更新。 |
关于这些请求方法的使用案例可移步:请求方法的使用案例
HTTP响应状态代码
HTTP响应状态码(HTTP Status Code),也属于HTTP协议的一部分,用来标识响应的状态。响应状态码会随着响应消息一起被发送至客户端浏览器,浏览器根据服务器返回的响应状态码,就能知道这次HTTP请求的结果是成功还是失败了。示例如下:
所有的响应状态码可见:http响应状态码大全
总结
有关http协议的相关知识就分享到这啦!总体来说还是挺简单的通俗易解的,即使忘了也可以及时查缺补漏呀!