HTTP协议简介
什么是通信
——通信就是信息的传递和交换
通信三要素:主体,内容,方式。
(服务器把张三的文章通过响应的方式发送给客户端浏览器)
其中通信的主体是服务器和客服端浏览器,内容是张三的文章,方式是响应
通信协议
——通信协议是指通信的双方完成通信所必须遵守的规则和约定。
客户端与服务器之间要实现网页内容的传输,则通信的双方必须遵守网页内容的传输协议。
网页内容又叫做超文本,因此网页内容的传输协议又叫做超文本传输协议(HyperText Transfer Protocol) ,简称 HTTP 协议。
HTTP协议
HTTP 协议即超文本传送协议 (HyperText Transfer Protocol) ,它规定了客户端与服务器之间进行网页内容传输时,所必须遵守的传输格式。
例如:
客户端要以HTTP协议要求的格式把数据提交到服务器
服务器要以HTTP协议要求的格式把内容响应给客户端
HTTP请求消息
——由于 HTTP 协议属于客户端浏览器和服务器之间的通信协议。因此,客户端发起的请求叫做 HTTP 请求,客户端发送到服务器的消息,叫做 HTTP 请求消息。注意:HTTP 请求消息又叫做 HTTP 请求报文。
HTTP请求消息的组成部分
HTTP 请求消息由请求行(request line)、请求头部( header ) 、空行 和 请求体 4 个部分组成
请求行由请求方式、URL 和 HTTP 协议版本 3 个部分组成,他们之间使用空格隔开
请求头部用来描述客户端的基本信息,从而把客户端相关的信息告知服务器。比如:User-Agent 用来说明当前是什么类型的浏览器;Content-Type 用来描述发送到服务器的数据格式;Accept 用来描述客户端能够接收什么类型的返回内容;Accept-Language 用来描述客户端期望接收哪种人类语言的文本内容。
请求头部由多行 键/值对 组成,每行的键和值之间用英文的冒号分隔。
头部字段 | 说明 |
Host | 要请求的服务器域名 |
Connection | 客户端与服务器的连接方式(close 或 keepalive) |
Content-Length | 用来描述请求体的大小 |
Accept | 客户端可识别的响应内容类型列表 |
User-Agent | 产生请求的浏览器类型 |
Content-Type | 客户端告诉服务器实际发送的数据类型 |
Accept-Encoding | 客户端可接收的内容压缩编码形式 |
Accept-Language | 用户期望获得的自然语言的优先顺序 |
- 请求体:请求体中存放的,是要通过 POST 方式提交到服务器的数据(注意:只有 POST 请求才有请求体,GET 请求没有请求体!
)HTTP响应消息
——响应消息就是服务器响应给客户端的消息内容,也叫作响应报文
HTTP响应消息的组成部分
HTTP响应消息由状态行、响应头部、空行 和 响应体 4 个部分组成,
状态行由 HTTP 协议版本、状态码和状态码的描述文本 3 个部分组成,他们之间使用空格隔开;
响应头部用来描述服务器的基本信息。响应头部由多行 键/值对 组成,每行的键和值之间用英文的冒号分隔。(关于更多响应头字段的描述,可以查看 : MDN 官方文档)
空行:响应消息中的空行,用来分隔响应头部与响应体。
响应体:响应体中存放的,是服务器响应给客户端的资源内容。
HTTP请求方法
HTTP请求方法属于HTTP协议中的一部分,请求方法的作用是:用来表明要对服务器上的资源执行的操作
(最常用的请求方法是GET和POST)
- GET(查询)发送请求来获得服务器上的资源,请求体中不会包含请求数据,请求数据放在协议头中。
- POST(新增)向服务器提交资源(例如提交表单或上传文件)。数据被包含在请求体中提交给服务器。
- PUT(修改)向服务器提交资源,并使用提交的新资源,替换掉服务器对应的旧资源。
- DELETE(删除)请求服务器删除指定的资源。
HTTP响应状态码
——HTTP 响应状态码(HTTP Status Code),也属于 HTTP 协议的一部分,用来标识响应的状态。
响应状态码会随着响应消息一起被发送至客户端浏览器,浏览器根据服务器返回的响应状态码,就能知道这次 HTTP 请求的结果是成功还是失败了。HTTP响应状态码的组成及分类
HTTP 状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字用来对状态码进行细分。
HTTP 状态码共分为 5 种类型:
1xx——信息,服务器收到请求,需要请求者继续执行操作(实际开发中很少遇到 1** 类型的状态码)
2xx——成功,操作被成功接收并处理
200 OK 请求成功,一般用于GET与POST请求 201 Created 已创建,成功请求并创建了新的资源,通常用于POST或PUT 3xx——重定向,需要进一步的操作以完成请求
301 Moved Permanently 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替 302 Found 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI 303 Not Modified 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源(响应消息中不包含响应体)。客户端通常会缓存访问过的资源。 4xx——客户端错误,请求包含语法错误或无法完成请求
400 Bad Request 1、语义有误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求。 2、请求参数有误。 401 Unauthorized 当前请求需要用户验证。 403 Forbidden 服务器已经理解请求,但是拒绝执行它。 404 Not Found 服务器无法根据客户端的请求找到资源(网页) 408 Request Timeout 请求超时。服务器等待客户端发送的请求时间过长,超时。 5xx——服务器错误,服务器在处理请求的过程中发生了错
500 Internal Server Error 服务器内部错误,无法完成请求。 501 Not Implemented 服务器不支持该请求方法,无法完成请求。只有 GET 和 HEAD 请求方法是要求每个服务器必须支持的,其它请求方法在不支持的服务器上会返回501 503 Service Unavailable 由于超载或系统维护,服务器暂时的无法处理客户端的请求。