【计算机网络】HTTP基础

HTTP又称为超文本传输协议,是一个请求响应协议,用于从万维网服务器传输超文本到本地浏览器,它可以使浏览器更加高效,减少网络传输。

当我们在浏览器地址栏上输入要访问的URL后,浏览器会分析出URL上面的域名,然后通过DNS服务器查询出域名映射的IP地址,浏览器根据查询到的IP地址与Web服务器进行通信,而通信的协议就是HTTP协议。

在这里插入图片描述

问题1、HTTP 1.0 / 1.1 / 2.0 的版本区别

1)HTTP 1.0

规定了请求头、请求尾、响应头、相应尾

  • HTTP/1.0中浏览器与服务器只保持短暂的连接(短连接),连接无法复用。也就是说每个TCP连接只能发送一个请求。发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接。

  • TCP连接的建立需要三次握手,是很耗费时间的一个过程。所以,HTTP/1.0版本的性能比较差。

  • 补充:HTTP1.0 其实也可以强制开启长链接,例如接受Connection: keep-alive 这个字段

2)HTTP 1.1

HTTP 1.1在HTTP 1.0的基础上做了2点改进

  • 第一个改进是默认启用长连接,即TCP连接默认不关闭,可以被多个请求复用
  • 第二个改进是引入了管道(pipelining),即在同一个TCP连接里面,客户端可以同时发送多个请求。只要第一个请求发出,不必等其回来就可以发第二个请求,这样就进一步改进了HTTP协议的效率。

有了长连接和管道,HTTP的效率得到了极大的提升。但是服务端还是顺序执行的,效率还有提升的空间。

3)HTTP 2.0

二进制分帧,多路复用,Header压缩,服务器推送

  • 二进制分帧将请求和响应数据分割为更小的帧,并且它们采用二进制编码。例如,客户端收到了前一部分,先放在缓冲池里,之后收到了另外一部分,在组合起来,最后在把完整的信息推送给用户。
    同域名下所有通信都在单个连接上完成,该连接可以承载任意数量的双向数据流。每个数据流都以消息的形式发送,而消息又由一个或多个帧组成。多个帧之间可以乱序发送,根据帧首部的流标识可以重新组装。
  • 多路复用一个连接里面,客户端和服务器都可以同时发送多个请求或回应。一个TCP中多个http请求是并行的
  • Header压缩:http/2使用encoder来减少需要传输的header大小,通讯双方各自缓存一份头部字段表,既避免了重复header的传输,又减小了需要传输的大小。
  • 服务器推送:服务器可以对一个客户端请求发送多个响应,服务器向客户端推送资源无需客户端明确地请求。并且,服务端推送能把客户端所需要的资源伴随着index.html一起发送到客户端,省去了客户端重复请求的步骤。

问题2、短连接和长连接

短连接:例如普通的web请求,在三次握手之后建立连接,发送数据包并得到服务器返回的结果之后,通过客户端和服务端的四次握手进行关闭断开。

长连接:区别于短连接,由于三次握手链接及四次握手断开,在请求频繁的情况下,连接请求和断开请求的开销较大,影响效率。采用长连接方式,执行三次握手链接后,不断开连接,保持客户端和服务端通信,直到服务器超时自动断开连接,或者客户端主动断开连接。

适用场景
短连接:适用于网页浏览等数据刷新频度较低的场景。

长连接:适用于客户端和服务端通信频繁的场景,例如聊天室,实时游戏等。

问题3、HTTP的状态码及其含义

