HTTP协议学习笔记|前端必知的网络知识

什么是HTTP

HTTP是超文本传输协议的缩写,是互联网上应用最广泛的网络协议。我们每次浏览网页、请求接口,底层都是HTTP在工作。

HTTP是基于请求-响应模式的。客户端发起请求,服务端返回响应。

URL结构

URL就是网址,它的完整结构是这样的:

https://www.example.com:443/path/to/page?a=1&b=2#section

协议:https
域名:www.example.com
端口:443
路径:/path/to/page
查询参数:a=1&b=2
锚点:section

HTTP请求

一个HTTP请求由三部分组成:请求行、请求头、请求体。

一、请求行

包含请求方法、请求路径、HTTP版本。

GET /api/users HTTP/1.1

二、请求头

包含各种元信息,比如:

Host:服务器域名
User-Agent:客户端信息
Accept:客户端能接收的内容类型
Content-Type:请求体的内容类型
Authorization:认证信息

三、请求体

POST和PUT等请求会携带请求体,比如表单数据或JSON数据。

请求方法

最常用的请求方法有这几个:

GET:获取资源,参数在URL中,有长度限制,一般用于查询数据

POST:创建资源,参数在请求体中,没有长度限制,一般用于提交数据

PUT:更新资源,一般用于完整更新

PATCH:部分更新资源

DELETE:删除资源

GET和POST的区别是面试常问的:

GET参数在URL里,POST参数在请求体里

GET有长度限制,POST没有

GET可以被浏览器缓存,POST不会

GET不敏感,POST相对安全一点

HTTP响应

HTTP响应也由三部分组成:状态行、响应头、响应体。

一、状态行

包含HTTP版本、状态码、状态描述。

HTTP/1.1 200 OK

二、响应头

包含服务器信息、内容类型、缓存策略等。

Content-Type:application/json
Cache-Control:max-age=3600

三、响应体

服务器返回的具体数据,比如JSON或HTML。

状态码详解

状态码是服务器告诉客户端请求结果的数字代码,分为五类。

1xx:信息响应,请求已被接收,继续处理

这个类别很少用到,了解一下就行。

2xx:成功,请求被成功处理

200 OK:请求成功,最常用的状态码

201 Created:资源创建成功,一般用于POST请求

204 No Content:请求成功但没有内容返回,一般用于DELETE请求

3xx:重定向,需要进一步操作

301 Moved Permanently:资源永久移动到新地址,搜索引擎会更新链接

302 Found:临时重定向,资源还在原地址,只是这次临时跳转

304 Not Modified:资源没有修改,可以使用缓存

4xx:客户端错误,请求有问题

400 Bad Request:请求格式错误,参数不对

401 Unauthorized:没有认证,需要登录

403 Forbidden:认证了但没有权限访问

404 Not Found:请求的资源不存在,最常见的问题之一

405 Method Not Allowed:请求方法不被允许

429 Too Many Requests:请求太频繁,触发了限流

5xx:服务端错误,服务器处理失败

500 Internal Server Error:服务器内部错误,后端代码报错

502 Bad Gateway:网关错误,上游服务器出问题

503 Service Unavailable:服务不可用,服务器过载或正在维护

504 Gateway Timeout:网关超时,上游服务器响应太慢

常见Header

一、Content-Type

告诉对方我发送的是什么格式的数据。

application/json:JSON格式
application/x-www-form-urlencoded:表单格式
multipart/form-data:文件上传格式
text/html:HTML文档

二、Cache-Control

控制缓存策略。

Cache-Control:no-cache 每次都去验证缓存
Cache-Control:no-store 完全不缓存
Cache-Control:max-age=3600 缓存一小时

三、Authorization

传递认证信息,最常用的是Bearer Token。

Authorization:Bearer eyJhbGciOiJIUzI1NiIs...

HTTPS是什么

HTTPS是HTTP加上SSL/TLS加密层,数据在传输过程中是加密的,更安全。

现在的网站基本都要求用HTTPS,小程序也强制要求HTTPS。

HTTPS需要申请SSL证书,有免费的也有收费的,免费的够用。

前端常用场景

场景一:封装请求函数

async function request(url, options = {}) {
const response = await fetch(url, {
headers: {
'Content-Type': 'application/json',
'Authorization': Bearer ${getToken()}
},
...options
})

if (!response.ok) {
throw new Error(HTTP ${response.status})
}

return response.json()
}

场景二:处理不同的状态码

if (response.status === 401) {
// 未认证,跳转到登录页
redirectToLogin()
} else if (response.status === 403) {
// 无权限,提示用户
showMessage('你没有权限执行此操作')
} else if (response.status === 404) {
// 资源不存在
showMessage('请求的资源不存在')
}

总结

HTTP协议是前端开发的基础知识,不用背下来,但要理解核心概念。

面试常问的点:状态码含义、GET和POST区别、请求头和响应头的作用。

实际工作中,会看状态码定位问题、会看Network面板就够了。

 

共 1 页 1 条数据