本文的题目整理自大佬文章,语句本身稍做处理,其余内容来自网络和《图解 HTTP》一书,都是网络相关的。
HyperText Transfer Protocol,超文本传输协议。TCP/IP
协议族的一个子集。用于客户端与服务器间的通讯。是一种无状态协议
。为了实现保持状态的功能,引入了Cookie
技术。目前主流版本HTTP 1.0(普遍使用在服务器端)
和HTTP 1.1(当前最新版)
。
计算机和网络设备须要相互通讯,双方必须基于相同的方法。好比,如何探测到通讯设备、由哪一方现发起通讯、使用哪一种语言通讯、怎样结束通讯等都须要事先肯定规则,咱们把这种规则称之为
协议(protocol)
。
TCP/IP
协议是互联网相关连的协议的集合的总称,包括 TCP、IP、UDP、HTTP、DNS、FTP...
等等面试
TCP/IP 协议的其余两种说法:api
IP
和 TCP
两种协议;IP
协议在通讯过程当中,使用到的协议族的统称。
TCP/IP
协议族中最重要的一点就是分层。
TCP/IP
协议族分为 4 层:跨域
分层后的好处:若是互联网只由一个协议统筹,某个地方须要改变设计时,就须要把全部的部分总体替换掉。分层以后,只须要把变更的层替换掉便可。把各层之间的接口设计后后,各层内部就能自由改动了。
浏览器
一、应用层缓存
应用层决定了向用户提供应用服务时通讯的活动。安全
TCP/IP
协议族内置了各种通用的应用服务。如 FTP(File Transfer Protocol,文件传输协议)
和 DNS(Domain Name System,域名系统)
。 HTTP 协议也属于应用层
。服务器
二、传输层cookie
为「应用层」提供处于网络链接中的两台计算机之间的数据传输。网络
该层的有两个性质不一样的协议:TCP(Transmission Control Protocol,传输控制协议)
和 UDP(User Data Protocol,用户数据报协议)
。
三、网络层(又网络互联层)
该层用来处理在网络上流动的数据包
。数据包是网络传输的最小单位。
该层规定了经过怎样的路径(即传输路线
)到达对方计算机,并把数据包传输给对方。与对方计算机之间经过多台计算机或者网络设备进行传输时,网络层的做用就是在众多选项内选择一条传输路线。
四、链路层
又名数据链路层,网络接口层
用来处理链接网络的硬件部分
。包括控制操做系统、硬件设备的驱动、NIC(网络适配器)
及光纤等物理可见部分(还包括链接器等一切传输媒介)。
发送端从应用层往下走,接收端从应用层往上走。
服务器发送到用户浏览器,并
存储在本地
的一段通常不超过 4KB 的小型文本数据。
服务器指定 cookie 后,浏览器每次请求都会携带 cookie。
Cookie主要用于如下三个方面:
cookie
:HTTP
请求到服务器HTTP
请求时,在响应头里面添加一个 Set-Cookie
字段Cookie
Cookie
字段将 Cookie
信息发送给服务器。Cookie
:浏览器关闭以后它会被自动删除,不须要指定过时时间(Expires
)或者有效期(Max-Age
)
注意:有的浏览器提供了会话恢复功能,即便关闭了浏览器,会话期 cookie
依然会被保存下来,就像没关闭浏览器同样
Cookie
:持久性Cookie
能够指定一个特定的过时时间(Expires)
或有效期(Max-Age)
。
Secure
和 HttpOnly
标记标记为 Secure 的Cookie只应经过被HTTPS协议加密过的请求发送给服务端。
为避免跨域脚本 (XSS) 攻击,经过 JavaScript 的 Document.cookie
API没法访问
带有 HttpOnly
标记的Cookie,
Domain
和 Path
标识定义了Cookie的做用域.
Domain
标识指定了哪些主机能够接受Cookie。若是不指定,默认为当前文档的主机(不包含子域名
)。若是指定了Domain,则通常包含子域名。
例如:设置 Domain = brandhuang.com
,则 cookie 也包含子啊子域名中,如 api.brandhuang.com
、static.brandhuang.com
等
Path
标识指定了主机下的哪些路径能够接受Cookie
例如,设置 Path=/docs,则如下地址都会匹配:
SameSite Cookie
容许服务器要求某个cookie在跨站请求时不会被发送,从而能够阻止跨站请求伪造攻击(CSRF)
SameSite 能够有下面三种值:
以前默认是 None 的,Chrome80 后默认是 Lax。
好文推荐:http://www.javashuo.com/article/p-rdwvufau-mw.html
session 是一种维持客户端与服务器端会话的机制
。
可是与 cookie 把会话信息保存在客户端本地不同,session 把会话保留在服务端
。
许多 web应用中,session 机制就是经过 cookie 来实现的。固然还能够用其余方式来实现。
关键词:访问 DNS 服务器
、获取 IP 地址
、三次握手创建 TCP 链接
、本机发送 HTTP 请求
、服务器响应并返回数据
、浏览器渲染显示
首先咱们要访问 DNS 服务器
得到网站对应的 IP 地址
拿到网站的 IP 地址
后就能够与该网站的服务器创建 TCP 链接
(须要进行三次握手
)
三次握手创建链接后,本机就能够向服务器发送 HTTP 请求
服务器接受到了请求会作出相应的响应
,把请求的数据发送给本机浏览器,最终浏览器
把服务器响应的数据渲染显示
出来
其余方面参考:
https://juejin.im/post/5ddff9565188256eaf01dee4#heading-2
http://www.javashuo.com/article/p-avjgoedh-cc.html
大佬原文地址戳我>>
若是是 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 请求数也是能够没有上限地持续发送。
本文先整理这么多吧,反正一次也消化不完。
若是喜欢本文但愿能点个赞~
固然能够关注我来获取后续文章
也能够关注我我的博客
还也能够关注我公众号「九零后重庆崽儿」。