1xx——信息类状态码;
2xx——表示成功处理了请求的状态码
3xx——重定向,表示要完成请求,需要进一步操作。通常这些状态代码用来重定向。
4xx——客户端错误,这些状态码表示请求可能出错,妨碍了服务器的处理
5xx——服务器错误,这些状态码表示服务器在尝试处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求的错误

  • 100 接受的请求正在处理

  • 200 服务器已成功处理了请求

  • 301 永久性重定向,表示资源已被分配了新的 URL
    302 临时性重定向,表示资源临时被分配了新的 URL
    303 表示资源存在另一个URL,用GET方法获取资源
    304 (未修改)自从上次请求后,请求网页未修改过。服务器返回此响应时,不会返回网页内容

  • 400(错误请求)服务器不理解请求的语法

  • 401表示发送的请求需要有通过HTTP认证的认证信息

  • 403(禁止)服务器拒绝请求

  • 404(未找到)服务器找不到请求网页 //请求资源不存在,输入了错误的URL

  • 500 服务器端错误

  • 503 服务器繁忙

问题4、HTTP状态码301和302的区别,都有哪些用途?

  • 301重定向(301 Move Permanently),指页面永久性转移,表示为资源或页面永久性地转移到了另一个位置。301重定向是一种非常重要的”自动转向“技术,网址重定向最为可行的一种方法。
  • 302重定向(302 Move Temporarily),指页面暂时性转移,表示资源或页面暂时转移到另一个位置,常被用作网址劫持,容易导致网站降权,严重时网站会被封掉,不推荐使用。

问题5、HTTP与HTTPS的区别?

http是超文本传输协议,HTTPS协议是(加密传输协议)SSL+HTTP协议

区别:

  • http是超文本传输协议,信息是明文传输;https是由SSL加密传输协议+http协议组成,ssl依靠证书来验证身份。
  • https协议需要到申请证书,一般免费证书较少,因而需要一定费用
  • http和https使用的是完全不同的连接方式,用的端口号也不一样,http是80,后者是https。
  • http是明文传输,几乎没有安全性;HTTPS协议是由SSL+HTTP协议构建的,可进行加密传输、身份认证的网络协议,比http协议安全。

问题6、HTTP的方法有哪些?

  • GET获取资源。用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器

  • POST传输实体主体。用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式。

  • PUT上传文件,由于自身不带验证机制,任何人都可以上传文件,因此存在安全性问题,一般不使用该方法。

  • HEAD获取报文首部,与GET方法类似,只是不返回报文实体主体,一般用于验证URI是否有效。

  • DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件。

  • OPTIONS:查询相应URI支持的HTTP方法。

问题7、GET 和 POST 的区别?

GET 和 POST 是最常见的Http协议请求方式,GET 用于获取资源,而 POST 用于传输实体主体。可以看作,GET 是查(只读), POST 是改。

  • GET参数放在url里面,POST放在请求体中。所以说,GET请求在URL中传送的参数是有长度限制的,而POST没有。
  • GET请求会被浏览器主动缓存,而POST不会,除非手动设置。
  • GET请求只支持url编码,而POST支持多种编码方式。
  • GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息

问题8、 HTTPS 的加密与认证过程

1、HTTPS的加密

  • 客户端在浏览器中输入一个https网址,然后连接到server的443端口

  • 采用https协议的server必须有一套数字证书(一套公钥和密钥)。首先server将证书(公钥)传送到客户端。客户端解析证书,验证成功,则生成一个随机数(私钥),并用证书将该随机数加密后传回server

  • server用密钥解密后,获得这个随机值,然后将要传输的信息和私钥通过某种算法混合在一起(加密)传到客户端 客户端用之前的生成的随机数(私钥)解密服务器端传来的信息

2、HTTPS 的认证
首先浏览器会从内置的证书列表中索引,找到服务器下发证书对应的机构,如果没有找到,此时就会提示用户该证书是不是由权威机构颁发,是不可信任的。如果查到了对应的机构,则取出该机构颁发的公钥。

用机构的证书公钥解密得到证书的内容和证书签名,内容包括网站的网址、网站的公钥、证书的有效期等。浏览器会先验证证书签名的合法性。签名通过后,浏览器验证证书记录的网址是否和当前网址是一致的,不一致会提示用户。如果网址一致会检查证书有效期,证书过期了也会提示用户。这些都通过认证时,浏览器就可以安全使用证书中的网站公钥了。

