http
http
请求
概述
http
是基于 请求-响应 的方式完成通信的,每一次通信都是由客户端向服务端发出请求,传递一些消息过去,然后经过服务器处理程序处理后,响应给客户端一些消息。
http
协议规定:
- 每次 请求-响应 都是独立的,相互之间互不干扰,这种模式的协议我们称之为 无状态协议。
- 每次 请求-响应 传递的消息都是**纯文本(字符串)**,而且文本格式必须按照
http
协议规定的格式书写。
请求的消息格式
请求消息格式有三部分组成
请求行:高度概括了客户端想要干什么
请求头:描述了请求的一些额外信息
请求体:包含了要给服务器传递的正文数据。请求体是可以省略的
请求行
请求行是整个http
报文的第一行字符串,它包含三个部分:请求方法 路径+参数+hash 协议和版本
重点关注的是请求方法
- get获取资源
- post提交消息
- put修改数据
- delete删除数据
其中get
和delete
请求不能有请求体,而post
和put
请求可以有请求体
浏览器遵循了上面的规范,这带来了get和post的诸多区别。比如,由于get请求没有请求体,所以要传递数据只能把数据放到url的参数中
在浏览器中,获取数据一般使用的都是get请求,比如
- 在地址栏输入地址并按下回车
- 点击了某个a元素
- 获取图片、音频、视频
- 获取css、js、字体等文件
事实上、浏览器自动发出的请求基本都是get请求,而post请求需要开发者手动处理,比如在form表单中设置method为post
请求头header
请求头是一系列的键值对、里面包含了诸多和业务无关的信息
浏览器每次请求服务器都会自动附带很多请求头,其实这些请求头大部分服务器是不需要的
我们只需要关注下面几个请求头即可:
Host:url地址中的主机
User-Agent:客户端的信息描述
Content-Type:请求的消息是什么格式,如果没有请求体,这个字段没有意义
该字段的常见取值为:
application/x-www-form-urlencoded
- 表示请求体的数据格式和url地址中参数的格式一样,比如
loginId=admin&loginPwd=123123
- 表示请求体的数据格式和url地址中参数的格式一样,比如
application/json
- 表示请求体的数据是json格式
{"loginId":"admin","loginPwd":"123123"}
- 表示请求体的数据是json格式
mutipart/form-data
- 一种特殊的请求体格式,上传文件一般选择该格式
请求体body
请求的主体内容
响应
响应的消息格式
服务器的响应格式包含三个部分
响应行
响应行是整个响应字符串的第一行
响应行包含两个部分
- 协议版本:表示服务器打算和客户端用什么协议通信
- 状态码、状态消息:表示服务器对当前请求的表态
通常状态码分为5类
分类 | 分类描述 |
---|---|
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务端错误,服务器在处理请求的过程中发生错误 |
通常认为,0-399之间的状态码都是正常的,其他是不正常的
常见的状态码有
- 200 ok 一切正常
- 301 Moved Permanently:资源已被永久重定向
你的请求我收到了,但是你要的东西已经不再这个地址上了,我已经永远的把它移动到了一个新的地址,麻烦你去请求新的地址,地址我放到请求头的Location里面了
- 302 Found:资源已被临时重定向
你的请求我收到了,但是你要的东西已经不再这个地址上了,我已经临时的把它移动到了一个新的地址,麻烦你去请求新的地址,地址我放到请求头的Location里面了
- 304 Not modified:文档内容未被修改。
你的请求我收到了,你要的东西跟之前是一样的,没有任何变化,所以我就不给你结果了,你自己就用以前的吧。啥?你没有缓存,那不关我的事。
- 400 Bad Request:语义有误,当前请求无法被服务器理解
盯又盯不懂,鞋又鞋不会
- 403 Forbidden:服务器拒绝执行
你的请求我收到了,但是我就是不给你东西
- 404 Not Found:资源不存在
你的请求我收到了,但是我没有你想要的东西
- 500 Internal Server Error:服务器内部错误
你的请求我已经收到了,但是这道题我不写,先睡了
响应头Header
和请求头一样,响应头也是由很多个键值对组成,具体有哪些键值对,完全取决于服务器程序,目前,对我们最重要的键值对是Content-type,他有多种取值,表示响应体的数据类型,在B/S模式中,浏览器会自动根据响应头中Content-type的取值,决定如何处理响应体
text/plain
:普通的纯文本,浏览器通常会将响应体原封不动的显示到页面上text/html
:html文档,浏览器通常会将响应体作为页面进行渲染text/javascript
或者application/javascript
:js代码,浏览器通常会使用JS执行引擎将他解析执行text/css
:css代码,浏览器会将它视为样式image/jpeg
:浏览器会将它视为jpg图片attachment
:附件,浏览器看到这个类型,通常会触发下载功能- 其他
MIME
类型
响应体body
响应的主体内容