HTTP是什么
超文本传输协议;全称:HyperText Transfer Protocol,缩写:HTTP。HTTP是一种被用于客户端与服务端之间信息传输的通信协议,客户端向服务端发送请求消息,服务端依次返回响应消息;HTTP基于TCP协议,运行在OSI七层模型中的应用层。
- HTTP是一种同步协议,只有在客户端向服务端发送请求后,服务端才会响应请求;服务端只能响应请求,无法主动与客户端建立连接;
- 无状态。每一个HTTP请求都是唯一的,且不和任何一个其他请求相关联。因为服务器不会跟踪任何状态信息,所以不会记住客户端是否访问过,也就是说,每一次请求都不知道之前的请求做了什么。
- 无连接。每一个请求仅在本次相应周期内发生连接,每次连接仅处理一个请求,服务端处理完客户端的请求,即断开连接。
HTTP请求报文由什么组成
每个HTTP请求报文都包含三部分:请求行,请求头,请求正文(请求体)。
请求行:
- 指定请求方法,告诉服务器如何处理信息或资源;
- 指定用于在服务器上查找资源的url;
- 指定正在使用的HTTP协议版本。
请求头:
请求头用于传递有关请求的更多信息,告诉服务器应如何处理客户端要求的信息。
请求正文(请求体):
这是HTTP请求可选部分,用于向服务器发送附加数据。
HTTP工作流程
- 客户端(浏览器)向服务器发送HTTP请求;
- 建立连接,TCP三次握手;
- 服务器接收请求;
- 服务器运行应用程序处理请求;
- 服务器向浏览器返回HTTP响应;
- 客户端(浏览器)收到响应。
- 断开连接,TCP四次挥手;
每次客户端从服务器请求任何内容时,都遵循这个过程。
常见HTTP请求方法
GET:GET用于从服务器获取信息,一般用于搜索查询和筛选数据之类的操作。是最常用的没有请求体的方法,每次打开网站时,都会触发GET请求网站内容。另外,GET相当于读取操作。GET主要有以下特征:
- 请求参数在请求行中,拼接在url后面,仅支持字符传数据类型;
- 值的长度限制通常为255个字符。值得注意的是,GET提交数据本身没有长度限制,是因为浏览器及服务器对url长度的限制;
- GET请求传递的参数会存储在浏览器历史记录中;
HEAD:HEAD方法类似于GET,也是从服务器请求资源,不同的是,服务器仅传回响应头,而不是整个响应体。如果在不需要下载文件的情况下,检查文件是否存在时,HEAD更合适,因为GET会获取整个文件。
POST:POST用于向服务器发送数据,可以使用POST请求添加或更新数据。常用于提交表单数据,POST是非幂等的。具有以下特征
- 通过请求体传递数据,在浏览器url中不可见;
- POST传递的值不会存储在浏览器历史记录中;
- POST发送的数据长度没有限制;
- 支持不同的数据类型,如字符串、二进制、整数等。
PUT:PUT类似于POST,区别在于PUT是幂等的,重复执行相同的PUT请求将产生同样的结果。
PATCH:PATCH类似于POST和PUT方法,用于对目标资源的部分更新,PUT会替换整个资源,PATCH更新目标资源的部分内容;PATCH与POST都是非幂等的。
DELETE:DELETE通过指定的url对目标资源进行删除,如果资源存在,它会被删除;如果重复调用DELETE通常会返回404状态码,因为目标资源已经被删除。
OPTIONS:OPTIONS返回服务器支持的方法和操作,而且它允许通过响应头返回服务器允许的HTTP请求方法列表。
常见HTTP状态码
2xx--请求成功
- 200:我们最喜欢的状态码,请求成功;
- 201:请求成功,创建了一个新资源,通常是在POST或PUT请求后响应;
- 202:已收到请求,但未进行响应。
3xx--重定向
- 301:请求资源的url已经永久更改,响应中给出新的url;
- 302:请求资源的url临时更改,将来可能会对url进一步更改。客户端后续的请求应该继续访问当前地址;
- 303:指示客户端应使用GET请求,在另一个url上获取请求的资源;
- 304:涉及HTTP缓存。服务器的资源没有发生改变,所以客户端可以直接使用浏览器本地缓存。
4xx-- 客户端错误
- 400:服务端无法理解请求语法。通常是请求数据格式、语法错误;
- 401:未经授权,需要进行身份验证;
- 403:用户没有权限,服务器拒绝请求;
- 404:服务器找不到资源;
5xx-- 服务器错误
- 500:服务器内部错误,不知如何处理;
- 501:服务器不支持该请求方法,无法处理;
- 502:服务器作为网关获取处理请求所需响应时,得到了无效响应;
- 503:服务器尚未准备好处理请求。常见原因是服务器维护、停机或过载;
- 504:服务器作为网关,无法及时获得响应;
- 505:服务器不支持请求中使用的HTTP版本;
HTTP与HTTPS
HTTP以明文的方式进行数据传输,所以HTTP是不安全的,为解决HTTP的安全性问题,诞生了HTTP的好大哥--HTTPS。
HTTPS英文全称Hyper Text Transfer Protocol over SecureSocket Layer,超文本传输安全性协议。是对HTTP拓展的安全版本,默认使用端口443进行数据通信。HTTPS在HTTP的基础上使用SSL加密协议进行数据加密传输。
两者的区别:
HTTP | HTTPS |
地址栏为http:// | 地址栏为https:// |
默认端口80 | 默认端口443 |
明文传输,不安全 | 具有安全性的加密传输 |
不需要CA证书 | 需要CA证书 |
加载速度快 | 与HTTP相比,加载速度较慢,因为支持额外的安全性功能 |