读《图解HTTP》

科技资讯 投稿 21700 0 评论

读《图解HTTP》

问题:

  • cookie到底是什么?有什么用?为什么要有?

  • 什么是内容协商机制?

  • 最近读了一本书《图解HTTP》,读完后在大体上对HTTP协议有了更深层次的了解。以下是我以前不懂的问题,通过阅读此书后,这些问题都有了答案:

    • URI和URL的区别?
    • cookie到底是什么?有什么用?为什么要有?
    • 为什么下载时可以随时停止,随时继续下载?
    • 什么是内容协商机制?
    • Http协议中响应头的vary字段到底是什么意思?
    • Cookie的path属性和domain属性究竟是什么?
    • 为什么要有HTTPS?它与HTTP的区别在哪?
    • 什么是SSL和TSL?
    • HTTPS的混合加密机制+证书是怎样的?
    • 什么是WebSocket?为什么要有WebSocket?
    • 什么是XSS攻击、CSRF攻击?

    以下是我对问题的理解以及总结上了其他人的理解。


    问题:URI和URL的区别?

    URI就是这些资源的名称。而URL就是这些资源的位置。但有时候资源的名称中如果包含了位置,那么此时URI就和URL一样了。


    问题:cookie到底是什么?有什么用?为什么要有?

    要解决这种问题,就是把用户状态进行保存,而用户状态保存到Web服务器也是不现实的,因为当出现很多个用户状态时会对Web服务器造成存储上的负担。所以用户状态必须保存到客户端上。因为客户端和服务器的关系是一对多。每个客户端只需要保存一个份用户状态,这样就能提高Web服务器的存储性能。

    Cookie通常会搭配Session一起使用,可以维持客户端与服务器之间的通信。只需要把SessionID通过Cookie发送给客户端,然后客户端每次请求服务器时,都通过Cookie把SessionID发给服务器,服务器对SeesionId进行校验,这样就能维持客户端和服务器之间的通信了。


    问题:为什么下载时可以随时停止,随时继续下载?

    所以下载时停止了,那么也就是往客户端的磁盘上写这个01组合的动作被停止了。如果此时想要继续下载,就必须得知道这个01组合写到哪了,客户端需要从哪开始继续写01组合,也就是说客户端必须要告诉服务器一个范围。从这个范围开始继续把资源复制给客户端。


    问题:什么是内容协商机制?

    而在分布式系统中,同一份资源的不同版本可能存储在不同的服务器上,由不同的服务器提供服务。这些服务器之间可以通过负载均衡或者其他技术来实现对用户请求的处理。因此,不同国家的用户请求的资源版本可能来自不同的服务器。

    HTTP的内容协商机制很好的解决了这问题。内容协商机制是指:某一资源,服务器有多个版本,客户端告知服务器自己的偏好,服务器根据偏好选择合适的版本响应客户端的请求。

      客户端驱动协商(让客户端来选择): 客户端发起请求,服务器发送资源的可选项列表,客户端作出选择后再发送第二次请求。
    • 服务器驱动协商(让服务器来选择): 客户端发送请求时把需要哪个版本的资源通过请求头发送给服务器,让服务器来决定使用哪个版本的资源。
    • 透明协商(让中间代理来选择): 使用某个中间设备(通常是缓存代理)来代表客户端进行协商,可以说是客户端驱动协商的变种。

    问题:Http协议中响应头的vary字段到底是什么意思?

    第一个支持gzip压缩的客户端向中间代理服务器发送请求,代理服务器转发该请求,向web服务器拉取内容,拿到内容后代理服务器缓存该内容(由于请求首部有Accept-Encoding: gzip 所以内容会被压缩)。

    这种问题出现在透明协商机制中。问题的根源就在于代理把同一份资源响应给了不同的客户端,而客户端对份资源是有不同版本的要求的。

    有了vary字段之后,代理缓存可以为通过单个URL访问的文档保存不同的副本。如果服务器把它们的决策过程传给缓存,这些代理就能代表服务器与客户端进行协商。缓存同时也是进行内容转码的好地方,因为部署在缓存里的通用转码器能对任意服务器,而不仅仅是一台服务器传来的内容进行转码。


    问题:Cookie的path属性和domain属性究竟是什么?

    于是有了domain属性,domain属性用于用于指定哪些域名可以接受该Cookie。具体来说,如果设置了该属性,则只有在该属性值所指定的域名及其子域名下发送请求时,浏览器才会将该Cookie发送给服务器。

    需要注意的是,domain属性的值必须是当前域名或其子域名,否则浏览器不会发送该Cookie。同时,该属性值不能包含协议名和端口号。

    于是有了path属性,使用path属性可以指定Cookie可以被哪些路径使用。

    即cookie只会发往path属性指定的路径。只有path属性的路径与请求URL路径一致时,cookie才会发送给服务器。

    总结: domain属性用于控制cookie能够发送给哪些域名,path属性用于控制cookie在服务器上哪些路径可以访问。


    问题:为什么要有HTTPS?它与HTTP的区别在哪?

    于是有了HTTPS,HTTP+加密+认证+完整性保护=HTTPS。因此使用HTTPS能够防止窃听和篡改的风险。


    问题:什么是SSL和TSL?


    问题:HTTPS的混合加密机制+证书是怎样的?

    共享密钥加密: 使用一对完全一样的公钥来对数据进行加密解密,因此称为共享密钥加密。假设有个服务器A,服务器A用公钥加密内容,然后发送给服务器B,服务器B用另一把相同的公钥进行解密。

    在HTTPS协议中使用的是混合密钥加密,也就是把共享密钥加密和公开密钥加密结合结合在一起。

      公开密钥加密通常只用于在建立连接时对客户端和服务器之间的通信进行加密。(也就是用公开密钥加密来确保共享密钥能够安全传输到客户端。)
    • 共享密钥对后续的请求和响应进行加密和解密,这种方式也被称为对称密钥加密。

    为了解决这个问题,必须依赖第三方机构,于是有了证书。使用证书,可以确保这个公开密钥就是服务器发来的。

      服务器先把自己的公开密钥在数字证书认证机构中登记,然后获取公钥证书。
    1. 服务器把认证过的公开密钥和证书发给客户端
    2. 客户端使用浏览器内置的数据证书认证机构的公开密钥对证书进行认证,认证通过后证明确实是服务器的公开密钥。
    3. 客户端用这个公开密钥对客户端生成的共享密钥进行加密,然后发送给服务器。
    4. 服务器用自己的私有密钥进行解密,得到客户端发送的共享密钥。
    5. 之后服务器和客户端的通信就只用共享密钥进行加密。

    问题:什么是WebSocket?为什么要有WebSocket?

      一次连接只能发送一个请求。
    • 请求只能从客户端开始。客户端不可以接受除响应意外的指令,也就是服务器不能主动发送响应到客户端。
    • 每次请求都会传输完整的请求头,且请求头都没有压缩过,请求头信息越多延迟越大。

    为了弥补HTTP的缺点,于是有了WebSocket。WebSocket是一种在单个TCP连接上提供全双工通信的协议,通过这种协议,Web应用程序可以建立与服务器的持久性连接,实现实时通信和数据传输。


    问题:什么是XSS攻击、CSRF攻击?

    CSRF(跨站请求伪造):攻击者通过伪造合法的请求来欺骗用户执行操作的一种攻击方式。攻击者可以利用用户已经登录的身份,向服务器发送请求来执行一些恶意操作。例如,攻击者可以通过伪造提交表单的请求来更改受害者的账户信息。CSRF攻击是攻击者借助受害者的 Cookie 骗取服务器的信任,可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击服务器,从而在并未授权的情况下执行在权限保护之下的操作。

  • 为什么要有HTTPS?它与HTTP的区别在哪?

  • HTTPS的混合加密机制+证书是怎样的?

  • 什么是XSS攻击、CSRF攻击?


