计算机网络——HTTP

1. http协议与TCP联系
Http连接是一种短连接,是一种无状态的连接。所谓的无状态,是指浏览器每次向服务器发起请求的时候,不是通过一个连接,而是每次都建立一个新的连接。

  • HTTP:超文本传输协议,是应用层的协议,以TCP为基础
    TCP:传输控制协议,是传输层的协议,以IP协议为基础
    可以这样理解: IP协议作为网络中的“公路”,TCP协议是“公路”上面的“货车”,而HTTP协议是用于打包“货车”中的“货物”的。
  • TCP是底层通讯协议,定义的是数据传输和连接方式的规范
    HTTP是应用层协议,定义的是传输数据的内容的规范
    HTTP协议中的数据是利用TCP协议传输的,所以支持HTTP也就一定支持TCP

2. http/1.0和http/1.1的区别

  • (1) http/1.1默认持久连接节省通信量,只要客户端服务端任意一端没有明确提出断开TCP连接,就一直保持连接,可以发送多次HTTP请求
  • (2) 请求的流水线处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。
  • (3) 在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名。随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机,并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。
  • (4) 100(Continue)Status【状态码】 (作用:节约带宽) 客户端事先发送一个只带头域的请求,如果服务器因为权限拒绝了请求,就回送响应码401 。如果服务器接收此请求就回送响应码100,客户端就可以继续发送带实体的完整请求了。
  • (5) 1.1引入分块传输编码,发送方将消息分割成若干个任意大小的数据块,每个数据块在发送时都会附上块的长度,最后用一个零长度的块作为消息结束的标志。这种方法允许发送方只缓冲消息的一个片段,避免缓冲整个消息带来的过载。
  • (6) HTTP/1.1在1.0的基础上加入了一些cache的新特性,当缓存对象的Age超过Expire时变为stale对象,cache不需要直接抛弃stale对象,而是与源服务器进行重新激活(revalidation)。

3. http的请求方法有哪些?get和post的区别
(1)8中请求方法(前四种常用)

方法操作
GET请求读取由URL所标志的信息
POST给服务器添加信息(如,注释)
PUT在指明的URL下存储一个文档
DELETE删除指明的URL所标志的资源
OPTION请求一些选项的信息
HEAD请求读取由URL所标志的信息的首部
TRACE用来进行环回测试的请求报文
CONNET用于代理服务器

(2)get和post的区别(重点)

  • GET参数通过url传递,POST放在request body中
  • GET产生一个TCP数据包,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);POST产生两个TCP数据包,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
  • GET提交的数据最大是2k(多数浏览器通常都会限制url长度在2K个字节),POST理论上没有限制
  • GET请求只能进行url编码,而POST支持多种编码方式。
  • GET请求会被浏览器主动cache,而POST不会,除非手动设置。
  • GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

4. http的状态码

状态码类别原因短语
1XXInformational(信息性状态码)接收的请求正在处理
2XXSuccess(成功状态码)请求正常处理完毕
3XXRedirection(重定向状态码)需要进行附加操作以完成请求
4XXClient Error(客户端错误状态码)服务器无法处理请求
5XXServer Error(服务器错误状态码)服务器处理请求出错
  • 2XX 成功
    200 OK
    204 No Content:请求已经成功处理,但是返回的响应报文不包含实体的主体部分。一般在只需要从客户端往服务器发送信息,而不需要返回数据时使用。
    206 Partial Content
  • 3XX 重定向
    301 Moved Permanently:永久性重定向
    302 Found:临时性重定向
    303 See Other
    注:虽然 HTTP 协议规定 301、302 状态下重定向时不允许把 POST 方法改成 GET 方法,但是大多数浏览器都会把 301、302 和 303 状态下的重定向把 POST 方法改成 GET 方法。
    304 Not Modified:如果请求报文首部包含一些条件,例如:If-Match,If-ModifiedSince,If-None-Match,If-Range,If-Unmodified-Since,但是不满足条件,则服务器会返回 304 状态码。
    307 Temporary Redirect:临时重定向,与 302 的含义类似,但是 307 要求浏览器不会把重定向请求的 POST 方法改成 GET 方法。
  • 4XX 客户端错误
    400 Bad Request:请求报文中存在语法错误
    401 Unauthorized:该状态码表示发送的请求需要有通过 HTTP 认证(BASIC 认证、DIGEST 认证)的认证信息。如果之前已进行过一次请求,则表示用户认证失败。
    403 Forbidden:请求被拒绝,服务器端没有必要给出拒绝的详细理由。
    404 Not Found
  • 5XX 服务器错误
    500 Internal Server Error:服务器正在执行请求时发生错误
    503 Service Unavilable:该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

