这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天
一、初识HTTP
1、Hyper Text Transfer Protocol :全称超文本传输协议。
2、是一种应用层协议,是基于 TCP/IP 通信协议 来传递数据的。
3、优点:
简单:协议比较简单,它的主要组成就是 header + body,头部信息也是简单的文本格式。
可扩展:http中的请求方法、URI、状态码等核心组成要素都没有被完全制定,因此允许开发者任意定制、扩充或解释,给予了浏览器和服务器最大程度的信任和自由。
无状态:无需额外资源来记录状态信息,可以有效减轻服务器的压力。
二、协议分析
1、状态码:HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码。
以下是见得比较多的状态码:
200:成功状态码。
400:客户端请求报文有错误。
403:服务器禁止访问资源,并不是客户端的请求出错。
404:请求的资源在服务器上不存在或未找到。
2、请求头
HTTP请求头提供了关于请求,响应或者其他的发送实体的信息。
Accept:浏览器可接受的MIME类型。
Accept-Charset:浏览器可接受的字符集。
Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间。
Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。
Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中。
Connection:表示是否需要持久连接。如果Servlet看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。
Content-Length:表示请求消息正文的长度。
Cookie:这是最重要的请求头信息之一,参见后面《Cookie处理》一章中的讨论。
From:请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它。
Host:初始URL中的主机和端口。
其他关于HTTP头完整、详细的说明,请参见www.w3.org/Protocols/ 的HTTP规范。
3、响应头
HTTP响应头向客户端提供一些额外信息,比如谁在发送响应、响应者的功能,甚至与响应相关的一些特殊指令。这些头部有助于客户端处理响应,并在将来发起更好的请求。对响应头的操作是后端开发者的任务。
由于响应头较多,不在这里一一列举。其他关于HTTP头完整、详细的说明,请参见www.w3.org/Protocols/ 的HTTP规范。
三、实际应用
1、常用请求库:
axios: Axios是一个基于promise的HTTP库,类似于jQuery的ajax,用于http请求。可以应用于浏览器端和node.js,既可以用于客户端,也可以用于node.js编写的服务端。
2、用户体验:
网络优化:要提升用户体验,网络优化是一个很重要的方面。
稳定性:重试能够保证稳定,但是防止加剧恶劣情况;缓存要合理使用
四、了解更多
通信方式:
WebSocket:浏览器与服务器进行全双工通讯,适合实时性要求高(比如聊天室)的应用