计算机网络
HTTP请求的方法
方法 | 说明 | 详细说明 |
---|---|---|
GET | 获取资源 | 用来请求获取一斤被URI标识的资源,指定获取的资源经过服务器解析后返回响应内容( 我想要获取这个资源) |
POST | 传输实体主体 | 用来传输实体的主体。POST的主要目的并不是获取响应的主体内容(我想把这条信息告诉你) |
PUT | 传输文件 | 将请求文件内容包含在请求报文中,保存到指定的URI的位置 |
DELETE | 删除文件 | 与PUT相反,将指定的URI的资源删除掉(我想要删除这个信息) |
DEAD | 获取报文首部 | 与GET方法一样,但是不返回报文主题内容,用于确认URI的有效性和资源更新的日期时间等等(想要知道某个信息的部分信息) |
CONNECT | 要求使用隧道协议连接代理 | 要求在与代理服务器建立通信的时候建立隧道,实现用隧道协议TCP通信,主要使用SSL、TSL协议把通信内容加密后经网络隧道传输 |
等等…
HTTP常见的状态码
状态码 | 类别 | 原因短语 |
---|---|---|
1xx | information(信息类状态码) | 接收的请求正在处理 |
2xx | Success(成功状态码) | 请求已完成正常处理 |
3xx | Rediretion(重定向状态码) | 需要附加操作以完成请求 |
4xx | Client error(客户端错误状态码) | 服务器无法处理请求 |
5xx | Server error(服务器错误状态码) | 服务器处理请求错误 |
状态码详解
2xx
- 200:OK
- 204 not content:请求已经成功处理,但是返回的响应报文不包含实体的主体部分(body)。一般只需要从客户端往服务器发送信息,而不需要返回数据时使用。
3xx
- 301 :Move Permanently 永久性重定向
- 302 Found:临时性重定向
- 303 :和302一样的功能,但是303明确要求客户端应该采用 GET 方法获取资源
- 304 Not Modified:如果请求报文首部包含一些条件,比如:If-Match,If-ModifiedSince、If-None-Match、If-Range,If-Unmodified-Since,如果不满足条件,服务器会返回304状态码
- 307 Temporary Redirect:临时重定向,和302含义类似,但是307要求浏览器不会把重定向请求的 POST 方法改为 GET 方法
4xx
- 400 Bad Request:请求报文中存在语法错误
- 401 Unauthorized:表示发送的请求需要有认证信息(BASIC认证、DIGEST认证)。如果之前已进行过一次请求,则表示用户认证失败
- 403 Forbidden:请求被拒绝
- 404
5xx
- 500 Internal Server Error:服务器正在执行请求时发生错误
- 501 Not Implemented:表示客户端请求的功能还不支持
- 502 Bad Gateway:通常是服务前作为网关或代理时返回的错误,表示服务器自身工作正常,访问后端服务器发生错误
- 503 Service Unavailable:服务器暂时处于超负载或正在进行停机维护,现在无法处理请求
HTTP 无状态
HTTP是无状态的,因为如果是有状态,记住的话对服务器造成很大的压力,这样子服务器需要记住大量的请求。因此通过Cookie和Session来记住状态。 Cookie 来保存信息,使得它可以处理大量事务。Cookie 是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器之后向同一服务器再次发起请求的时候被携带上,用于告知服务端两个请求是否来自同一服务器。
cookie的用途
- 会话状态管理,比如登录
- 设置,比如主题、用户自定义设置
- 浏览器跟踪行为:跟踪用户行为轨迹
如何创建cookie
- 服务器返回的响应里包含set-cookie字段,客户端事多响应报文后将Cookie保存在本地浏览器中
客户端如何使用Cookie
- 客户端再去请求服务器时带上Cookie字段,放在首部字段中发送到服务器端
session
session 与cookie类似,但是session存在服务器端
Session应用之登录
- 用户进行登录时,用户提交包含用户名和密码的表单,放入 HTTP 请求报文中
- 服务器验证该用户名和密码,如果正确则把用户信息存储到 Redis 中,它在 Redis 中的 Key 称为 SessionID
- 服务器返回的响应报文的 Set-Cookie 首部字段包含了这个 SessionID,客户端收到响应报文之后将该 Cookie 存入本地
- 客户端之后对同一个服务器进行请求时会包含这个 Cookie 值,服务端收到之后提取出 SessionID,从 Redis 中取出用户信息,继续之前的业务操作
一次完整的HTTP请求
- 根据域名解析IP地址
- 建立一个TCP连接
- 发送HTTP请求
- 收到HTTP响应
- 释放TCP连接