【HTTP】四、HTTP协议常见问题

  HTTP协议是一个非常重要的应用层协议,在面试中有很多关于这方面的问题,这里做一个总结,大部分都在前面的文章中提到了,没提到的这里做一个介绍。

1、HTTP协议的基本原理、工作流程

  HTTP协议是超文本传输协议,是一个应用层协议,它规定了万维网上各种链接如何实现,特别是浏览器如何向万维网服务器请求万维网文档、服务器如何把文档传给浏览器。它以客户端-服务器的方式运行,客户程序向服务器程序发出请求,服务器程序向客户程序送回客户所要的万维网文档,分别对应请求报文和响应报文。

  HTTP本身是无连接的,但是传输层使用的是TCP协议,需要首先建立连接,然后传输文档,最后关闭连接。

2、HTTP协议的特点

  参考:HTTP的特点,主要是:客户端-服务器模式,简单快速,灵活,无连接,无状态。

3、HTTP状态码

  参考:HTTP响应报文

4、HTTP请求方法,Get和Post的区别

  HTTP请求方法参考:HTTP请求报文

  【Get和Post的主要区别】

  (1)从含义上来看,get的重点是从服务器上获得资源,post的重点是向服务器发送数据。

  (2)get和post都可以用来传输数据给服务器,但是get是将数据信息以field(字段)= value的形式置于URL后,并用”?”连接,多个请求数据间用”&”连接,如http://127.0.0.1/Test/login.action?name=admin&password=admin,通过URL将数据携带到服务端的,而post是将字段和对应的值封装在了请求实体中发送给服务器的。

  (3)由于第二点的区别,带来了安全性的不同,get将数据直接拼接在URL的后面,对用户可见,可能会泄露私密信息,如密码等;而post数据封装在实体中,对用户不可见。

  (4)同样由于第二点的区别,带来了数据量的不同,get传输的数据量小,因为它受URL长度的限制,但是效率较高,而Post可以传输大量输出,因此上传文件等大数据时只能用post。

参考:

作者:有时需要偏执狂
原文:https://blog.csdn.net/u010710458/article/details/79636625
版权声明:本文为博主原创文章,转载请附上博文链接!

5、Cookie和Session的区别

  参考:HTTP状态保持机制

6、HTTP短连接和长连接

  实际上这里准确说法应该不是HTTP的连接,而是TCP的连接,在HTTP/1.0版本中,主要缺点是每个HTTP连接只能发送一个请求(短连接),一旦服务器响应数据发送完毕,连接就释放了,如果还有其他需要请求的信息,就需要再次建立TCP连接,而TCP连接需要三次握手,这需要时间开销,如果一个页面有多个需要请求的URL,就会有大量的短连接,会产生很多不必要的开销。

  在HTTP/1.1中较好的解决了这个问题,引入了持久连接,也就是长连接,让服务器在发送完响应之后仍然在一段时间内维护这条连接,如果后续还有其他的请求可以复用这条连接,当然,长连接并不是永久连接,经过一定时间没有请求之后长连接就会释放。

  现在我们使用的都是http/1.1,所以默认都是使用的长连接,设置Connection为keep-alive就是长连接。如果不愿意使用持久连接,也可以进行设置。

7、HTTP代理

  参考:HTTP代理

8、HTTP缓存

  http缓存指的是: 当客户端向服务器请求资源时,会先抵达浏览器缓存,如果浏览器有“要请求资源”的副本,就可以直接从浏览器缓存中提取而不是从原始服务器中提取这个资源。

  常见的http缓存只能缓存get请求响应的资源,对于其他类型的响应则无能为力。

  缓存的好处是显而易见的:(1)减少了冗余的数据传输,节省了网费;(2)减少了服务器的负担, 大大提高了网站的性能;(3)加快了客户端加载网页的速度

  HTTP的缓存有两种:强制缓存和协商缓存。

(1)强制缓存

  强制缓存在缓存数据未失效的情况下(即Cache-Control的max-age没有过期或者Expires的缓存时间没有过期),那么就会直接使用浏览器的缓存数据,不会再向服务器发送任何请求。强制缓存生效时,http状态码为200。这种方式页面的加载速度是最快的,性能也是很好的,但是在这期间,如果服务器端的资源修改了,页面上是拿不到的,因为它不会再向服务器发请求了。

(2)协商缓存

  当浏览器第一次向服务器发送请求时,会在响应头中返回协商缓存的头属性:ETag和Last-Modified,其中ETag返回的是一个hash值,Last-Modified返回的是GMT格式的最后修改时间。然后浏览器在第二次发送请求的时候,会在请求头中带上与ETag对应的If-Not-Match,其值就是响应头中返回的ETag的值,Last-Modified对应的If-Modified-Since。服务器在接收到这两个参数后会做比较,如果返回的是304状态码,则说明请求的资源没有修改,浏览器可以直接在缓存中取数据,否则,服务器会直接返回数据。

参考:作者:kimshare

链接:https://www.jianshu.com/p/227cee9c8d15

来源:简书

简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

9、HTTP和HTTPS

  HTTPS是在http协议基础上增加了使用SSL加密传送信息的协议,http和https之间的区别就在于其传输的内容是否加密和是否是开发性的内容。HTTPS是安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息。它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版。

  https协议需要到ca申请证书,一般免费证书很少,需要交费。

  http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。

  Http端口是80,https的端口是443.

  HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。

10、URI和URL

  URI是统一资源标识符(Uniform Resource Identifier),而URL是统一资源定位符(Uniform Resource Locator),URI是URL更高层次的抽象,是一种字符串文本标准,而URL是URI的一种,是它的子集。

  URI 表示请求服务器的路径,定义一个资源。而 URL 同时说明要如何访问这个资源(http://)。

  URI通常由三部分组成:①访问资源的命名机制;②存放资源的主机名;③资源自身的名称,由路径表示.

  URL是Internet上描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上。URL的格式由三部分组成: ①第一部分是协议(或称为服务方式)。②第二部分是存有该资源的主机IP地址(有时也包括端口号)。③第三部分是主机资源的具体地址,如目录和文件名等。

  总之,URL是一种具体的URI,可以用来标识一个资源,而且还指明了如何locate这个资源

11、网址中输入URL,一系列过程

  参考:https://blog.csdn.net/xidiancoder/article/details/71524673

12、HTTP2

  HTTP2协议:参考:HTTP的版本演变,主要是二进制协议、双向实时数据流通信、头信息压缩、服务器推送机制。

posted @ 2019-07-03 11:05  gzshan  阅读(1040)  评论(0编辑  收藏  举报