目录
![](https://img2020.cnblogs.com/blog/1770354/202012/1770354-20201207105705212-428050952.png)
HTTP简介
HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写,用于浏览器与万维网(World Wide Web)服务器之间进行超文本传送的协议。
HTTP是一个使用TCP作为传输层协议。
HTTP工作原理
HTTP用于C-S(客户端-服务器)架构。浏览器作为客户端向Web服务器发送请求,Web服务器收到请求后返回响应给浏览器。
常用的Web服务器有:Apache、ISS等。
HTTP的默认端口号为80。
HTTP协议的三个特点:
- 无连接:“无连接并不是真的无连接”,而是每次连接只处理一个请求。请求时建立连接,请求完释放连接 ,服务器处理完客户端的请求,并收到应答后,即断开连接。这种方式可以节省传输时间。当然,HTTP也提供了
Keep-Alive
功能来避免重复建立连接。 - 允许传输任意类型的数据对象:数据传输的格式由MIME指定。
- 无状态:无状态是指HTTP对事物处理没有记忆能力,服务器不保存客户端的状态。缺少状态即意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。
Cookie
技术与Session
技术用于保持HTTP连接状态。
HTTP协议的通信流程:
参考资料:Cookie与Session、HTTP协议
HTTP消息结构
请求消息
请求消息自客户端发往服务器,请求消息由以下四个部分构成:
- 请求行(request line)
- 请求头部(header)
- 空行
- 请求数据
响应消息
HTTP响应由四个部分构成:
- 状态行
- 消息报头(header)
- 空行
- 响应正文
实例
请求报文:
GET /hello.txt HTTP/1.1User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3Host: www.example.com
Accept-Language: en, mi
响应报文:
HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: ApacheLast-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"Accept-Ranges: bytes
Content-Length: 51Vary: Accept-EncodingContent-Type: text/plain
HTTP请求方法
根据HTTP标准,HTTP提供了多种请求方法,
HTTP1.0定义了三种请求方法:GET, POST和HEAD方法。
HTTP1.1新增了六种请求方法:OPTION, PUT, PATCH, DELETE, TRACE和CONNECT方法。
方法 | 描述 |
---|---|
GET | 请求指定页面信息,并返回主体 |
POST | 向指定资源提交数据处理请求。数据被包含在请求体中。POST请求可能导致新资源的建立或已有资源的修改 |
HEAD | 类似于GET请求,不返回响应主体,只用于获取报头(header) |
PUT | 用从客户端向服务器传送的数据取代指定的文档内容 |
CONNECT | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器 |
DELETE | 请求服务器删除指定的页面 |
OPTIONS | 允许客户端查看服务器的性能 |
TRACE | 回显服务器收到的请求,主要用于测试或诊断 |
PATCH | 对PUT方法的补充,用来对已知资源进行局部更新 |
后来又新增了6种请求方法:
方法 | 描述 |
---|---|
MOVE | 请求服务器将指定的页面移至另一个网络地址 |
COPY | 请求服务器将指定的页面拷贝至另一个网络地址 |
LINK | 请求服务器建立链接关系 |
UNLINK | 断开链接关系 |
WRAPPED | 允许客户端发送经过封装的请求 |
Extension-method | 在不改动协议的前提下,可增加另外的方法 |
参考资料:GET方法与POST方法的区别
HTTP 响应头信息
下面这个表格是介绍了HTTP的一些响应头信息:
应答头 | 说明 |
---|---|
Allow | 服务器支持的请求方法(GET, POST...) |
Content-Encode | 文档的编码方式。只有在解码后才可以得到Content-Type指定的类型内容 |
Content-Length | 表示内容长度。只有在浏览器使用持久HTTP连接时才需要该数据 |
Content-Type | 表示后面的文档属于什么MIMEl类型 |
Date | 当前的GMT时间 |
Expires | 应该在什么时候认为文档已过期,从而不再缓存它 |
Last-Modify | 上次修改的时间 |
Location | 表明了客户应该到哪里取提取文档 |
Refresh | 表示浏览器应该在多久时间后刷新文档,以秒计 |
Server | 服务器的名字 |
WWW-Authenticate | 客户应该在Authenticate头中提取什么类型的授权信息 |
HTTP状态码
1xx(临时响应)
返回码 | 功能 | 说明 |
---|---|---|
100 | 继续 | 表示服务器已收到请求的第一部分,正在等待其余部分 |
101 | 切换协议 | 请求者已要求服务器切换协议,服务器已确认并准备切换 |
2xx(成功)
返回码 | 功能 | 说明 |
---|---|---|
200 | 成功 | 服务器已成功处理了请求。通常,这表示服务器提供了请求网页 |
201 | 已创建 | 请求成功并且服务器创建了新的资源 |
202 | 已接受 | 服务器已接受请求,但尚未处理 |
203 | 非授权信息 | 服务器已成功处理了请求,但返回的信息可能来自另一件事 |
204 | 无内容 | 服务器成功处理了请求,但没有返回任何内容 |
205 | 重置内容 | 服务器成功处理了请求,且没有返回任何内容(与204有所区别) |
206 | 部分内容 | 服务器已成功处理了部分GET请求 |
3xx(重定向)
返回码 | 功能 | 说明 |
---|---|---|
300 | 多种选择 | 针对请求,服务器可执行多种操作。服务器可根据请求者(user agent)选择一项操作,或提供操作列表供请求者选择 |
301 | 永久移动 | 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。 |
302 | 临时移动 | 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。 |
303 | 查看其他位置 | 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。 |
304 | 未修改 | 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。 |
305 | 使用代理 | 请求者只能使用代理访问请求的网页。如果服务器返回此响应,还表示请求者应使用代理。 |
307 | 临时重定向 | 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。 |
4xx(请求错误)
返回码 | 功能 | 说明 |
---|---|---|
400 | 错误请求 | 服务器不理解请求的语法 |
401 | 未授权 | 请求要求身份验证。对于需要登陆的网页,服务器可能返回此响应 |
403 | 禁止 | 服务器拒绝请求 |
404 | 未找到 | 服务器找不到请求的网页 |
405 | 方法禁用 | 禁用请求中指定的方法 |
406 | 无法使用请求的内容特性响应请求的网页 | |
407 | 需要代理授权 | 此状态代码与401(未授权)类似,但指定请求者应当授权使用代理 |
408 | 请求超时 | 服务器等候请求时发生超时 |
409 | 冲突 | 服务器在完成请求时发生冲突。服务器必须在响应中包含有关冲突的值 |
410 | 已删除 | 如果请求的资源已永久删除,服务器就会返回此响应 |
411 | 需要有效长度 | 服务器不接受不含有效内容长度标头字段的请求 |
412 | 未满足前提条件 | 服务器未满足请求者在请求中设置的某个前提条件 |
413 | 请求实体过大 | 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力 |
414 | 请求URI过程 | 请求的URI过长(通常位网址),服务器无法处理 |
415 | 不支持的媒体类型 | 请求的格式不受请求页面的支持 |
416 | 请求范围不符合要求 | 如果页面无法提供请求的范围,服务器会返回此状态代码 |
417 | 未满足期望值 | 服务器未满足“期望”请求标头字段的要求 |
5xx(服务器错误)
返回码 | 功能 | 说明 |
---|---|---|
500 | 服务器内部错误 | 服务器遇到错误 |
501 | 尚未实施 | 服务器不具备完成请求的功能。 |
502 | 错误网关 | 服务器作为网关代理,从上游服务器收到无效响应 |
503 | 服务不可用 | 服务器目前无法使用 |
504 | 网关超时 | 服务器作为网关或代理,但是没有及时从上游服务器收到请求 |
505 | HTTP版本不受支持 | 服务器不支持请求中所用的HTTP协议版本 |