目录
一、认识URL
平时俗称的网址就是URL,也叫统一资源定位符
例如QQ官网Windows版本的下载网址:https://im.qq.com/pcqq/index.shtm
现在使用的协议都是https,但是不影响我们以它为例讲解URL:
- https是使用的应用层协议
- im.qq.com是域名,会通过DNS自动转换为IP地址
- /pcqq/index.shtm是文件路径,所有的资源都存放在服务器中,根据文件路径就可以确认所查找的文件资源在服务器的具体位置
- 端口号,协议与端口号是强关联的,使用http协议的服务器默认端口号为80,使用https协议的服务器默认端口号为443
有了IP地址和端口号,以及文件路径,就可以在互联网中找到指定服务器中的指定资源了
二、HTTP协议的请求/响应格式
请求格式:
- 请求行:
- 请求方法:GET、POST、HEAD、DELETE......
- URI:一般是URL中所访问资源的路径,也可能是完整的URL
- HTTP版本:http/1.0、http/1.1、http/2.0
- 请求报头:Key: Value,一般是本次请求的一些属性,或者发起请求方的一些属性
- 空行:区分报头和正文(空行之前的都是报头、空行之后的是正文)
- 请求正文:可有可无


响应格式:
- 状态行:
- HTTP版本:必须与请求格式中的版本对应(http/1.0、http/1.1、http/2.0)
- 状态码:如、100,200,301,304,404,500等
- 状态码描述:对于状态码的解释
- 响应报头:包含内容控制头、连接控制头、缓存控制头、安全相关头、重定向头
- 空行:区分响应报头和响应正文
- 响应正文:请求方所请求的资源内容,例如HTML网页、图片、音频等


三、HTTP协议中的详细属性
1.请求/响应报头
- Content-Type:请求/响应资源的类型,如text/html(HTML文档),video/mp4(MP4视频),image/gif(GIF图片),text/plain(纯文本)......
- Content-Length:正文的长度
- Connection:控制连接状态,即持久连接和非持久连接。持久连接允许客户端和服务器在请求/响应完成后不立即关闭 TCP 连接,以便在同一个连接上发送多个请求和接收多个响应。在 HTTP/1.1 协议中,默认使用持久连接。在 HTTP/1.0 协议中,默认连接是非持久的。Connection: keep-alive:表示希望保持连接以复用 TCP 连接。 Connection: close:表示请求/响应完成后,应该关闭 TCP 连接。
- Host:客户端告知服务端请求的资源在哪个主机的哪个端口上(客户端访问的服务端可能会将资源存放在其他服务器上,当前服务器再做二次请求)
- User-Agent:声明用户所使用的操作系统以及浏览器版本信息
- Referer:表明当前页面是从哪个页面跳转过来的(服务器中存在多个HTML页面,可以相互跳转)
- Location:存放的是新的URL,配合状态码3xx和201使用,当服务器返回3xx状态码(如301、302、307等)时,Location头部指定客户端应跳转的新URL;当服务器返回201状态码时,表明服务器正在创建新资源,Location可提供新资源的访问路径
- Cookie:服务器通过
Set-Cookie
头部向客户端(浏览器)写入数据,客户端后续请求通过Cookie
头部携带该数据。通常用于实现会话(session)的功能
2.请求方法
最常用的是GET和POST方法
- GET:用于请求URL中的指定资源;或者通过URL向服务器传递参数
- POST:用于向服务器提交数据,适用于表单提交、文件上传、触发服务端操作等场景;或者通过应答的正文向服务器传递参数

3.状态码

(1)基本状态码
|-----|------------------|---------------------------------|
| 状态码 | 含义 | 应用样例 |
| 100 | Continue | 上传大文件时, 服务器告诉客户端可以继续上传 |
| 200 | OK | 访问网站首页, 服务器返回网页内容 |
| 201 | Created | 发布新文章, 服务器返回文章创建成功的信息 |
| 204 | No Content | 删除文章后, 服务器返回"无内容"表示操作成功 |
| 301 | MovedPermanently | 网站换域名后, 自动跳转到新域名; 搜索引擎更新网站链接时使用 |
|-----|----------------------|-------------------------------|
| 302 | Found 或 See Other | 用户登录成功后, 重定向到用户首页 |
| 304 | Not Modified | 浏览器缓存机制, 对未修改的资源返回304 状态码 |
| 400 | Bad Request | 填写表单时, 格式不正确导致提交失败 |
| 401 | Unauthorized | 访问需要登录的页面时, 未登录或认证失败 |
| 403 | Forbidden | 尝试访问你没有权限查看的页面 |
| 404 | Not Found | 访问不存在的网页链接 |
| 500 | Internal ServerError | 服务器崩溃或数据库错误导致页面无法加载 |
| 502 | Bad Gateway | 使用代理服务器时, 代理服务器无法从上游服务器获取有效响应 |
| 503 | Service Unavailable | 服务器维护或过载, 暂时无法处理请求 |
(2)重定向状态码
|-----|-------------------|-----------|--------------------------------|
| 状态码 | 含义 | 是否为临时重定向 | 应用样例 |
| 301 | MovedPermanently | 否(永久重定向) | 网站换域名后, 自动跳转到新域名;搜索引擎更新网站链接时使用 |
| 302 | Found 或 See Other | 是(临时重定向) | 用户登录成功后,重定向到用户首页 |
| 307 | TemporaryRedirect | 是(临时重定向) | 临时重定向资源到新的位置(较少使用) |
| 308 | PermanentRedirect | 否(永久重定 向) | 永久重定向资源到新的位置(较少使用) |
HTTP状态码301和302都要依赖报头属性Location:
- 301(永久重定向):当服务器返回 HTTP 301 状态码时, 表示请求的资源已经被永久移动到新的位置。服务器会在响应中添加一个 Location 头部, 用于指定资源的新位置。 这个 Location 头部包含了新的 URL 地址, 浏览器会自动重定向到该地址。
- 302(临时重定向):当服务器返回 HTTP 302 状态码时, 表示请求的资源临时被移动到新的位置。服务器也会在响应中添加一个 Location 头部来指定资源的新位置。 浏览器会暂时使用新的 URL 进行后续的请求, 但不会缓存这个重定向。