问题:URI和URL的区别?

URI就是这些资源的名称。而URL就是这些资源的位置。但有时候资源的名称中如果包含了位置,那么此时URI就和URL一样了。


问题:cookie到底是什么?有什么用?为什么要有?

要解决这种问题,就是把用户状态进行保存,而用户状态保存到Web服务器也是不现实的,因为当出现很多个用户状态时会对Web服务器造成存储上的负担。所以用户状态必须保存到客户端上。因为客户端和服务器的关系是一对多。每个客户端只需要保存一个份用户状态,这样就能提高Web服务器的存储性能。

Cookie通常会搭配Session一起使用,可以维持客户端与服务器之间的通信。只需要把SessionID通过Cookie发送给客户端,然后客户端每次请求服务器时,都通过Cookie把SessionID发给服务器,服务器对SeesionId进行校验,这样就能维持客户端和服务器之间的通信了。


问题:为什么下载时可以随时停止,随时继续下载?

所以下载时停止了,那么也就是往客户端的磁盘上写这个01组合的动作被停止了。如果此时想要继续下载,就必须得知道这个01组合写到哪了,客户端需要从哪开始继续写01组合,也就是说客户端必须要告诉服务器一个范围。从这个范围开始继续把资源复制给客户端。


问题:什么是内容协商机制?

而在分布式系统中,同一份资源的不同版本可能存储在不同的服务器上,由不同的服务器提供服务。这些服务器之间可以通过负载均衡或者其他技术来实现对用户请求的处理。因此,不同国家的用户请求的资源版本可能来自不同的服务器。

