前端基础整理 | 网络相关(一)

本文的题目整理自大佬文章,语句本身稍做处理,其余内容来自网络和《图解 HTTP》一书,都是网络相关的。

文章首发地址:http://www.brandhuang.com/article/1584788722448web

HTTP

HyperText Transfer Protocol,超文本传输协议。 TCP/IP 协议族的一个子集。用于客户端与服务器间的通讯。是一种 无状态协议。为了实现保持状态的功能,引入了 Cookie 技术。目前主流版本 HTTP 1.0(普遍使用在服务器端)HTTP 1.1(当前最新版)

TCP/IP协议族概要

计算机和网络设备须要相互通讯,双方必须基于相同的方法。好比,如何探测到通讯设备、由哪一方现发起通讯、使用哪一种语言通讯、怎样结束通讯等都须要事先肯定规则,咱们把这种规则称之为 协议(protocol)

TCP/IP 协议是互联网相关连的协议的集合的总称,包括 TCP、IP、UDP、HTTP、DNS、FTP...等等面试

TCP/IP 协议的其余两种说法:api

  1. IPTCP 两种协议;
  2. IP 协议在通讯过程当中,使用到的协议族的统称。

TCP/IP 的分层管理

TCP/IP 协议族中最重要的一点就是分层。

TCP/IP 协议族分为 4 层:跨域

  1. 应用层
  2. 传输层
  3. 网络层
  4. 数据链路层

分层后的好处:若是互联网只由一个协议统筹,某个地方须要改变设计时,就须要把全部的部分总体替换掉。分层以后,只须要把变更的层替换掉便可。把各层之间的接口设计后后,各层内部就能自由改动了。浏览器

一、应用层缓存

应用层决定了向用户提供应用服务时通讯的活动。安全

TCP/IP 协议族内置了各种通用的应用服务。如 FTP(File Transfer Protocol,文件传输协议)DNS(Domain Name System,域名系统)HTTP 协议也属于应用层服务器

二、传输层cookie

为「应用层」提供处于网络链接中的两台计算机之间的数据传输。网络

该层的有两个性质不一样的协议:TCP(Transmission Control Protocol,传输控制协议)UDP(User Data Protocol,用户数据报协议)

三、网络层(又网络互联层)

该层用来处理在网络上流动的数据包。数据包是网络传输的最小单位。

该层规定了经过怎样的路径(即传输路线)到达对方计算机,并把数据包传输给对方。与对方计算机之间经过多台计算机或者网络设备进行传输时,网络层的做用就是在众多选项内选择一条传输路线。

四、链路层

又名数据链路层,网络接口层

用来处理链接网络的硬件部分。包括控制操做系统、硬件设备的驱动、NIC(网络适配器)及光纤等物理可见部分(还包括链接器等一切传输媒介)。

TCP/IP 通讯传输

发送端从应用层往下走,接收端从应用层往上走。

http://static.brandhuang.com/tcp-ip%20transfer.png

http://static.brandhuang.com/tcp-ip%20transfer%20detail.png

Cookie 和 Session

Cookie:

服务器发送到用户浏览器,并 存储在本地的一段通常不超过 4KB 的小型文本数据。

服务器指定 cookie 后,浏览器每次请求都会携带 cookie。

Cookie主要用于如下三个方面:

  • 会话状态管理(如用户登陆状态、购物车、游戏分数或其它须要记录的信息)
  • 个性化设置(如用户自定义设置、主题等)
  • 浏览器行为跟踪(如跟踪分析用户行为等)
设置 cookie:
  1. 客户端发送 HTTP 请求到服务器
  2. 当服务器收到 HTTP 请求时,在响应头里面添加一个 Set-Cookie 字段
  3. 浏览器收到响应后保存下 Cookie
  4. 以后每一次请求中都经过 Cookie 字段将 Cookie 信息发送给服务器。
会话期 Cookie:

