HTTP总结 | 青训营笔记

110 阅读5分钟

这是我参与「第四届青训营 」笔记创作活动的第6天

前言

今天学习了HTTP相关的知识,从HTTP的发展,到HTTP整个发送以及后端响应的整个过程都做了一个详细的学习。以下就是我对今天HTTP所学内容的总结。

HTTP

HTTP是应用层协议,是基于TCP/IP的。英文名为Hyper Text Transfer Protocol译名超文本传输协议。HTTP是一个无状态简单可靠的协议。大多应用在与后端交互数据。

协议分析

发展

HTTP/0.9

单行协议,请求只有GET,响应只有HTML文档

HTTP/1.0

增加Header信息,有了状态码,支持多种文档。

HTTP/1.1

链路复用,缓存,内容协商。

HTTP/2

二进制协议,压缩header,服务器推送

HTTP/3

草案中

HTTP请求方式

  • GET (请求一个指定资源的表示形式,使用GET请求应只被用于获取数据
  • POST(用于将实体提交到指定资源,通常导致服务器上状态变化)
  • PUT(用请求有效负荷替换目标资源的所有当前表示)
  • DELETE(删除指定资源)
  • HEAD (请求一个Get请求的响应相同的响应,但没有响应体)
  • CONNECT(建立一个到由目标资源表示的服务器隧道)
  • OPTIONS (用于描述资源的通信选项)
  • TRACE(沿着目标资源的路径执行一个消息环回测试)
  • PATCH(用于对资源应用部分的修改)

常见HTTP状态码

  • 200 客户端请求成功
  • 301 资源等永久转移到其它URL
  • 302 临时跳转
  • 401 请求未经授权
  • 500 服务器内部发生错误
  • 504 网关或者代理无法超时

常见请求头

  • Accept 接受类型,表示浏览器支持的MIME类型,服务器对应的是Content-type
  • Content-type 客户端发送出去实体内容的类型
  • Cache—Control 指定请求和响应的缓存机制
  • If-Modified-Since 对应服务器的Last-Modified,用来匹配文件是否更改,精确到1s内。
  • Exprices 缓存控制,在这个时间内不会请求,直接使用缓存。
  • Max-age 代表资源在本地缓存多少秒
  • If-none-Match 对应服务器的Etage,匹配文件内容是否更改。
  • Cookie 有cookie时请求同域下会自动带上
  • Refere 请求源,通常用于CSRF。
  • User-Agent 客户端信息

常见响应头

标志作用
Content-type服务端返回的实体内容类型
Cache-Control指定请求和相应遵循的缓存机制,如no-cache
Last-Modified请求资源的最后时间
Expires应该在什么时候认为文档已经过期,从而不在缓存它
Max-age客户端的本地资源应该缓存多少秒,开启Cache-control后才起效
ETag资源的特点版本的标识符,Etags类似指纹
Set-Cookie设置和页面相关的Cookie 服务器通过这个头部吧cookie传递给客户端
Server服务器的一些相关信息
Access-Control-Allow-Origin服务器允许请求的origin头部

缓存

使用缓存的好处,减少了不必要的数据传输,节省带宽,减少服务器负担,提高网站性能。
缓存分为强缓存,和协商缓存,强缓存指设置了Cache-Control,Expires,每次请求的时候会在本地里面先去找,并且核对过期时间,如果存在且没过期,则直接使用。协商缓存,通过每次请求的etag,last-modified和后端服务器进行对比,如果更改就返回新资源,如果没变,etag和last-modified就不改变。 过程大致像这样,发请求,看资源是否过期,过期则请求服务器,服务器对比资源是否真的过期,没过期,返回304状态码,客户端用缓存的老资源。

Cookie

如果在浏览器设置HttpOnly,js就无法获取Cookie。在浏览器端设置cookie的格式为name=value,可以设置过期时间,目前最新的goole浏览器为400天最大时间,以前是永久不过期。domain字段限制cookie使用的域名,一般情况下默认为当前域。如果有其它需求,可以设置SameSite = None | Strict | Lax 字段。None表示同站跨域请求都能发送,Strict,只能在同站发送,Lax为允许与顶级,第三方网站一起发送。

HTTP2.0

HTTP2.0最小通信单位为Frame(帧),基于二进制,可以交错发送,接收放重组信息。HTTP2.0连接是永久的。

HTTPS

信息经过TSL/SSL加密才会发送,保证了用户的信息安全。 一个完整的HTTPS请求过程如图所示。

image.png

对称加密:加密和解密都使用一个密钥。 非对称加密:加密和解密都使用2个不同的密钥。公钥(public key) 私钥(private key)

普通的HTTP请求是三层 HTTP层->TCP层->IP层 HTTPS层分为4层 HTTP层->TLS|SSL层->TCP层->IP层

跨域

image.png
如图所示:我们的url由3个部分组成协议,域名,端口。只要其中一项不同就是跨域。http默认的情况下是80端口,写和不写都是默认80,https默认是443。

image.png

解决跨域的方式

  • jsonp(不常用)
  • 代理服务器 (天然解决,很好用)
  • iframe