HTTP (Protocol协议)
客户端和服务端
HTTP涉及两个对象- 客户端和服务端, 顾名思义, 服务端是为客户端服务的, 服务端会随时准备着, 而不会主动发起数据, 只有在客户端发起请求的时候, 服务端才会响应
请求和响应
我们平时上网就是要获取网络的资源, 要获取网络上的资源就要进行通信, 也就是客户端要和服务端进行网络通信, 客户端发送请求报文, 服务端回应响应报文, HTTP规定了请求报文和响应报文的格式, 可以简单的理解为如下的格式
方法和状态码
方法中最常见的是"增删改查", 也即如下四种
1、POST /url 创建
2、DELETE /url/xxx 删除
3、PUT /url/xxx 更新
4、GET /url/xxx 查看
状态码有各自的区间
- 1xx 接收的请求还在处理中
- 2xx 成功
- 201 Created 已创建
- 204 No Content 无内容
- 3xx 重定向: 资源现在不在了
- 301 Move Premanently 永久移动
- 302 Found 临时移动
- 304 Not Modified 服务器资源未修改, 可以使用缓存中的内容
- 4xx 客户端错误
- 400 Bad Request 语法错误
- 401 Unauthorized 身份认证失败
- 403 Forbidden 拒绝: 没有权限访问
- 404 Not Found 找不到请求的资源
- 409 Conflict 冲突: 编辑冲突了
- 5xx 服务器错误
- 500 Internal Server Error服务器内部发生错误或故障
- 502 Bad Gateway 网关错误
- 503 Service Unavailable 超载或维护
首部
Content-type 内容类型
我们每次发送请求后, 服务器可能会返回各种不同的数据类型, 例如文件/图片或者视频, 要注意, HTTP支持传输任意类型的数据, 但是有了Content-type首部让浏览器可以对数据类型做出更好的处理
应用层
报文是按照什么形式发送出去的呢, 把网络通信按照TCP/IP划分, 得到基于TCP/IP的四层结构网络通信模型, 其中最顶部的两层是应用层和传输层, 应用层就是最靠近用户的一层, 也是用户能够直接接触到的, 我们平时输入网址时前面都是有http/https字样的, 只不过现代浏览器自动补全, 不需要我们自己写了而已
除了协议名以外, 浏览器也因为我们输入的网址, 可以分析出服务器地址和资源位置, 这样就可以生成报文了, 注意, 网址上还隐藏着服务器端口号80, 可以在网址后面添加:80的字段, 正常都是可以加载网页的
HTTP - 直接提供用户访问资源的一种协议, 是应用层的
TCP/IP模型有好几层, 但都有各自的功能, 这样才能把报文发送出去, 但是对于HTTP来说重要的是看传输层, 因为传输层协议是来配合它定义传输数据的方式, 也就是需要在传输层里选择协议
传输层里面最主要的就是TCP协议和UDP协议了, 绝大多数HTTP采用TCP协议, 因为TCP有三次握手的机制, 很可靠; 如果使用UDP, 那即使服务器响应了, 接收到的网页也可能是不完整的
持久连接和非持久连接
HTTP1.1中, 默认连接为持久连接, 服务器返回消息后, 客户端可以继续发起下一个请求, 如果没有要发送的, 客户端最后发送Connection: close首部给服务器, 这样就会进行关闭
无状态和状态管理
虽然HTTP实现了持久连接, 也不代表可以一直保持连接, 是有时间限定的
HTTP一开始设计时, 服务器一次只会处理一条信息, 这样可以大大减少服务器的资源消耗
如果互联网每一台主机都来访问同一台服务器, 而服务器又要把他们的信息全部记录下来, 这样服务器肯定是要崩溃的, 所以服务器不会把每个状态都记录下来, 这就是HTTP的无状态
对于网页的用户登录功能, 如果是无状态的话, 用户登陆了一次, 第二次又要输入信息登录, 无疑是麻烦的, 为了保持登录状态, 就有了Cookie这项技术, 这项技术需要在请求头(Request Headers)字段加上Cookie信息, 这样就能够实现保持登录的状态了, 从而实现状态管理