浏览器关闭以后它会被自动删除,不须要指定过时时间(Expires)或者有效期(Max-Age

注意:有的浏览器提供了会话恢复功能,即便关闭了浏览器,会话期 cookie 依然会被保存下来,就像没关闭浏览器同样

持久性 Cookie:

持久性Cookie能够指定一个特定的过时时间(Expires)或有效期(Max-Age)

Cookie 的 SecureHttpOnly 标记

标记为 Secure 的Cookie只应经过被HTTPS协议加密过的请求发送给服务端。

为避免跨域脚本 (XSS) 攻击,经过 JavaScript 的 Document.cookie API没法访问带有 HttpOnly 标记的Cookie,

Cookie 的做用域

DomainPath 标识定义了Cookie的做用域.

Domain 标识指定了哪些主机能够接受Cookie。若是不指定,默认为当前文档的主机(不包含子域名)。若是指定了Domain,则通常包含子域名。

例如:设置 Domain = brandhuang.com,则 cookie 也包含子啊子域名中,如 api.brandhuang.comstatic.brandhuang.com

Path 标识指定了主机下的哪些路径能够接受Cookie

例如,设置 Path=/docs,则如下地址都会匹配:

  • /docs
  • /docs/Web/
  • /docs/Web/HTTP
SameSite Cookies

SameSite Cookie容许服务器要求某个cookie在跨站请求时不会被发送,从而能够阻止跨站请求伪造攻击(CSRF)

SameSite 能够有下面三种值:

  • Strict 仅容许一方请求携带 Cookie,即浏览器将只发送相同站点请求的 Cookie,即当前网页 URL 与请求目标 URL 彻底一致。
  • Lax 容许部分第三方请求携带 Cookie
  • None 不管是否跨站都会发送 Cookie

以前默认是 None 的,Chrome80 后默认是 Lax。

好文推荐:http://www.javashuo.com/article/p-rdwvufau-mw.html

session

session 是一种维持客户端与服务器端会话的机制

可是与 cookie 把会话信息保存在客户端本地不同,session 把会话保留在服务端

许多 web应用中,session 机制就是经过 cookie 来实现的。固然还能够用其余方式来实现。

cookie 与 session 的区别。
  1. cookie 是浏览器提供的一种缓存机制,它能够用于维持客户端与服务端之间的会话
  2. session 指的是维持客户端与服务端会话的一种机制,它能够经过 cookie 实现,也能够经过别的手段实现。
  3. 若是用 cookie 实现会话,那么会话会保存在客户端浏览器中
  4. session 机制提供的会话是保存在服务端的

(面试题目)在地址栏键入 URL 后,网络世界发生了什么?

关键词: 访问 DNS 服务器获取 IP 地址三次握手创建 TCP 链接本机发送 HTTP 请求服务器响应并返回数据浏览器渲染显示

首先咱们要访问 DNS 服务器得到网站对应的 IP 地址

拿到网站的 IP 地址后就能够与该网站的服务器创建 TCP 链接(须要进行三次握手

三次握手创建链接后,本机就能够向服务器发送 HTTP 请求

服务器接受到了请求会作出相应的响应,把请求的数据发送给本机浏览器,最终浏览器把服务器响应的数据渲染显示出来

(面试题目) Post 和 Get 的区别

  • Get 请求能缓存,Post 不能
  • Post 相对 Get 安全一点点,由于Get 请求都包含在 URL 里,且会被浏览器保存历史纪录,Post 不会,可是在抓包的状况下都是同样的。
  • Post 能够经过 request body来传输比 Get 更多的数据,Get 没有这个技术
  • URL有长度限制,会影响 Get 请求,可是这个长度限制是浏览器规定的,不是 RFC 规定的
  • Post 支持更多的编码类型且不对数据类型限制

其余方面参考:

https://juejin.im/post/5ddff9565188256eaf01dee4#heading-2

http://www.javashuo.com/article/p-avjgoedh-cc.html

[高德一面]一个 tcp 链接能发几个 http 请求?

大佬原文地址戳我>>

若是是 HTTP 1.0 版本协议,通常状况下,不支持长链接,所以在每次请求发送完毕以后,TCP 链接即会断开,所以一个 TCP 发送一个 HTTP 请求。

可是有一种状况能够将一条 TCP 链接保持在活跃状态,那就是经过 Connection 和 Keep-Alive 首部,在请求头带上 Connection: Keep-Alive,而且能够经过 Keep-Alive 通用首部中指定的,用逗号分隔的选项调节 keep-alive 的行为,若是客户端和服务端都支持,那么其实也能够发送多条,不过此方式也有限制,能够关注《HTTP 权威指南》4.5.5 节对于 Keep-Alive 链接的限制和规则。

HTTP 1.1 版本协议,默认链接都是长链接(想断开则指定 Connection 为 close),所以只要 TCP 链接不断开,即可以一直发送 HTTP 请求,持续不断,没有上限;
一样,若是是 HTTP 2.0 版本协议,支持多用复用,一个 TCP 链接是能够并发多个 HTTP 请求的,一样也是支持长链接,所以只要不断开 TCP 的链接,HTTP 请求数也是能够没有上限地持续发送。

本文先整理这么多吧,反正一次也消化不完。

若是喜欢本文但愿能点个赞~

固然能够关注我来获取后续文章

也能够关注我我的博客

还也能够关注我公众号「九零后重庆崽儿」。

brand.jpg

相关文章
相关标签/搜索