-
什么是HTTP协议?
http协议即超文本传输协议,是一个客户端和服务器端请求和应答的标准,通过使用网络浏览器、网络爬虫或者其他工具,客户端发送一个http请求到服务器指定的端口上(一般默认为80端口),我们称这个客户端为用户代理程序。应答的服务器上存储着一些资源,比如html和一些图片,我们称这个应答服务器为源服务器。在用户代理和源服务器之间可能存在多个中间层,比如代理服务器、网关或者隧道。
通常,由http客户端发送一个请求,创建一个服务器指定端口的tcp连接,http服务器则在那个端口监听客户端的请求,一旦收到请求,服务器会向客户端返回一个状态,比如“HTTP/1.1 200 OK”,以及返回的内容,比如请求的文件、错误信息或者其它信息。 -
http协议的主要特点?
(1)简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
(2)灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
(3)无连接:每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答之后,即断开连接。采用这种方式可以节省传输时间。
(4)无状态:http协议是无状态协议,服务器端是不能区分两次连接者的身份,因为是无状态的,第一次连接任务完成,第二次再连接,服务端是没有记住状态,所以不能认定是同一个连接。一般网站都知道访问者,是服务端加了一些session手段做到的,不是http协议做到的。 -
http报文的组成部分?
(1)请求报文
请求行:http方法,页面地址,http协议以及版本
请求头:key:value 告诉服务端我要哪些内容
空行:告诉服务器不再是请求头部分了
请求体
(2)响应报文
状态行:http协议版本,状态码
响应头:key:value
空行:告诉服务器不再是响应头部分了
响应体
-
http方法
(1)GET:获取资源
(2)POST:传输资源
(3)HEAD:获取报文首部,向服务器发出指定资源的请求,但是服务器不传回资源的本文部分。使用这个方法可在不必传输全部内容的情况下,就可以获取其中请求资源的内容。
(4)PUT:更新资源
(5)DELETE:删除资源 -
POST和GET的区别?
(1) GET在浏览器回退时是无害的,而POST会再次提交请求
(2)GET请求会被浏览器主动缓存,而POST不会,除非手动设置
(3)GET请求参数会完整的保留在浏览器历史记录里,而POST的参数不会被保留
(4)GET请求在URL中传送的参数是有长度限制的,而POST没有限制
(5)GET参数通过URL传递,POST放在Request body中
(6)GET产生的URL地址可以被收藏,而POST不可以
(7)GET请求只能进行url编码,而POST支持多种编码方式。
(8)对参数的数据类型,GET只接受ASCII字符,而POST没有限制 -
http的状态码?
(1)1xx:指示信息----表示请求已接收,继续处理
(2)2xx:成功—表示请求已成功被接收
(3)3xx:重定向—要完成请求必须进行更进一步的操作
(4)4xx—客户端错误–请求有语法错误或请求无法实现
(5)5xx:服务器错误–服务器未能实现合法的请求
常见的状态码?
200 OK:客户端请求成功
206 Partial Content:客户发送一个带有Range头的GET请求,服务器完成了它(一般是video标签或者音频标签包裹的时候,视频音频过大会返回206)
301 Moved Permanently:所请求的页面已经转移至新的URL
302 Found:所请求的页面已经临时转移至新的url
304 Not Modified:客户端有缓冲的文档并发出一个条件性的请求,服务器告诉客户,原来的缓冲的文档还可以继续使用
400 Bad Request :客户端请求有语法错误,不能被服务器所理解
401 Unauthorized:请求未经授权,这个状态码必须和www-Authenticate报头域一起使用
403 Forbidden:对被请求页面的访问禁止
404 Not Found :请求资源不存在
500 Internal Server Error: 服务器发生不可预期的错误,原来缓冲的文档还可以继续使用
503 Server Unavailable:请求未完成,服务器临时过载或当机,一段时间后可能恢复正常。 -
什么是持久连接
http协议采用请求-应答模式,当使用普通模式,即非keep-alive 模式时,每个请求/应答客户和服务器都要重新建立一个连接,完成之后立即断开连接(http协议为无连接协议)
当使用keep-alive 模式(持久连接或连接重用)时,keep-alive 的功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,keep-alive 避免了建立或重新建立连接,但是持久连接只有在http 1.1 版本才支持。 -
什么是管线化?
在持久连接下,一次性将请求发送给服务器,相应一次性打包回来,就不会是请求一次响应一次这种。
(1)管线化机制通过持久连接完成,仅HTTP/1.1支持此技术
(2)只有GET和HEAD 请求可以进行管线化,而POST则有所限制
(3)初次创建连接时不应启动管线机制,因为对方(服务器)不一定支持HTTP/1.1版本的协议
(4)管线化不会影响响应到来的顺序,如上的例子所示,响应返回的顺序是未改变的
(5)HTTP/1.1 要求服务器端支持管线化,但并不要求服务器端也对响应进行管线化管理,只是要求对管线化的请求不失败即可。
(6)由于上面提到的服务器端问题,开启管线化很可能并不会带来大幅度的性能提升,而且很多服务器端和代理程序对管线化的支持并不好,因此现代浏览器如Chrome 和 Firefox 默认未开启管线化支持。