概念
定义
http( HyperText Transfer Protocol, 超文本传输协议) 最早就是计算机与计算机之间沟通的一种协议,这种协议限制了通讯内容的格式以及各项内容的含义。随着时代的发展,技术的变迁,这种协议现在广泛的应用在各种领域,也不仅仅局限于计算机与计算机之间,手机、电脑等各种智能设备很多时候都在使用这种协议通讯,所以一般现在称HTTP为端与端之间的通讯协议
应用软件架构一般分为两类:
- B/S架构 : Browser(浏览器) ←→ Server (服务器),这种软件都是通过浏览器访问一个网站使用,服务器提供数据存储等服务。
- C/S架构 : Client(客户端) ←→ Server (服务器),这种软件通过安装一个软件到电脑,然后使用,服务器提供数据存储等服务。
约定的内容
- 请求/响应报文格式
- 请求方法
- 响应状态
- 预设的请求/响应头
约定的形式
- 客户端通过随机端口与服务端某个固定端口(一般为80) 建立连接
- 客户端通过这个连接发送请求到服务器
- 服务端监听端口得到的客户端发送过来的请求
- 服务端通过连接响应给客户端状态和内容
核心概念
请求报文
请求行:GET / index.html HTTP/1.1
请求方式+空格+请求路径+空格+HTTP协议版本
请求头:客户端想要告诉服务端的一些额外信息,以下为常见的请求头 ↓
键 | 值 |
---|---|
Host | 请求的主机 |
Cache-Control | 控制缓存(例如:max-age=60 缓存 60 秒) |
Accept | 客户端想要接收的文档类型,逗号分隔 |
User-Agent | 标识什么客户端帮你发送的这次请求 |
Referer | 这次请求的来源 |
Accept-Encoding | 可以接收的压缩编码 |
- 请求体:这次请求客户端想要发送给服务端的数据正文,一般在GET请求请求时很少用到,应为GET请求主观上都是去 拿东西。
响应报文
状态行:HTTP/1.1 200 ok
HTTP协议版本 + 空格 + 状态码 + 空格 + 状态描述
响应头:服务端想要告诉客户端的一些额外信息,常见的有 ↓
键 | 值 |
---|---|
Date | 响应时间 |
Server | 服务器信息 |
Content-Type | 响应的内容类型 |
Content-Length | 响应的内容大小 |
- 响应体:这次请求服务端想要返回给客户端的数据正文,一般返回的都是HTML,也可以返回javascript和css
应用场景
设置响应文件类型
- header(‘Content-Type :text/css’);
重定向(跳转到其它网页)
- header(‘Location:http://wenlai1010.github.io’);
下载文件
1
2
3
4//让文件下载
header('Content-Type: application/octet-stream');
//设置默认下载文件名
header('Content-Disposition: attachment;filename=demo.txt');
请求方式
GET: 拿,获取
POST: 发,给
- 对比GET与POST
| | GET | POST |
| :------- | ---------------------------------------- | ---------------------------------------- |
| 后退按钮/刷新 | 无害 | 数据会被重新提交(浏览器应该告知用户数据会被重新提交) |
| 书签 | 可收藏为书签 | 不可收藏为书签 |
| 缓存 | 能被缓存 | 不能缓存 |
| 编码类型 | application/x-www-form-urlencoded | application/x-www-form-urlencoded或multipart/form-data.为二进制数据使用多重编码 |
| 历史 | 参数保留在浏览器历史中 | 参数不会保存在浏览器历史中 |
| 对数据长度的限制 | 有,当发送数据时,GET方法想url添加数据,URL的最大长度是2048个字符。 | 无限制 |
| 对数据类型的限制 | 只允许ASCII字符 | 没有限制也允许二进制数据 |
| 安全性 | 与post相比,GET的安全性较差,因为所发送的数据是URL的一部分。在发送密码或其他敏感信息是绝不要使用GET | POST比GET更安全,因为参数不会被保存在浏览器历史或web服务器日志中。 |
| 可见性 | 数据在URL中对所有人都是可见的 | 数据不会显示在URL中 |
状态码
状态码由三为数字组成,第一个数字定义了响应的类别
- 1**:提示信息—-表示请求已接收,继续处理。
- 2**:成功—-表示请求已成功接受。
- 3**:重定向—-要完成请求必须进行更近一步的操作。
- 4**:客户端错误—-请求有语法错误或请求无法实现。
- 5**:服务器错误—-服务器未能实现合法的请求。
常见的状态码描述如下:
- 200 OK : 客户端请求成功。
- 400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
- 401 Unauthorized:请求未经授权,这个状态码必须和www-Authenticate 报头域一起使用。
- 403 Forbidden:服务器收到请求,但是拒绝提供服务。
- 404 Not Found:请求的资源不存在
- 500 internal Server Error 服务器发送不可预期的错误。
- 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常。