5. http和https的区别,HTTPS的优缺点
(1)主要区别

  • 端口不同,HTTP端口号80和HTTPS端口号443,连接方式不同;
  • HTTP以明文的方式在网络中传输,而HTTPS协议传输的数据则是经过SSL加密后的,具有更高的安全性。
  • HTTPS三次握手阶段之后,还需进行SSL的handshake,协商加密使用的对称密匙
  • HTTPS需要服务端申请证书,浏览器端安装根证书
  • HTTPS就是HTTP加上加密处理(一般是SSL安全通信线路)+认证+完整性保护

(2)HTTPS的优点

  • HTTPS传输数据过程中使用密钥进行加密,所以安全性高
  • HTTPS协议可以认证用户和服务器,确保数据发送到正确的用户和服务器

(3)HTTPS的缺点

  • HTTPS的握手阶段延迟较高,在HTTP会话之前还需要进行ssl握手
  • HTTPS部署成本较高:一方面HTTPS协议需要使用证书来验证自身的安全性,需要购买ca证书;另一方面由于采用HTTPS协议需要进行加解密的计算,占用CPU资源较多。

(4)HTTP的缺点

  • 通信使用明文不加密,内容可能被窃听
  • 不验证通信方身份,可能遭到伪装
  • 无法验证报文完整性,可能被篡改

6. https的具体实现,怎么确保安全性
在这里插入图片描述
HTTPS 同 HTTP 一样,首先建立起 TCP 连接,但是建立好之后并不是立即发出请求,索要具体的资源,而是先和对方商量加密的密码。商量的加密密码的过程就是建立 TSL 连接的过程。其实并没有建立真实的连接,只是在刚刚建立好的 TCP 连接上,包裹上一层加密协议而已。但是也被形象的称作连接建立。具体建立方式如下:客服端发给服务器一个HELLO包,里面有我支持的加密协议列表。服务器收到后发送也给客户端发送一个HELLO数据包,数据包内包涵服务器挑选的加密算法,还包含自己的数字证书信息。你拿到他的数字证书信息之后就需要去向 CA 校验证书,校验成功后也知道了对方的公钥,就该通知服务器,我们以后对称加密的密码是多少,当然,这个密码是要用公钥加密的。服务器接收到之后,会根据对称密钥生成一系列复杂的加密算法,在传输给客服端,客户端收到后会给服务器发送一个 Finished Message ,服务器收到消息后也回一个 Finished Message。这时,我们终于完成了加密的准备工作,一切加密方式和密钥都商量好了,终于可以传输数据了。至此,TSL 建立连接的过程结束。

7. http中浏览器一个URL的流程,这个过程中浏览器做了什么?
(1) 域名解析成IP地址;
DNS服务器是基于UDP的,因此会用到UDP协议。

  • 浏览器搜索自己的DNS缓存,缓存中维护一张域名与IP地址的对应表;
  • 若没有,则搜索操作系统的DNS缓存;
  • 若没有,则操作系统将域名发送至本地域名服务器(递归查询方式),本地域名服务器查询自己的DNS缓存,查找成功则返回结果,否则,通过以下方式迭代查找:
    a. 本地域名服务器向根域名服务器发起请求,根域名服务器返回com域的顶级域名服务器的地址;
    b. 本地域名服务器向com域的顶级域名服务器发起请求,返回权限域名服务器地址;
    c. 本地域名服务器向权限域名服务器发起请求,得到IP地址;

(2) 与目的主机进行TCP连接(三次握手);

(3) 浏览器向服务器发送HTTP请求,请求数据包
与服务器建立了连接后,就可以向服务器发起请求了。发送HTTP请求的过程就是构建HTTP的get请求报文,并通过TCP协议发送到服务器指定端口(HTTP协议80,HTTPS协议443)。HTTP请求是由三部分组成:请求行、请求报头和请求正文。

http生成一个get请求报文,将该报文传给TCP层处理。如果采用https还会先对http数据进行加密。TCP层如果有需要先将HTTP数据包分片,分片依据路径MTU和MSS。TCP的数据包然后会发送给IP层,用到IP协议。IP层通过路由选路,一跳一跳发送到目的地址。当然在一个网段内的寻址是通过以太网协议实现,以太网协议需要直到目的IP地址的物理地址,有需要ARP协议。

