计算机网络-HTTP相关(连接,报文,cookie,session,https,get/post)

作者:槿梓Leo
链接:https://www.nowcoder.com/discuss/256231?type=1
来源:牛客网
之前看到的笔记都很零碎,这个作者写得很详细,图片也很丰富

1、什么是Http协议

HTTP超文本传输协议,定义了客户端和服务器之间数据传输的格式规范。

2、HTTP协议与TCP/IP协议的关系

HTTP协议是应用层协议,其传输层基于TCP协议,网络层基于IP协议。其中IP协议主要解决的是网络路由和寻址问题(网络路由解决的是数据包分组交换过程经过的节点路径问题,IP寻址则是指ARP地址解析的过程,找到IP地址对应的接口);TCP提供可靠的报文段传输,保证数据无差错、不重复、不丢失、按序到达。此外HTTP的长连接和短连接实际上是指TCP的长连接和短连接。

HTTP的长连接和短连接本质上是TCP长连接和短连接。

短连接:浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。

长连接:当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接要客户端和服务端都支持长连接。

TCP短连接:client向server发起连接请求,server接到请求,然后双方建立连接。client向server发送消息,server回应client,然后一次读写就完成了,这时候双方任何一个都可以发起close操作,不过一般都是client先发起 close操作.短连接一般只会在client/server间传递一次读写操作

TCP长连接:client向server发起连接,server接受client连接,双方建立连接。Client与server完成一次读写之后,它们之间的连接并不会主动关闭,后续的读写操作会继续使用这个连接。

3、Http协议有哪些特征?

1、支持客户/服务器模式;
2、简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。;
3、灵活:HTTP允许传输任意类型的数据对象;
4、无连接;
5、无状态;

4、如何理解HTTP协议是无状态的

HTTP协议是无状态的,指的是协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

5、Http协议首部字段

每个首部行由首部字段名和相应的值组成。

a、通用首部字段(请求报文与响应报文都会使用的首部字段)
Date:创建报文时间
Connection:连接的管理
Cache-Control:缓存的控制
Transfer-Encoding:报文主体的传输编码方式

b、请求首部字段(请求报文会使用的首部字段)
Host:请求资源所在服务器
Accept:可处理的媒体类型
Accept-Charset:可接收的字符集
Accept-Encoding:可接受的内容编码
Accept-Language:可接受的自然语言

c、响应首部字段(响应报文会使用的首部字段)
Accept-Ranges:表示服务器是否可以接收范围请求,返回的字段是界定范围的单位,有none不可以,bytes可以单位是字节。(此外范围请求的意思是服务器允许只发送HTTP消息的一部分到客户端,适用于传输大的媒体文件)。
Location:令客户端重新定向到的URI
Server:HTTP服务器的安装信息

d、实体首部字段(请求报文与响应报文的的实体部分使用的首部字段)
Allow:资源可支持的HTTP方法
Content-Type:实体主类的类型
Content-Encoding:实体主体适用的编码方式
Content-Language:实体主体的自然语言
Content-Length:实体主体的的字节数
Content-Range:实体主体的位置范围,一般用于发出部分请求时使用

范围请求相关请求头,响应及实体头

6、HTTP状态码,你知道哪些

状态码由三位数字组成,分为5大类:1XX表示通知消息,如请求已经收到或正在处理;2XX表示成功,如请求接受;3XX表示重定向,如要完成相应的操作还需要采取进一步的操作;4XX表示客户端差错,如语法有误,资源不存在等;5XX表示服务器端差错,如服务器已失效,内部错误等。                                                                                                                                          200:请求被正常处理
204:请求被受理但没有资源可以返回
206:客户端只是请求资源的一部分,服务器只对请求的部分资源执行GET方法,相应报文中通过Content-Range指定范围的资源。
301:永久性重定向
302:临时重定向
303:与302状态码有相似功能,只是它希望客户端在请求一个URI的时候,能通过GET方法重定向到另一个URI上
304:发送附带条件的请求时,条件不满足时返回,与重定向无关
307:临时重定向,与302类似,只是强制要求使用POST方法
400:请求报文语法有误,服务器无法识别
401:请求需要认证
403:请求的对应资源禁止被访问
404:服务器无法找到对应资源
500:服务器内部错误
503:服务器正忙

