[各层设备]php
[!NOTE]
HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。它是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。html
数据包细节web
重点
Get请求能缓存,Post不能重点
POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)反作用和幂等的概念面试
[!NOTE]ajax
[!NOTE]
在规范的应用场景上说,Get 多用于无反作用,幂等的场景,例如搜索关键字。Post 多用于反作用,不幂等的场景,例如注册。浏览器
表示请求已接收,继续处理缓存
[!NOTE]
HTTP协议采用“请求-应答”模式,而且HTTP是基于TCP进行链接的。普通模式(非keep-alive)时,每一个请求或应答都须要创建一个链接,完成以后当即断开。安全
当使用Conection: keep-alive
模式(又称持久链接、链接重用)时,keep-alive使客户端道服务器端链接持续有效,即不关闭底层的TCP链接,当出现对服务器的后继请求时,keep-alive功能避免从新创建链接。服务器
管线化后,请求和响应再也不是依次交替的了。他能够支持一次性发送多个请求,并一次性接收多个响应。cookie
在客户端向服务端发送请求的时候,客户端会申明能够接受的数据格式和数据相关的一些限制是什么样的;服务端在接受到这个请求时他会根据这个信息进行判断到底返回怎样的数据。
application/x-www-form-urlencoded
multipart/form-data
text/plain
// 原生ajax 方式对get的url,使用POST请求方式进行发送 document.querySelector("#btnAjax").onclick = function () { var ajax = new XMLHttpRequest(); // 使用post请求 ajax.open('post','ajax_post.php'); // 若是 使用post发送数据 必须 设置 以下内容 // 修改了 发送给 服务器的 请求报文的 内容 // 若是须要像 HTML 表单那样 POST 数据,请使用 setRequestHeader() 来添加 HTTP 头。而后在 send() 方法中规定您但愿发送的数据: ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded"); // 发送 // post请求 发送的数据 写在 send方法中 // 格式 name=jack&age=18 字符串的格式 ajax.send('name=jack&age=998'); // 注册事件 ajax.onreadystatechange = function () { if (ajax.readyState==4&&ajax.status==200) { console.log(ajax.responseText); } } }
CSP Content-Security-Policy
例子:
Content-Security-Policy: default-src http: https:
表示只容许经过http、https的方式加载资源'Content -Security-Policy': 'default-src' \'self\'; form-action\'self\' '
表示只能加载本域下的资源,只能向本域发送表单请求经过以上步骤可知,在 TLS 握手阶段,两端使用非对称加密的方式来通讯,可是由于非对称加密损耗的性能比对称加密大,因此在正式传输数据时,两端使用对称加密的方式通讯。
[!NOTE]
HTTP 2.0 相比于 HTTP 1.X,能够说是大幅度提升了 web 的性能。
在 HTTP 1.X 中,为了性能考虑,咱们会引入雪碧图、将小图内联、使用多个域名等等的方式。这一切都是由于浏览器限制了同一个域名下的请求数量,当页面中须要请求不少资源的时候,队头阻塞(Head of line blocking)会致使在达到最大请求数量时,剩余的资源须要等待其余资源请求完成后才能发起请求。
HTTP 2.0 中全部增强性能的核心点在于此。在以前的 HTTP 版本中,咱们是经过文本的方式传输数据。在 HTTP 2.0 中引入了新的编码机制,全部传输的数据都会被分割,并采用二进制格式编码。
在 HTTP 2.0 中,有两个很是重要的概念,分别是帧(frame)和流(stream)。
帧表明着最小的数据单位,每一个帧会标识出该帧属于哪一个流,流也就是多个帧组成的数据流。
多路复用,就是在一个 TCP 链接中能够存在多条流。换句话说,也就是能够发送多个请求,对端能够经过帧中的标识知道属于哪一个请求。经过这个技术,能够避免 HTTP 旧版本中的队头阻塞问题,极大的提升传输性能。
在 HTTP 1.X 中,咱们使用文本的形式传输 header,在 header 携带 cookie 的状况下,可能每次都须要重复传输几百到几千的字节。
在 HTTP 2.0 中,使用了 HPACK 压缩格式对传输的 header 进行编码,减小了 header 的大小。并在两端维护了索引表,用于记录出现过的 header ,后面在传输过程当中就能够传输已经记录过的 header 的键名,对端收到数据后就能够经过键名找到对应的值。
在 HTTP 2.0 中,服务端能够在客户端某个请求后,主动推送其余资源。
能够想象如下状况,某些资源客户端是必定会请求的,这时就能够采起服务端 push 的技术,提早给客户端推送必要的资源,这样就能够相对减小一点延迟时间。固然在浏览器兼容的状况下你也可使用 prefetch。
通用字段 | 做用 |
---|---|
Cache-Control | 控制缓存的行为 |
Connection | 浏览器想要优先使用的链接类型,好比 keep-alive |
Date | 建立报文时间 |
Pragma | 报文指令 |
Via | 代理服务器相关信息 |
Transfer-Encoding | 传输编码方式 |
Upgrade | 要求客户端升级协议 |
Warning | 在内容中可能存在错误 |
请求字段 | 做用 |
---|---|
Accept | 能正确接收的媒体类型 |
Accept-Charset | 能正确接收的字符集 |
Accept-Encoding | 能正确接收的编码格式列表 |
Accept-Language | 能正确接收的语言列表 |
Expect | 期待服务端的指定行为 |
From | 请求方邮箱地址 |
Host | 服务器的域名 |
If-Match | 两端资源标记比较 |
If-Modified-Since | 本地资源未修改返回 304(比较时间) |
If-None-Match | 本地资源未修改返回 304(比较标记) |
User-Agent | 客户端信息 |
Max-Forwards | 限制可被代理及网关转发的次数 |
Proxy-Authorization | 向代理服务器发送验证信息 |
Range | 请求某个内容的一部分 |
Referer | 表示浏览器所访问的前一个页面 |
TE | 传输编码方式 |
响应字段 | 做用 |
---|---|
Accept-Ranges | 是否支持某些种类的范围 |
Age | 资源在代理缓存中存在的时间 |
ETag | 资源标识 |
Location | 客户端重定向到某个 URL |
Proxy-Authenticate | 向代理服务器发送验证信息 |
Server | 服务器名字 |
WWW-Authenticate | 获取资源须要的验证信息 |
实体字段 | 做用 |
---|---|
Allow | 资源的正确请求方式 |
Content-Encoding | 内容的编码格式 |
Content-Language | 内容使用的语言 |
Content-Length | request body 长度 |
Content-Location | 返回数据的备用地址 |
Content-MD5 | Base64加密格式的内容 MD5检验值 |
Content-Range | 内容的位置范围 |
Content-Type | 内容的媒体类型 |
Expires | 内容的过时时间 |
Last_modified | 内容的最后修改时间 |
参考文章: http://www.javashuo.com/article/p-mjsgoetv-bt.html
参考连接:https://blog.csdn.net/sinat_21455985/article/details/53508115