HTTP协议是计算机网络的基本协议,对于前端工程师,HTTP协议是必须了解的一部分内容。前端面试中也会经常被问到这部分的内容,这里就总结一下。
HTTP协议的作用
HTTP协议是应用层的协议,它已经不涉及数据包之类的传输,它规定了网络中客户端和服务器之间的通信格式。客户端通过URL向HTTP服务端即Web服务器发送请求,Web服务器根据接收到的请求后,向客户端发送响应信息。
HTTP协议特点
HTTP协议主要特点总结如下:
- 简单快速:客户端向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户端与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
- 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
- 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
- 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
HTTP请求报文
客户端以请求报文的形式发送请求到服务端,HTTP请求报文由请求行、请求头和请求体组成。
请求行
请求行由请求方法字段、URL字段和HTTP协议版本字段三部分组成,用空格分隔。例如:1GET /index.html HTTP/1.0
HTTP协议的请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT等。我的另一篇博客中有总结过。
请求头部
请求头部由键值对组成,每行一对,请求头部通知告诉服务器关于客户端本次请求的信息。常用的请求头有:
- Accept:用于指定客户端接受哪些类型的返回。例如:Accept:text/html,表明客户端希望接受html文本。
- Accept-Charset:用于指定客户端接受的字符集,默认是任何字符集都可以接受。
- Accept-Encoding:用于指定可接受的内容编码,默认是任何编码都能接受。
- Accept-Language:用于指定可接受的自然语言,默认是任何语言都能接受。
- Host:用于指定被请求资源的主机和端口号,通常从URL中提取出来。
- User-Agent:产生请求的客户端类型。
请求体
请求体中是客户端要传送给服务端的数据。
HTTP响应报文
服务端接收并处理客户端的数据后会返回一个HTTP的响应消息,HTTP响应报文由状态行、响应头和响应正文组成。
状态行
状态行由HTTP协议版本号、状态码和状态消息组成。例如:1HTTP/1.1 200 OK
状态码
HTTP状态码是一个三位数,总共分为5种类型。常见的状态码可以参考HTTP状态码大全
- 1xx:指示信息–表示请求已接收,继续处理。
- 2xx:成功–表示请求已被成功接收。
- 3xx:重定向–要完成请求必须进行更进一步的操作。
- 4xx:客户端错误–请求有语法错误或请求无法实现。
- 5xx:服务器端错误–服务器未能实现合法的请求。
响应头
响应头的格式和请求头相同,常用的响应头有:
- Content-Encoding:用于指定媒体类型的修饰符,指示了已经被应用到实体正文的附加内容编码。
- Content-Language:用于指定资源所用的自然语言。
- Content-Length:用于指明实体正文的长度,以字节方式存储的十进制数字来表示,用其对应的ASCII码存储传输。这个长度不包括实体报头的长度。
- Content-Type:用于指明发送给接收者的实体正文的媒体类型。
- Expires:用于指明响应过期的日期和时间,为了客户端在一段时间以后更新缓存中(再次访问曾访问过的页面时,直接从缓存中加载,缩短响应时间和降低服务器负载)的页面,我们可以使用Expires实体报头域指定页面过期的时间,是一个绝对时间。
- Last-Modified:用于指示资源的最后修改日期和时间。
- Location:用于重定向接受者到一个新的位置。
HTTP其他特性
随着HTTP版本的更新,引入了很多新的特性。包括持久连接、管道机制、分块传输编码、二进制协议、多工、头信息压缩和服务端推送等。有兴趣的可以自己去了解一下。