7、HTTP报文格式

HTTP报文由开始行、首部行、空行、实体主体三部分组成

HTTP请求报文由请求行、请求头、空行和请求内容4个部分构成。
图片说明

请求行:
由请求方法字段、URL字段、协议版本字段三部分构成,它们之间由空格隔开。常用的请求方法有:GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。

请求头:
请求头由key/value对组成,每行为一对,key和value之间通过冒号(:)分割。请求头的作用主要用于通知服务端有关于客户端的请求信息。

典型的请求头有:
User-Agent:生成请求的浏览器类型
Accept:客户端可识别的响应内容类型列表;星号*用于按范围将类型分组。/\表示可接受全部类型,type/*表示可接受type类型的所有子类型。
Accept-Language: 客户端可接受的自然语言
Accept-Encoding: 客户端可接受的编码压缩格式
Accept-Charset: 可接受的字符集
Host: 请求的主机名,允许多个域名绑定同一IP地址
connection:连接方式(close或keeplive)
Cookie: 存储在客户端的扩展字段

空行:
最后一个请求头之后就是空行,用于告诉服务端以下内容不再是请求头的内容了。

请求内容:
请求内容主要用于POST请求,与POST请求方法配套的请求头一般有Content-Type(标识请求内容的类型)和Content-Length(标识请求内容的长度)

响应报文

HTTP响应报文由状态行、响应头、空行和响应内容4个部分构成。
图片说明
状态行:
由HTTP协议版本、状态码、状态码描述三部分构成,它们之间由空格隔开。

状态码由3位数字组成,第一位标识响应的类型,常用的5大类状态码如下:
1xx:表示服务器已接收了客户端的请求,客户端可以继续发送请求
2xx:表示服务器已成功接收到请求并进行处理
3xx:表示服务器要求客户端重定向
4xx:表示客户端的请求有非法内容
5xx:标识服务器未能正常处理客户端的请求而出现意外错误

响应头:
一般情况下,响应头会包含以下,甚至更多的信息。
Location:服务器返回给客户端,用于重定向到新的位置
Server: 包含服务器用来处理请求的软件信息及版本信息
Vary:标识不可缓存的请求头列表
Connection: 连接方式。
对于请求端来讲: close是告诉服务端,断开连接,不用等待后续的求请了。keeplive则是告诉服务端,在完成本次请求的响应后,保持连接,等待本次连接后的后续请求。
对于响应端来讲: close表示连接已经关闭。keeplive则表示连接保持中,可以继续处理后续请求。Keep-Alive表示如果请求端保持连接,则该请求头部信息表明期望服务端保持连接多长时间(秒),例如300秒,应该这样写Keep-Alive: 300

空行:
最后一个响应头之后就是空行,用于告诉请求端以下内容不再是响应头的内容了。

响应内容:
服务端返回给请求端的文本信息。

8、大文件怎么分块编码传输

对于大文件或不能预先知道大小的动态文件,使用分块传输编码方式(chunk编码)。chunk编码允许服务器端将传输给客户端的数据分成多块,数据块大小固定,有客户端应用负责重新组装。

每个chunk编码块由两部分组成,首先是头部给出内容长度和长度单位,然后是正文内容。由长度为0的chunk标志结束,该块的内容称为footer内容,用于传输还没有传输的头部信息

 一般情况HTTP的Header包含Content-Length域来指明报文体的长度。有时候服务生成HTTP回应是无法确定消息大小的,比如大文件的下载,或者后台需要复杂的逻辑才能全部处理页面的请求,这时服务器一般使用chunked编码。

HTTP 1.1引入分块传输编码提供了以下几点好处:

HTTP分块传输编码允许服务器为动态生成的内容维持HTTP持久连接。通常,持久链接需要服务器在开始发送消息体前发送Content-Length消息头字段,但是对于动态生成的内容来说,在内容创建完之前是不可知的。[动态内容,content-length无法预知]

分块传输编码允许服务器在最后发送消息头字段。对于那些头字段值在内容被生成之前无法知道的情形非常重要,例如消息的内容要使用散列进行签名,散列的结果通过HTTP消息头字段进行传输。没有分块传输编码时,服务器必须缓冲内容直到完成后计算头字段的值并在发送内容前发送这些头字段的值。[散列签名,需缓冲完成才能计算]

HTTP服务器有时使用压缩 (gzip或deflate)以缩短传输花费的时间。分块传输编码可以用来分隔压缩对象的多个部分。在这种情况下,块不是分别压缩的,而是整个负载进行压缩,压缩的输出使用本文描述的方案进行分块传输。在压缩的情形中,分块编码有利于一边进行压缩一边发送数据,而不是先完成压缩过程以得知压缩后数据的大小。[gzip压缩,压缩与传输同时进行]

9、Http协议中有哪些请求方式?

URI/URL/URN:URI统一资源标识符,提供一个简单可扩展的资源标识方式,包括URL和URN或者两者的叠加,以及其他可以定位标识资源的符号,URL是统一资源定位符,他给出资源的位置和资源的访问方法;而URN是统一资源名称,给出唯一标识资源的名称,包括特定的命名空间和唯一资源标识。(参考https://blog.csdn.net/Xanthin/article/details/52278147

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

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

PUT:传输文件,报文主体中包含文件内容,保存到对应URI位置

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

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

OPTIONS:查询响应URI支持的HTTP方法

10、什么是HTTP长连接

长连接定义:
client方与server方先建立连接,连接建立后不断开,然后再进行报文发送和接收。这种方式下由于通讯连接一直存在。此种方式常用于P2P点对点的通信。

长连接的操作步骤是:建立连接——数据传输...(保持连接)...数据传输——关闭连接

长连接适用场景:
监控系统:后台硬件热插拔、LED、温度、电压发生变化;
即时通信系统:其它用户登录、发送信息;
即时报价系统:后台数据库内容发生变化;
像以上这些连接,如果每次操作都要建立连接然后再操作的话处理速度会降低。所以操作时第一次连接上以后,以后每次直接发送数据就可以了,不用再建立TCP连接。
再比如:数据库的连接用长连接,如果用短连接频繁的通信会造成socket错误,频繁的socket创建也是对资源的浪费。什么是HTTP短连接

短连接定义:
Client方与server每进行一次报文收发交易时才进行通讯连接,交易完毕后立即断开连接。此方式常用于一点对多点通讯。

短连接的操作步骤是:建立连接——数据传输——关闭连接...建立连接——数据传输——关闭连接

短连接的适用场景:
短连接多用于操作频繁,点对点的通讯,而且连接数不能太多的情况。每个TCP连接的建立都需要三次握手,每个TCP连接的断开要四次握手。
web网站的http服务一般都用短连接。因为长连接对于服务器来说要耗费一定的资源。像web网站这么频繁的成千上万甚至上亿客户端的连接用短连接更省一些资源。
试想如果都用长连接,而且同时用成千上万的用户,每个用户都占有一个连接的话,可想而知服务器的压力有多大。所以并发量大,但是每个用户又不需频繁操作的情况下需要短连接。总之:长连接和短连接的选择要视需求而定。

11、Get和POST方法的区别

1、传送方式:get通过地址栏传输,post通过报文传输。

2、传送长度:get参数有长度限制(受限于url长度),而post无限制

3、GET产生一个TCP数据包;POST产生两个TCP数据包。

对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据)

而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。因此Yahoo团队有推荐用GET替换POST来优化网站性能。但这是一个坑!跳入需谨慎。为什么?

  1. GET与POST都有自己的语义,不能随便混用。
  2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。
  3. 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

建议:
1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式;
2、在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式;

案例:
一般情况下,登录的时候都是用的POST传输,涉及到密码传输,而页面查询的时候,如文章id查询文章,用get 地址栏的链接为:article.php?id=11,用post查询地址栏链接为:article.php, 不会将传输的数据展现出来。

12、Http协议实现的原理机制

(1).整个流程步骤:
图片说明
(2)域名解析过程:(浏览器,操作系统hosts文件,本地域名服务器、权限域名服务器、顶级域名服务器、根域名服务器)
图片说明
(3).三次握手过程
(4).建立连接后,客户端发起Http请求
(5).服务器响应Http请求,客户端得到HTML代码
(6).浏览器解析HTML代码
(7).浏览器对页面进行渲染呈现给用户

13、Http怎么优化?

Http是超文本传输协议,提供客户端和服务器之间的数据传输规范。采用明文方式进行传输安全性不高。在Http层和Tcp层之间增加SSL层(安全套接层,或者更为规范的TLS层,传输层安全),构成Https协议,利用密钥进行数据传输。

SSL利用数字签名身份鉴别、数据加密、消息完整性验证的机制完成数据的加密传输。(数据证书是一个包含用户的公钥和用户身份信息的文件,用于证明用户公钥和身份的联系,有CA认证中心提供)。

HTTP和HTTPS的区别:

1、HTTP是以明文进行传输的,HTTPS以密文的方式进行传输,安全性更高;

2、HTTPs的握手时延较高,在TCP三次握手建立连接之后,还要进行SSL层的握手;(确定加密算法、身份鉴别、确定对称密钥)

3、HTTPs提供身份的认证可以确保数据发送到正确的客户端或服务器

4、HTTPs的部署成本较高,一方面需要从CA认证中心购买数字证书,另一方面需要较高的性能支撑加密算法的运作。

cookie主要是解决HTTP无状态的问题,在客户端存储有关用户的信息。cookie的大小和数量受使用流量器的限制,一般大小不超过4096个字节。

利用cookie的访问过程如下:                                                                                                                                                              

  • 浏览器首次发送一个HTTP请求到服务器端;
  • 服务器发送一个HTTP响应到客户端,其中包括Set-Cookie,意思就是浏览器建立一个cookie保存服务器指定的内容,比如用户信息和用户操作信息;
  • 浏览器保存好信息之后,下次我们再次访问网站的时候,浏览器再发送HTTP请求到服务器端时都会携带之前保存的cookie;
  • 服务器端会从收到的cookie中识别用户信息,就能让页面为你提供专门属于你的内容了。

15、session会话控制

session的功能和cookie类似,不过是保存在服务器端的用户信息,用于解决cookie安全性不高、存储内容有限的问题。一般搭配cookie使用在浏览器中存储session-ID。利用session的访问过程如下所示:但客户端首次访问浏览器时,浏览器将相应的session-ID返回给浏览器,并将相应的用户信息和用户操作信息保存在服务器中,浏览器下次访问携带cookie即可。

禁用cookie:如果客户端禁用了cookie,通常有两种方法实现session而不依赖cookie。

1)URL重写,就是把sessionId直接附加在URL路径的后面。

2)表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。

16、session与cookie的区别

(1)保存的位置:session以session结构例如字典等方式保存在服务器中,cookie以文本的方式保存在浏览器中。

(2)安全性:cookie将所有信息放在浏览器中,可以被查看,在传送过程中易被拦截,安全性较差。考虑登录等重要信息建议采用session

(3)大小:cookie的大小和数量受浏览器限制,一般大小不超过4096字节,所以大文件存储建议选用session

(4)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。

17、http1.0/1.1/2/3以及websocket之间的区别

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值