HTTP框架修炼之道 | 青训营笔记

52 阅读5分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第2篇笔记. 1、协议与Http协议: 答:①协议:协议是指计算机通信网络中两台计算机之间通信所必须遵守的规定或规则。 ②Http协议是一个基于请求、响应模式的,无状态的协议。(request/response based,stateless protocol)。 ③无状态:指同一个客户端的请求和上次请求没有对应关系,对于http服务器来说,它并不知道这两个请求来自同一个客户端。为了解决这个问题,web程序引入了Cookies机制来维护状态。

2、Web服务器,浏览器,代理服务器: 答:(1)原理:①用户输入URL,浏览器向web服务器发送了一个request; ②web服务器接到request后进行处理,生成相应的response,发回给浏览器; ③浏览器解析response中的HTML。 (2)代理服务器就是网络信息的中转站。 代理服务器的作用: ①提高访问速度,大多数代理服务器有缓存功能; ②突破限制(翻墙); ③隐藏身份。

3、Http请求由三部分组成: 答:(1)请求行 ①请求行以一个方法符号开头,后面跟着请求URI和协议的版本,以CRLF作为结尾。请求行以空格分隔。除了作为结尾的CRLF外,不允许出现单独的CR或LF字符,格式如下: Method Request-URI HTTP-Version CRLF Method表示请求的方法, Request-URI是一个统一资源标识符,标识了要请求的资源, HTTP-Version表示请求的HTTP协议版本, CRLF表示回车换行。例如: GET /test.html HTTP/1.1 (CRLF) ②GET方法:一般用于信息获取,使用URL传递参数,对所发送信息的数量也有限制,一般在2000个字符。利用GET请求进行查询或获取的操作。GET请求是幂等的,即GET请求执行一次和执行一万次效果是相同的。所以说GET方法是安全的。 POST方法:POST方法在表单提交的时候用的最多,包括新建、修改、删除等操作。一般用于修改服务器上的资源,对所发送信息的数量无限制。 (2)请求报头: 由关键字和值对组成,每行一对,通知服务器关于客户端的功能和识别。 包含一些客户端环境信息、身份验证信息等等。 User-Agent:客户端厂家和版本。 Accept:客户端可识别的内容类型列表 (3)请求正文: 一般请求报头和请求正文之间有一个空行,它表示请求报头已经结束了。 包含客户提交的查询字符串信息,表单信息等等。

4、Http响应由三部分组成: 答:(1)状态行: 用来显示请求是成功还是失败。 状态行由协议版本,数字形式的状态代码,相应的状态描述组成,各元素之间以空格分隔,除了结尾的CRLF(回车换行)序列外,不允许出现CR或LF字符。格式如下: –HTTP-Version Status-Code Reason-Phrase CRLF HTTP-Version表示服务器HTTP协议的版本, Status-Code表示服务器发回的响应代码, Reason-Phrase表示状态代码的文本描述, CRLF表示回车换行,例如: –HTTP/1.1 200 OK (CRLF) (2)响应报头: 包含许多有用的信息,例如服务器类型,日期时间,内容类型和长度等。 (3)响应正文: 服务器传来的字符串、HTML代码等等。 5、状态代码: 答:(1)状态代码由三位数字组成,表示请求是否被理解或被满足,状态描述给出了关于状态代码的简短文本描述 (2)状态代码的第一个数字定义了响应的类别,后面两个数字没有具体的分类。第一个数字有五种可能的取值: ①–1xx:指示信息—表示请求已接收,继续处理 ②–2xx:成功—表示请求已经被正确接收,理解,处理 ③–3xx:重定向—请求没有成功,客户必须进行更进一步的操作 ④–4xx:客户端错误—客户端提交的请求有语法错误或请求无法实现 ⑤–5xx:服务器端错误—服务器不能完成对请求的处理。 (3)常见的状态码: ①200 OK:客户端请求成功 ②302 Found:重定向,新的URL会在response中的Location中返回,浏览器将会使用新的URL发出新的Request。 ③304 Not Modified:代表上次的文档已经被缓存了, 还可以继续使用。 ④400 BAD REQUEST:客户端请求有语法错误,不能被服务器所理解 ⑤401 UNAUTHORIZED:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 ⑥403 FORBIDDEN:服务器收到请求,但是拒绝提供服务,服务器通常会在响应正文中给出不提供服务的原因。 ⑦404 NOT FOUND:请求的资源不存在。请求中所引用的文档不存在。 ⑧500 INTERNAL SERVER ERROR:服务器发生不可预期的错误,导致无法完成客户的请求。 ⑨503 SERVICE UNAVAILABLE:服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常

6、HTTP协议是无状态的和Connection: keep-alive的区别: 答:①无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。从另一方面讲,打开一个服务器上的网页和你之前打开这个服务器上的网页之间没有任何联系。 ②HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,更不能代表HTTP使用的是UDP协议(无连接)。 ③从HTTP/1.1起,默认都开启了Keep-Alive,保持连接特性,简单地说,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。 ④Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。