问题9、 Cookie和Session的区别

1、数据存放位置不同:
Cookie数据存放在客户的浏览器上,Session数据放在服务器

2、安全程度不同:
cookie不是很安全,别人可以分析存放在本地的Cookie并进行Cookie欺骗,考虑到安全应当使用session

3、数据存储大小不同:
单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie,而session则存储与服务端,浏览器对其没有限制。

由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session。服务端为每个用户都会生成一个Session对象,通过SessionID来区分来自于哪个用户

问题10、浏览器输入url后经历的过程

1、浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中显示页面内容。
2、否则,在发送http请求前,需要域名解析(DNS解析),解析获取相应的IP地址。
3、浏览器会向服务器发起tcp连接,与浏览器建立tcp三次握手
4、握手成功后,浏览器向服务器发送http请求,请求数据包。
5、服务器处理收到的请求,将数据返回至浏览器
6、关闭TCP连接(四次挥手
7、浏览器收到响应结果解析html代码并请求资源(js、css、图片等)
8、浏览器进行页面布局渲染

输入一个URL用到的协议:
DNS协议(将域名解析为IP地址)、http协议
DNS服务器是基于UDP的,因此会用到UDP协议
http协议是基于TCP的,因此会用TCP协议
TCP的数据包会发送给IP层,用到IP协议。IP层通过路由选路,一跳一跳发送到目的地址。当然在一个网段内的寻址是通过以太网协议实现(也可以是其他物理层协议,比如PPP,SLIP),以太网协议需要直到目的IP地址的物理地址,有需要ARP协议
注意:
DNS协议,http协议属于应用层
IP协议,ARP协议属于网络层

问题11、DNS协议

DNS协议首先主机会查询DNS的缓存,如果没有就给本地DNS发送查询请求。
DNS查询分为两种方式,一种是递归查询,一种是迭代查询。如果是迭代查询,本地的DNS服务器,向根域名服务器发送查询请求,根域名服务器告知该域名的一级域名服务器,然后本地服务器给该一级域名服务器发送查询请求,然后依次类推直到查询到该域名的IP地址。

问题12、ARP协议(地址解析协议)

将IP地址转为MAC地址(物理地址)
  ARP解决的是同⼀个局域⽹内,主机或路由器的IP地址和MAC地址的映射问题。如果源主机和⽬的主机在同⼀个局域⽹内(⽬标IP和本机IP分别与⼦⽹掩码相与的结果相同,那么它们在⼀个⼦⽹),就可以⽤ARP找到⽬的主机的MAC地址;如果不在⼀个局域⽹内,⽤ARP 协议找到本⽹络内的⼀个路由器的MAC地址,剩下的⼯作有这个路由器来完成。
ARP协议的具体内容:
  (1)每个主机都会有ARP⾼速缓存,存储本局域⽹内IP地址和MAC地址之间的对应关系。
  (2)当源主机要发送数据时,⾸先检查ARP⾼速缓存中是否有对应IP地址⽬的主机的MAC地址,如果有,则直接发送数据,如果没有,就像本⽹段的所有主机发送ARP请求分组,该数据包包括的内容有:(源主机IP地址,源主机MAC地址,⽬的主机的IP地址)。
  (3)当本⽹络的所有主机收到该ARP请求分组时,⾸先检查数据包中的IP地址是否是⾃⼰的IP地址,如果不是,则忽略该数据包;如果是,则⾸先从数据包中取出源主机的IP地址和MAC地址写⼊到ARP⾼速缓存中,如果已经存在,则覆盖,然后将⾃⼰的MAC地址写⼊ARP响应包中,告诉源主机⾃⼰是它想要找的MAC地址。
  (4)源主机收到ARP响应分组后,将⽬的主机的IP和MAC地址写⼊ARP⾼速缓存中,并利⽤此信息发送数据。如果源主机⼀直没有收到ARP响应分组,表⽰ARP查询失败。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值