计算机网络http

181 阅读9分钟

get方法和post的区别

Get 方法的含义是请求从服务器获取资源,这个资源可以是静态的文本、页面、图片视频等。 而POST 方法则是相反操作,它向 URI 指定的资源提交数据,数据就放在报文的 body 里。 get方法是幂等的,执行多次请求,服务器的状态也是一样的。(安全就是不会破坏服务器上的资源,幂等就是多次执行相同的操作,得到的结果也是一样的) post不是幂等的

  1. Get是不安全的,因为在传输过程,数据被放在请求的URL中;Post的所有操作对用户来说都是不可见的。
  2. Get传送的数据量较小,这主要是因为受URL长度限制;Post传送的数据量较大,一般被默认为不受限制。
  3. Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。
  4. Get执行效率却比Post方法好。Get是form提交的默认方法。
  5. GET产生一个TCP数据包;POST产生两个TCP数据包。(非必然,客户端可灵活决定) 对于 GET 方式的请求,浏览器会把 http header 和 data 一并发送出去,服务器响应 200(返回数据); 而对于 POST(http1.1),浏览器先发送 header,服务器响应 100 continue,浏览器再发送 data,服 务器响应 200 ok(返回数据)。

http请求报文和响应报文

image.png 请求报文 客户端将一个请求报文发送给服务器,服务器根据请求报文中的信息进行处理,并将处理结果放在响应报文返回给客户端。 请求报文结构包含请求行,请求头部,空行和请求数据

请求行包含了请求方法,URL、协议版本 请求头部,用来说明服务器要使用的附加信息。包含了一些访问的域名、用户代理、cookie等信息 空行:请求头部后的空行是必须的 请求正文:就是http要请求的数据,get是空

image.png

例子 HTTP/1.1 200 OK Date: Fri, 22 May 2009 06:07:21 GMT Content-Type: text/html; charset=UTF-8

第一部分:状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。

第一行为状态行,(HTTP/1.1)表明HTTP版本为1.1版本,状态码为200,状态消息为(ok)

第二部分:消息报头,用来说明客户端要使用的一些附加信息 第二行和第三行为消息报头, Date:生成响应的日期和时间;Content-Type:指定了MIME类型的HTML(text/html),编码类型是UTF-8

第三部分:空行,消息报头后面的空行是必须的

第四部分:响应正文,服务器返回给客户端的文本信息。 空行后面的html部分为响应正文。

http1.0和1.1的区别

1、长连接:HTTP1.1默认开启长连接,在一个TCP连接上可以处理多个HTTP请求和响应,减少了建立和关闭的消耗和延迟,在http1.1中默认开启Connection:keep alive,一次请求http1.0每次都要建立连接的缺点。
2、HTTP 1.1 支持只发送 header 信息(不带任何 body 信息),如果服务器认为客户端有权限请求 服务器,则返回 100,否则返回 401。客户端如果接受到 100,才开始把请求 body 发送到服务 器。这样当服务器返回 401 的时候,客户端就可以不用发送请求 body 了,节约了带宽。 当客户端已经有一部分的资源后,只需要跟服务器请求另外的部分资源即可。这是支持文 件断点续传的基础。
3、错误通知的管理:在HTTP中新增了24个错误状态响应码,如409表示请求的资源与当前资源的状态发生冲突。
4、缓存处理:在HTTP1.0中主要使用了header里的IMS(if-Modified-Since),Expires来作为缓存判断的标准,HTTP1.1加入了更多的缓存控制策略,如Entity tag,If-Unmodified-Since,If-Match等更多可供选择的缓存头来控制缓存策略

(使用了管道网络运输,即第一个请求发送出去了,不需要等待返回就可以发送第二个请求)

http1.1和2.0的区别

1、新的二进制格式:1.X是基于文本的,而2.0的协议解析是采用二进制格式。头信息和数据体都是二进制,被称为头信息帧和数据帧。这样可以被计算机直接识别,提高了信息传输的速度。
2、HTTP/2.0 使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数 量比 Http/1.1 大了好几个数量级。 HTTP1.1采用的是串行请求,需要等待排队,可能发生队头阻塞的问题。 (比如处理AB两个请求,可以先处理A请求的一部分,再去处理B请求,再处理A剩余请求,因为A请求较难处理)
3、HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输的速率更快了;(如果你同时发送多个请求,如果他们的头部信息相同或者相似,那么协议会帮你消除相同的部分,HPACK算法:)