HTTP的内容协商机制很好的解决了这问题。内容协商机制是指:某一资源,服务器有多个版本,客户端告知服务器自己的偏好,服务器根据偏好选择合适的版本响应客户端的请求。

    客户端驱动协商(让客户端来选择): 客户端发起请求,服务器发送资源的可选项列表,客户端作出选择后再发送第二次请求。
  • 服务器驱动协商(让服务器来选择): 客户端发送请求时把需要哪个版本的资源通过请求头发送给服务器,让服务器来决定使用哪个版本的资源。
  • 透明协商(让中间代理来选择): 使用某个中间设备(通常是缓存代理)来代表客户端进行协商,可以说是客户端驱动协商的变种。

问题:Http协议中响应头的vary字段到底是什么意思?

第一个支持gzip压缩的客户端向中间代理服务器发送请求,代理服务器转发该请求,向web服务器拉取内容,拿到内容后代理服务器缓存该内容(由于请求首部有Accept-Encoding: gzip 所以内容会被压缩)。

这种问题出现在透明协商机制中。问题的根源就在于代理把同一份资源响应给了不同的客户端,而客户端对份资源是有不同版本的要求的。

有了vary字段之后,代理缓存可以为通过单个URL访问的文档保存不同的副本。如果服务器把它们的决策过程传给缓存,这些代理就能代表服务器与客户端进行协商。缓存同时也是进行内容转码的好地方,因为部署在缓存里的通用转码器能对任意服务器,而不仅仅是一台服务器传来的内容进行转码。


问题:Cookie的path属性和domain属性究竟是什么?

于是有了domain属性,domain属性用于用于指定哪些域名可以接受该Cookie。具体来说,如果设置了该属性,则只有在该属性值所指定的域名及其子域名下发送请求时,浏览器才会将该Cookie发送给服务器。

需要注意的是,domain属性的值必须是当前域名或其子域名,否则浏览器不会发送该Cookie。同时,该属性值不能包含协议名和端口号。

于是有了path属性,使用path属性可以指定Cookie可以被哪些路径使用。

即cookie只会发往path属性指定的路径。只有path属性的路径与请求URL路径一致时,cookie才会发送给服务器。

总结: domain属性用于控制cookie能够发送给哪些域名,path属性用于控制cookie在服务器上哪些路径可以访问。


问题:为什么要有HTTPS?它与HTTP的区别在哪?

于是有了HTTPS,HTTP+加密+认证+完整性保护=HTTPS。因此使用HTTPS能够防止窃听和篡改的风险。


问题:什么是SSL和TSL?


问题:HTTPS的混合加密机制+证书是怎样的?

共享密钥加密: 使用一对完全一样的公钥来对数据进行加密解密,因此称为共享密钥加密。假设有个服务器A,服务器A用公钥加密内容,然后发送给服务器B,服务器B用另一把相同的公钥进行解密。

在HTTPS协议中使用的是混合密钥加密,也就是把共享密钥加密和公开密钥加密结合结合在一起。

    公开密钥加密通常只用于在建立连接时对客户端和服务器之间的通信进行加密。(也就是用公开密钥加密来确保共享密钥能够安全传输到客户端。)
  • 共享密钥对后续的请求和响应进行加密和解密,这种方式也被称为对称密钥加密。

为了解决这个问题,必须依赖第三方机构,于是有了证书。使用证书,可以确保这个公开密钥就是服务器发来的。

    服务器先把自己的公开密钥在数字证书认证机构中登记,然后获取公钥证书。
  1. 服务器把认证过的公开密钥和证书发给客户端
  2. 客户端使用浏览器内置的数据证书认证机构的公开密钥对证书进行认证,认证通过后证明确实是服务器的公开密钥。
  3. 客户端用这个公开密钥对客户端生成的共享密钥进行加密,然后发送给服务器。
  4. 服务器用自己的私有密钥进行解密,得到客户端发送的共享密钥。
  5. 之后服务器和客户端的通信就只用共享密钥进行加密。

问题:什么是WebSocket?为什么要有WebSocket?

    一次连接只能发送一个请求。
  • 请求只能从客户端开始。客户端不可以接受除响应意外的指令,也就是服务器不能主动发送响应到客户端。
  • 每次请求都会传输完整的请求头,且请求头都没有压缩过,请求头信息越多延迟越大。

为了弥补HTTP的缺点,于是有了WebSocket。WebSocket是一种在单个TCP连接上提供全双工通信的协议,通过这种协议,Web应用程序可以建立与服务器的持久性连接,实现实时通信和数据传输。


问题:什么是XSS攻击、CSRF攻击?

CSRF(跨站请求伪造):攻击者通过伪造合法的请求来欺骗用户执行操作的一种攻击方式。攻击者可以利用用户已经登录的身份,向服务器发送请求来执行一些恶意操作。例如,攻击者可以通过伪造提交表单的请求来更改受害者的账户信息。CSRF攻击是攻击者借助受害者的 Cookie 骗取服务器的信任,可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击服务器,从而在并未授权的情况下执行在权限保护之下的操作。

编程笔记 » 读《图解HTTP》

赞同 (114) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