1、HTTP是什么?
HTTP全称——超文书传输协议,可以在浏览器和服务器之间传输文字、图片、视频等超文本数据的约定和规范。注意,HTTP 协议是应用层的协议
2、特点
(1)HTTP是无连接的:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
(2)HTTP是无状态的:无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
(3)HTTP是媒体独立的:只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
3、请求报文
HTTP请求报文由请求行,请求头,空行,请求体 四个部分组成。
日常中的http请求一般都为这样,如:
归纳总结其大致结构如下:
3.1、请求行
请求行由三个部分组成: 请求方法、请求地址URL和 HTTP协议版本,它们之间用空格分割。例如,GET /index.html HTTP/1.1
-
请求方法:比如最常见的GET和POST
-
HTTP协议版本常见的一般有两种:HTTP1.0和HTTP1.1 ,
-
可以这样简单进行区分:
HTTP1.0对于每个连接都只能传送一个请求和响应,请求就会关闭,HTTP1.0没有Host字段
HTTP1.1在同一个连接中可以传送多个请求和响应,多个请求可以重叠和同时进行,HTTP1.1必须有Host字段。
请求方法如下(有些面试官会让你说出好几种请求方法,虽然日常中get和post够用了):
| GET | 请求获取Request-URI所标识的资源,即向服务器获取数据 |
|---|---|
| POST | 将实体提交到指定的资源,通常会造成服务器资源的修改 |
| HEAD | 与 GET 类似,但服务器在响应中值返回首部,不返回实体的主体部分 |
| PUT | 请求服务器存储一个资源,并用Request-URI作为其标识。即用请求主体部分来创建一个由URL命名的新文档。上传文件,修改数据 |
| DELETE | 请求服务器删除Request-URI所标识的资源 |
| TRACE | 请求服务器回送收到的请求信息,主要用于测试或诊断 |
| CONNECT | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器 |
| OPTIONS | 查询与资源相关的选项和需求,询问支持的请求方法,用来跨域请求 |
3.2、请求头部
请求头部可以在请求过程中附加信息。其提供有关请求上下文的信息,以便服务器可以定制响应。
格式由“键/值”对组成,每行一对,名和值之间使用冒号分隔,如:Connection: keep-alive
大多数请求头并不是必需的,但Content-Length除外。对于POST请求来说 Content-Length必须出现。
常见的请求头如下:
- Accept: 浏览器可接收到数据格式
- Accept-Charset:浏览器能够显示的字符集
- Accept-Encoding:浏览器能够进行解码的数据编码方式,比如 gzip
- Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中
- Connection:keep-alive:一次TCP连接重复使用
- cookie
- If-Modified-Since:户机通过这个头告诉服务器,资源的缓存时间。只有当所请求的内容在指定的时间后又经过修改才返回它,否则返回304“Not Modified”应答。
- Host 域名:客户机通过这个头告诉服务器,想访问的主机名。Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。
- User-Agent(简称UA)浏览器信息
- Content-type:发送数据的格式,如 application/json
- Content-Length:表示请求消息正文的长度
- Referer:发出请求的页面的URL
3.3、请求体
若方法字段是GET,则此项为空,没有数据
若方法字段是POST,则通常来说此处放置的就是要提交的数据
比如要使用POST方法提交一个表单,其中有user字段中数据为“admin”, password字段为123456,那么这里的请求数据就是 user=admin&password=123456,使用&来连接各个字段。
4、响应报文
HTTP响应报文由状态行,响应头,空行,响应体 四个部分组成。
响应示例:
4.1、状态行
状态行:包括协议版本、状态码、状态码描述,之间由空格分隔
4.2、响应头部
与请求头部类似,为响应报文添加了一些附加信息
常见响应头部如下:
| 响应头 | 说明 |
|---|---|
| Server | 服务器应用程序软件的名称和版本 |
| Content-Type | 响应正文的类型(是图片还是二进制字符串) |
| Content-Length | 响应正文长度 |
| Content-Charset | 响应正文使用的编码 |
| Content-Encoding | 响应正文使用的数据压缩格式 |
| Content-Language | 响应正文使用的语言 |
| Expires: -1、Cache-control:no-cache、Pragma:no-cache | 三个响应头一起使用, 表示禁止浏览器缓存当前页面. 每个浏览器厂商对认识的禁止头不同因此三个一起使用。 |
后面可以聊一聊http的版本发展