(4) 服务器处理收到的请求
服务器端收到请求后,由web服务器(准确来说应该是HTTP服务器)处理请求。web服务器解析用户请求,知道了要调度哪些资源文件,再通过相应的这些文件处理用户请求和参数,并调用数据库信息 ,最后将结果通过web服务器返回浏览器客户端。

(5) 返回相应结果至浏览器
HTTP响应报文也是由三部分组成:状态码、响应报头和响应报文。

(6) 与目的主机断开TCP连接(四次挥手);
(7) 浏览器对页面进行渲染呈现给用户

8. http报文首部格式
(1)请求报文
分为:请求行,请求头,实体主体
在这里插入图片描述
在这里插入图片描述

(2)响应报文
分为:状态行、响应报头和响应报文
状态行有:http版本,状态码,解释状态码的简单描述
在这里插入图片描述
在这里插入图片描述
9. URL包括哪三个部分
<协议>://<主机>:<端口>/<路径>

  • 第一部分是 <协议>,在Internet中可以使用多种协议,如HTTP,FTP等
  • 第二部分是 <主机>,该主机在互联网上的域名,一个URL中,也可以使用IP地址作为域名使用
  • 第三部分是 <端口>,跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口80
  • 虚拟目录部分:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。
  • 文件名部分:从域名后的最后一个“/”开始到“?”为止,是文件名部分
  • 锚部分:从“#”开始到最后,都是锚部分。
  • 参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。

10. 说一说HTTP协议
(1)HTTP协议

  • HTTP协议是超文本传输协议的缩写,用于从万维网的服务器传输超文本到本地浏览器的传输协议
  • 基于TCP/IP协议来传输数据(html文件,图片等)
  • 属于应用层的协议
  • 工作于客户端-服务端的架构上。浏览器作为HTTP客户端通过URL向HTTP服务端发送所有请求。web服务端根据收到的请求,对客户端发出响应

(2)HTTP协议的特点

  • 简单快速
    客户向服务器请求服务时,只需要传输请求方法和路径。
  • 灵活
    允许传输任意类型的数据对象
  • 无连接
    每次连接只处理一个请求
  • 无状态
    对于事务处理没有记忆能力
  • 默认端口80
  • 基于TCP协议

(3)HTTP过程概述
HTTP协议定义web客户端如何从web服务器请求web页面,以及服务器如何把web页面传送给客户端。HTTP协议采用了请求/相应模型。客户端向服务器发送一个请求报文,请求报文包含请求方法,URL,协议版本,请求头和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、状态码,响应头部和相应数据

HTTP请求/响应的步骤如下:

  • 客户端连接到web服务器
  • 发送HTTP请求
  • 服务器接受请求,返回HTTP响应
  • 释放连接tcp
  • 客户端浏览器解析HTML内容

11. 对称密码和非对称密码体系
(1)对称加密是最快速、最简单的一种加密方式,加密与解密用的是同样的密钥。
优点:算法公开、计算量小、加密速度快、加密效率高。
缺点:交易双方都使用同样钥匙,安全性得不到保证。
(2)非对称加密为数据的加密与解密提供了一个非常安全的方法,它使用了一对密钥,公钥和私钥。私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥。

优点:安全性更高,公钥是公开的,秘钥是自己保存的,不需要将私钥给别人。
缺点:加密和解密花费时间长、速度慢,只适合对少量数据进行加密。

12. 数字证书的了解(高频)
CA给用户颁发一个数字证书,证书中包含用户的公钥(这个公钥可以是用户自己生成的提交给CA的也可以是CA生成发给用户的)及相关身份信息。

CA是Certificate Authority的缩写,也叫“证书授权中心”。数字证书是由权威的CA机构颁发的无法被伪造的证书,用于校验发送方实体身份的认证。解决如上问题,只需要发送方A找一家权威的CA机构申请颁发数字证书,证书内包含A的相关资料信息以及A的公钥,然后将正文A、数字证书以及A生成的数字签名发送给B,此时中间人M是无法篡改正文内容而转发给B的,因为M不可能拥有这家CA的私钥,无法随机制作数字证书。当然,如果M也申请了同一家CA的数字证书并替换发送修改后的正文、M的数字证书和M的数字签名,此时B接收到数据时,会校验数字证书M中的信息与当前通信方是否一致,发现数字证书中的个人信息为M并非A,说明证书存在替换风险,可以选择中断通信。

