本文是学习慕课网上课程前端跳槽面试必备技巧的学习笔记,便于之后复习。
从以下几个方面介绍HTTP协议:
1)简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
2)灵活:HTTP允许传输任意类型的数据对象。传输的类型由Content-Type加以标记。
3)☆无连接:限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
4)☆无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
客户端向服务端请求服务时,http协议建立连接,请求完成后连接就会断开。下一个客户端请求服务时,服务端无法区分与前一个客户端是否是同一个客户端。即HTTP协议无法区分两次连接者身份就是无状态。如果登录一个网站,下次登录时网站会记住你,是保持 HTTP 连接状态的技术,一个是 Cookie,而另一个则是 Session。
HTTP有两种类型的报文:请求报文和响应报文。
请求行包含3个字段:方法(请求类型)、URL和HTTP版本,以空格分隔。
状态行共有3个字段:HTTP协议版本、状态码和短语(定义了请求的状态),以空格分隔。
①.GET 请求服务器的文档(获取资源)
②.POST 从客户端向服务器发送一些信息(传输资源)
③.PUT 从服务器向客户端发送文档
④.DELETE 删除Web页
⑤.HEAD 请求关于文档的信息,但不是这个文档本身(获取报文首部)
⑥.TRACE 把到达的请求回送
⑦.CONNECT 保留
⑧.OPTIONs 询问关于可用的选项
Get在浏览器回退时是无害的,而POST会再次提交请求。 // get在回退时是不会重复提交
Get请求会被浏览器主动缓存,而POST不会,但是可以手动设置
Get请求参数会被完整保留在浏览器历史记录中,而POST中的参数不会被保留
Get请求在URL中传送的参数有长度限制(基本是2kb不同浏览器限制不同),POST没有限制
GET比POST更不安全,因为参数直接暴露在URL中,不要用于传输敏感信息
GET参数通过URL传递,POST放在Request body中传递
Get的url可以被浏览器收藏,而POST不可以。
对参数的数据类型,GET只接受ASCII,而POST没有限制
GET请求只能进行url编码,而POST支持多种编码方式
1xx:指示信息 - 表示请求已接受,继续处理
2xx:成功 - 表示请求已被成功接收
3xx:重定向 - 要完成请求必须进行更进一步的操作
4xx:客户端错误 - 请求有语法错误或请求无法实现
5xx:服务端错误 - 服务端未能实现合法的请求
常见的状态码如下
//提供信息的
100 Continue 请求的开始部分已经收到,客户可以继续它的请求
101 Switching 服务器同意切换协议
//成功
200 OK 客户端请求成功
201 Created 新的URL被创建
202 Accepted 请求被接受,但还没有马上起作用
204 No content 主体中没有内容
206 Partial Content 客户发送一个带有Range头的GET请求,服务器完成请求
//重定向
301 Moved Permanently 所请求的URL已转向新的url
302 Moved temporarily 所请求的URL已临时转向新的url
304 Not modified 文档还没有修改,客户端有缓存的文档并发出请求,服务器高速客户端文档没有修改,原缓存文档可以继续用
//客户端差错
400 Bad request 在请求中有语法差错,不能被服务器所理解
401 Unauthorized 请求缺少适当的授权
403 Forbidden 服务被拒绝,被请求页面的资源禁止访问
404 Not found 文档未找到
405 Method not allowed 这个方法不被这个URL所支持
406 Not acceptable 所请求的格式不可接受
//服务器差错
500 Internal server error 在服务器端有差错,如崩溃
501 Not implemented 所请求的动作不能完成
503 Service unavailable 服务暂时不可用
HTTP1.1支持持久连接 1.0不支持
HTTP协议采用“请求-应答”模式,当使用普通模式,即非持久连接的模式时,每个请求/应答客户端和服务器都要新建一个连接,完成之后立即断开连接(无连接的协议)
当使用Keep-Alive模式(持久连接)时,Keep-Alive功能使客户端到服务端的连接持久有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。HTTP1.1中的keep-alive,将多个http请求合并为1个
在使用持久连接的情况下,某个连接上的消息的传递类似于
请求1 -> 响应1 -> 请求2 -> 响应2 -> 请求3 -> 响应3
管线化后,连接上的消息变成了这样
请求1 -> 请求2 -> 请求3 -> 响应1 -> 响应2 -> 响应3
非管线化的持久连接是来一个请求就响应一个而管线化是,把请求打包发过去,一起响应。
管线化特点:1、2、3点记住