HTTP基本概念
本文最后更新于:8 个月前
内容包括:http请求方法、常见状态码、报文结构、常见字段
HTTP基本概念
HTTP 是超文本传输协议,也就是HyperText Transfer Protocol。
一、请求方法
方法 | 用途 |
---|---|
GET | 通常用来获取资源 |
POST | 提交数据,即上传数据 |
HEAD | 获取资源的元信息 |
PUT | 修改数据 |
DELETE | 删除资源(几乎用不到) |
CONNECT | 建立连接隧道,用于代理服务器 |
OPTIONS | 列出可对资源实行的请求方法,用来跨域请求 |
TRACK | 追踪请求-响应的传输路径 |
GET 和 POST 的区别
- GET,的语义是从服务器获取指定资源,幂等(多次重复操作的结果是相同的)
- POST,的语义是根据请求负荷body,对指定的资源做出处理,不幂等
GET | POST | |
---|---|---|
缓存 | 浏览器主动缓存,留下历史记录 | POST 默认不会 |
编码 | 只能进行 URL 编码,只能接收 ASCII 字符 | POST 没有限制 |
参数 | 一般放在 URL 中,因此不安全 | 放在请求体中,更适合传输敏感信息 |
TCP的角度 | 把请求报文一次性发出去 | 分为两个 TCP 数据包,首先发 header 部分, 如果服务器响应 100(continue), 然后发 body 部分 |
二、常见状态码
- 1XX,Informational(信息性状态码), 接受的请求正在处理
- 2XX,Success(成功状态码) 请求正常处理完毕
http状态码 | http Status Code | http状态码含义中文说明 |
---|---|---|
200 | 200 OK | 请求成功 |
201 | 201 Created | 请求已被接受,等待资源响应 |
204 | 204 No Content | 请求已成功处理,但无返回内容(Options请求返回这个) |
- 3XX,Redirection(重定向状态码) 需要进行附加操作以完成请求
http状态码 | http Status Code | http状态码含义中文说明 |
---|---|---|
301 | 301 Moved Permanently | 永久重定向 |
302 | 302 Found | 临时重定向 |
303 | 303 See Other | 当前请求的资源在其它地址 |
304 | 304 Not Modified | 请求资源与本地缓存相同,未修改 |
307 | 307 Temporary Redirect | 临时重定向,同302,禁止改变http方法 |
308 | 308 Permanent Redirect | 永久重定向,且禁止改变http方法 |
- 4XX,Client Error(客户端错误状态码) 服务器无法处理请求
http状态码 | http Status Code | http状态码含义中文说明 |
---|---|---|
400 | 400 Bad Request | 请求错误,通常是访问的域名未绑定引起 |
401 | 401 Unauthorized | 需要身份认证验证 |
403 | 403 Forbidden | 禁止访问 |
404 | 404 Not Found | 请求的内容未找到或已删除 |
405 | 405 Method Not Allowed | 不允许的请求方法 |
408 | 408 Request Timeout | 请求超时 |
- 5XX,Server Error(服务器错误状态码) 服务器处理请求出错
http状态码 | http Status Code | http状态码含义中文说明 |
---|---|---|
500 | 500 Internal Server Error | 服务器端程序错误 |
503 | 503 Service Unavailable | 服务器端临时错误 |
505 | 505 HTTP Version Not Supported | 服务器不支持的HTTP版本 |
599 | 599 Network Connect Timeout Error | 网络连接超时 |
更多状态码请参考:HTTP状态码大全(常见 HTTP Status Code 含义查询) - 桔子SEO (juziseo.com)
三、报文结构
请求报文和响应报文的结构均为:起始行 + 头部 + 空行 + 实体
,不过内容有所区别
1、请求报文
- 起始行:方法 + 路径 + http版本
1 |
|
头部 header,例如
X-Access-Token:xxx
头部字段的格式:
- 不区分大小写,最后全部转为小写
- 字段名不允许出现空格,不可以出现下划线
_
- 字段名后必须紧接着
:
空行,用来区分开header和body
请求体 body
2、响应报文
- 起始行,又称状态行:http版本 + 状态码 + 原因
1 |
|
头部 header
空行,同请求报文
响应体 body
参考文章:(建议精读)HTTP灵魂之问,巩固你的 HTTP 知识体系 - 掘金 (juejin.cn)
四、常见字段
1、Content-Type
用于指示资源的 MIME 类型。
在响应中,Content-Type 标头告诉客户端实际返回的内容的内容类型。浏览器会在某些情况下进行 MIME 查找,并不一定遵循此标题的值;
在请求中 (如POST
或 PUT
),客户端告诉服务器实际发送的数据类型。
取值 | 说明 |
---|---|
text/html | HTML格式 |
text/plain | 纯文本格式 |
text/xml | XML格式 |
multipart/form-data | 需要在表单中进行文件上传时,使用该格式 |
application/x-www-form-urlencoded | 表单默认的提交数据格式(form表单数据被编码为key/value格式) |
application/json | JSON数据格式 |
2、Content-Length
Content-Lengtj:1000
,表明服务器本次回应的数据长度是1000个字节,后面的字节就属于下一个回应了。
HTTP通过设置 空行 来作为header的边界,通过 Content-Length 字段作为body的边界
3、Connection: Keep-alive
http1.1版本开始,默认使用长连接
4、Content-Encoding
表明数据的压缩方法,表示服务器返回的数据用了什么压缩格式。客户端请求的时候,用Accept-Encoding
字段声明自己可以接受哪些压缩方法
例如:Content-Encoding: gzip
,Accept-Encoding: gzip, deflate
5、Accept
用来告知(服务器)客户端可以处理的内容类型,这种内容类型用MIME 类型来表示。