1.http基础概念
2.请求与响应过程
3.请求头响应头及请求方式简述
4.客户端缓存(cookie,session及其他缓存机制)
1.什么是http????
HTTP是一套计算机通过网络进行通信的规则。使HTTP客户(如Web浏览器)能够从HTTP服务器(Web服务器)请求信息和服务,HTTP是一种无状态的协议。
1.1无状态的协议
无状态是指Web浏览器和Web服务器之间不需要建立持久的连接,
这意味着当一个客户端向服务器端发出请求,然后Web服务器返回响应(response),连接就被关闭了
2. 一次完整的http请求
域名解析:
(1) 浏览器首次搜索自身的DNS缓存,检查自身的缓存(缓存时间大概为 几分钟)中有没有相应的域名IP地址。如果有,则检查是否过期,如果没有过期,那么将结果返回并结束域名解析的过程;否则,往下执行;
(2) 在浏览器自身没找到IP地址的话,浏览器就会在操作系统搜索DNS缓存。如果存在,同样需要检查是否过期;
(3) 如果操作系统中也没有找到,那么就读取本地的HOST文件(在C盘下:Windows\System32\drivers\etc),在本地文件里面查找;
(4) 如果在本地HOST文件下也没能找到,那么浏览器发起一个DNS的系统调用。过程如下:
-
宽带运营商服务器查看本地缓存,如果找到就结束该过程,否则继续执行;
-
宽带运营商服务器代替浏览器发起一个迭代DNS的请求:首先找到根域的DNS IP地址拿到顶级域COM域的IP地址;接着在COM域服务器的地址中寻找主域名(如:imooc.com)的DNS服务器的地址;最后在主域名DNS服务器中找到请求的域名的IP地址,主域名DNS服务器就将该地址发送给运营商服务器。这个时候运营商服务器将结果返回给操作系统内核,然后内核从操作系统DNS服务器上拿去IP地址并返回给浏览器,最后就是浏览器拿到了请求域名的IP地址。
( 1 ) 建立TCP连接
三次握手 建立连接
( 2 ) 浏览器向服务器发送请求命令
( 3 ) 服务器响应
( 4 ) Web服务器关闭TCP连接
请求方式:
GET
GET是http的默认请求方式,一般用来获取数据,传输的数据经过url编码后放在路径?之后,多个键值对通过&连接,另外get的传输长度一般不推荐超过255个字节。
GET方法一般被视为安全方法, 因为它仅用来获取数据而不会对服务器有其他改动。像HEAD、GET、OPTIONS 和 TRACE这几种http方法是被认为是“安全的”,它们只会进行获取数据而不会修改服务器的状态,可用于记录日志、创建缓存或者创建其他统计信息。相反,像POST、PUT、DELETE 和 PATCH 等方法是有可能产生副作用。网络爬虫等一般不会使用这些方式
POST
POST一般用来上传文件或者提交一个完整的web表单。浏览器中提交表单时,这里与get类似,每个键值对都是通过&分割, 其他非字母数字会进行url转码。
其他请求方式
- HEAD获取某个URI响应头信息,基本与GET相同但是不返回响应主体。
- PUT通过提供的URI获取到特定的内容主体,如果存在则修改内容,如果不存在则创建。
- DELETE通过URI删除指定内容
- TRACE返回接受到的请求,用来查看数据经过中间服务器时发生了哪些变动
- OPTIONS返回给定URL支持的所有HTTP方法,这样可以用来检查web服务器的功能
- CONNECT要求使用SSL和TLS进行TCP通信
- PATCH请求修改局部数据
这些请求方法本质上没有区别,最终都是TCP请求,唯一的区别就是每个请求方法,使用的时候,规范规定的使用格式不同,原则上必须按照规范规定的格式使用,其实也可以违反规范使用,比如你可以使用GET方法请求数据,也可以使用GET方法提交数据,当然你可以用POST方法提交数据,也可以用POST方法获取数据。
下面是Chrome发起的http请求报文头部信息:
clipboard3.png- Accept 就是告诉服务器端,我接受那些MIME类型
- Accept-Encoding 接受哪些压缩方式的文件
- Accept-Lanague 告诉服务器能够发送哪些语言
- Connection 告诉服务器支持keep-alive特性
- Cookie 每次请求时都会携带上Cookie以方便服务器端识别是否是同一个客户端
- Host 用来标识请求服务器上的那个虚拟主机,比如Nginx里面可以定义很多个虚拟主机.那这里就是用来标识要访问那个虚拟主机。
- User-Agent 用户代理,一般情况是浏览器,也有其他类型,如:wget curl 搜索引擎的蜘蛛等
- 安全请求首部:
- Authorization: 客户端提供给服务器的认证信息;
- accessToken: 一般作为请求操作时的访问令牌,比如你让用户用QQ登陆后要去拿用户的QQ头像,这时候向腾讯API发送请求时就需要带上access_token。
响应头:
clipboard4.png
- Access-Control-Allow-Credentials: 允许跨域
- Access-Control-Allow-Headers: 允许访问的请求头
- Access-Control-Allow-Methods: 请求方式
- Access-Control-Allow-Origin: 域名
- Access-Control-Expose-Headers:
- Transfer-Encoding:chunked 分块传输编码 是http中的一种数据传输机制,允许HTTP由网页服务器发送给客户端应用(通常是网页浏览器)的数据可以分成多个部分
拓展:(WebSocket) 有状态
需要通过浏览器发出websocket连线请求,然后服务器发出回应,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。
特点:持久的连接
互相沟通的Header是很小的-大概只有 2 Bytes
服务器不再被动的接收到浏览器的请求之后才返回数据,而是在有新数据时就主动推送给浏览器。
webSocket api
- 创建webSocket对象
var Socket = new WebSocket(url, [protocol] );//第一个参数 url, 指定连接的 URL。第二个参数 protocol 是可选的,指定了可接受的子协议。
-
方法:
QQ截图20180114160210.png
详细了解 参考资料(https://www.zhihu.com/question/20215561)
浏览器存储机制
cookie、localstorage、sessionStorage
clipboard.pngcookie的内容主要包括:名字、值、过期时间、路径和域
Secure – 安全
指定cookie的值通过网络如何在用户和WEB服务器之间传递。
这个属性的值或者是“secure”,或者为空。缺省情况下,该属性为空,也就是使用不安全的HTTP连接传递数据。如果一个 cookie 标记为secure,那么,它与WEB服务器之间就通过HTTPS或者其它安全协议传递数据。不过,设置了secure属性不代表其他人不能看到你机器本地保存的cookie。换句话说,把cookie设置为secure,只保证cookie与WEB服务器之间的数据传输过程加密,而保存在本地的 cookie文件并不加密。如果想让本地cookie也加密,得自己加密数据。
Web Storage的概念和cookie相似,区别是它是为了更大容量存储设计的。Cookie的大小是受限的,并且每次你请求一个新的页面的时候Cookie都会被发送过去,这样无形中浪费了带宽,另外cookie还需要指定作用域,不可以跨域调用。
除此之外,Web Storage拥有setItem,getItem,removeItem,clear等方法,不像cookie需要前端开发者自己封装setCookie,getCookie。
最主要的区别:
- localStorage生命周期是永久,这意味着除非用户显示在浏览器提供的UI上清除localStorage信息,否则这些信息将永远存在。
- sessionStorage生命周期为当前窗口或标签页,一旦窗口或标签页被永久关闭了,那么所有通过sessionStorage存储的数据也就被清空了。
Cache
1.Application Cache
html5提供的一种应用缓存机制,使得基于web的应用程序可以离线运行。优点有如下几点:
离线浏览: 用户可以在离线状态下浏览网站内容。
更快的速度: 因为数据被存储在本地,所以速度会更快。
减轻服务器的负载: 浏览器只会下载在服务器上发生改变的资源。
使用:
1.开启应用缓存:在html标签制定manifest,manifest特性与 缓存清单(cache manifest) 文件关联,这个文件包含了浏览器需要为你的应用缓存的资源(文件)列表
clipboard1.png2.编写缓存清单文件
clipboard2.pngCACHE:
这是缓存文件中记录所属的默认段落。在 CACHE: 段落标题后(或直接跟在 CACHE MANIFEST 行后)列出的文件会在它们第一次下载完毕后缓存起来。
NETWORK:
在 NETWORK: 需要与服务器连接的白名单资源。所有类似资源的请求都会绕过缓存,即使用户处于离线状态。可以使用通配符“*”代表除以上指定之外全部需要从服务器拉取。
FALLBACK:
FALLBACK: 段指定了一个后备页面,当资源无法访问时,浏览器会使用该页面。该段落的每条记录都列出两个 URI—第一个表示资源,第二个表示后备页面。两个 URI 都必须使用相对路径并且与清单文件同源。可以使用通配符,类似404.html。
CACHE, NETWORK, 和 FALLBACK 段落可以以任意顺序出现在缓存清单文件中,并且每个段落可以在同一清单文件中出现多次。
网友评论