为什么CA制作的证书是无法被伪造的?其实CA制作的数字证书内还包含CA对证书的数字签名,接收方可以使用CA公开的公钥解密数字签名,并使用相同的摘要算法验证当前数字证书是否合法。制作证书需要使用对应CA机构的私钥,因此CA颁发的证书是无法被非法伪造的。

13. 服务器攻击(DDos攻击)
从互联网上的成百上千个网站集中攻击一个网站,称为分布式拒绝服务DDoS。

14. HTTP2.0 的特点
(1)HTTP/2采用二进制格式而非文本格式
(2)HTTP/2是完全多路复用的,而非有序并阻塞的——只需一个HTTP连接就可以实现多个请求响应
(3)使用报头压缩,HTTP/2降低了开销
(4)HTTP/2让服务器可以将响应主动“推送”到客户端缓存中

15. HTTP 缓存机制
(1)浏览器缓存过程:

  • 浏览器第一次加载资源,服务器返回200,浏览器将资源文件从服务器上请求下载下来,并把response header及该请求的返回时间(要与Cache-Control和Expires对比)一并缓存;
  • 下一次加载资源时,先比较当前时间和上一次返回200时的时间差,如果没有超过Cache-Control设置的max-age,则没有过期,命中强缓存,不发请求直接从本地缓存读取该文件(如果浏览器不支持HTTP1.1,则用Expires判断是否过期);
    如果时间过期,则向服务器发送header带有If-None-Match和If-Modified-Since 的请求;
  • 服务器收到请求后,优先根据Etag的值判断被请求的文件有没有做修改,Etag值一致则没有修改,命中协商缓存,返回304;如果不一致则有改动,直接返回新的资源文件带上新的Etag值并返回 200;
  • 如果服务器收到的请求没有Etag值,则将If-Modified-Since和被请求文件的最后修改时间做比对,一致则命中协商缓存,返回304;不一致则返回新的last-modified和文件并返回 200;

根据浏览器是否向服务器发起请求来分为强缓存和协商缓存。

  • 强缓存的意思就是不向服务器发起请求的缓存,也就是本地强制缓存。浏览器想要获取特定数据的时候,首先会检查一下本地的缓存是否存在该数据,如果存在,就直接在本地获取了,如果不存在,就向服务器所要该数据。
  • 协商缓存:向服务器发送请求,服务器会根据这个请求的request header的一些参数来判断是否命中协商缓存,如果命中,则返回304状态码并带上新的response header通知浏览器从缓存中读取资源;

共同点:都是从客户端缓存中读取资源;
区别:是强缓存不会发请求,协商缓存会发请求。

16. union怎么判断大端小端

#include<stdio.h>
#include<stdlib.h>

int
main(int argc, char **argv)
{
    union {
        short  s;
        char   c[sizeof(short)];
    } un;

    un.s = 0x0102;
    if (sizeof(short) == 2) {
	if (un.c[0] == 1 && un.c[1] == 2)
		printf("大端法\n");
	else if (un.c[0] == 2 && un.c[1] == 1)
		printf("小端法\n");
	else
		printf("不能判断\n");
    } else
	printf("sizeof(short) = %d\n", sizeof(short));

    exit(0);
}

17.长连接是服务端设置还是客户端设置?如何设置
服务器和客户端都设置为Connection为keep-alive。

18. cookie与session的区别与联系
Cookie是在网站中,http请求是无状态的。也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。cookie的出现就是为了解决这个问题,第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户发送第二次请求的时候,就会自动的把上次请求存储的cookie数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前用户是哪个了。

Session 是存放在服务器端的,类似于Session结构来存放用户数据,当浏览器 第一次发送请求时,服务器自动生成了一个Session和一个Session ID用来唯一标识这个Session,并将其通过响应发送到浏览器。当浏览器第二次发送请求,会将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的Session。

一般情况下,服务器会在一定时间内(默认30分钟)保存这个 Session,过了时间限制,就会销毁这个Session。在销毁之前,程序员可以将用户的一些数据以Key和Value的形式暂时存放在这个 Session中。

  • cookie数据保存在客户端,session数据保存在服务器端。
  • cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
  • session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
  • 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
  • 可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值