image.png

http请求都有哪几个

● GET 获取资源,服务端返回报文实体主体部分。
● HEAD 与 GET 类似,但是服务端不返回报文实体主体部分。
● POST 传输实体主体
● PATCH 对资源进行部分修改
● DELETE 删除文件,与 PUT 功能相反,并且同样不带验证机制
● OPTIONS 允许客户端查看服务器性能
● CONNECT 要求在与代理服务器通信时建立隧道

http和HTTPS的区别

  1. HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。
  2. HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。
  3. HTTP 的端口号是 80,HTTPS 的端口号是 443。
  4. HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。

http可能遇到的安全问题

●数据传输时,使用明文进行通信,内容可能会被监听;
● 数据传输时,不验证通信方的身份,通信方的身份有可能遭遇伪装;
● 数据传输后,无法证明报文的完整性,报文有可能遭篡改

HTTPS

HTTPS 是在 HTTP 的基础上增加了 SSL 或 TLS 安全协议(TLS 不支持数字证书),让 HTTP 先 和 SSL(Secure Sockets Layer)通信,再由 SSL 和 TCP 通信,也就是说 HTTPS 使用了隧道进行 通信。 SSL 和 TSL 这两个协议可以加密处理数据(采用混合加密技术)防止数据被监听、验证通信方身份 (通过数字证书认证通信方是自己的服务器)以及数据完整性保护(防止传输的内容被中间人冒充 或者篡改),也就是说 HTTPS 使用了隧道进行通信。隧道:使用 SSL 等加密手段,在客户端和服 务器之间建立一条安全的通信线路 缺点:

● 另外需要进行加密解密等过程,因此速度会更慢;
● 需要支付证书授权的高额费用

HTTPS加密过程

HTTPS 采用混合加密机制,在通信建立前采用非对称加密来交换会话密钥,后序就不再使用非对称加密。 建立了通信之后,采用对称加密来传输密文数据。 采用混合加密的原因

  • 对称加密只使用一个密钥,密文的传输速度比较快,密钥不能被泄漏,无法做到安全的密钥交换
  • 非对称密钥使用两个密钥:公钥和私钥,公钥可以任意分发而私钥必须保密,这样的话能保证安全但是传输速度比较低。

image.png

  1. 客户端发送请求https连接
  2. 服务器返回加密公钥,通常是SSL证书
  3. 客户端通过SSL证书解析出公钥,然后随机生成一个key,通过公钥加密这个key传给服务器(因为只有服务器的私钥才能读出这个key)
  4. 服务器通过私钥读出这个key
  5. 客户端通过这个key来加密数据
  6. 服务器通过key来解密数据 简单来说SSL加密的方式就是通过一个密钥加密另一个密钥(key),然后再使用被j加密的密钥加密数据 SSL用到了 对称加密+非对称加密+CA证书

数字证书 客户端先向服务端获取公钥,然后通过公钥来加密会话密钥,如果保证公共密钥没有被篡改,就需要通过证书CA来保证。 将服务器公钥放在数字证书中,只要证书是可信的,公钥也就是可信的。

HTTP1.1如何优化

  • 尽量避免发送 HTTP 请求;
  • 在需要发送 HTTP 请求时,考虑如何减少请求次数;
  • 减少服务器的 HTTP 响应的数据⼤⼩;

image.png

  1. 对于重复性的HTTP请求,每次得到的数据是一样的,可以把第一次请求响应的数据缓存在本地,下次就可以直接读取本地的数据,不必通过网络获取服务器的响应。将请求的URL作为key,得到的数据作为value,有一个映射关系。(会定期检查更新,这个缓存是否过期)
  2. 合并请求 把多个访问小文件的请求合并成一个大的请求,虽然传输的资源总量是一样的,但是减少请求,就意味着减少了重复的http头部。这样也可以减少了TCP连接的数量,省去TCP握手和慢启动带来时间的浪费。
  3. 按需要访问资源,比如浏览网页的时候,只有下滑到那个网页才去访问下面的资源,以此达到延迟请求。
  4. 对资源进行压缩