HTTP学习

109 阅读8分钟

HTTP学习

初识

什么是HTTP

Hyper Text Transfer Protocol 超文本传输协议
应用层协议,基于TCP协议
请求 响应
简单可扩展
无状态

协议分析

发展

HTTP/0.9(单行协议)

请求GET/mypage.html
响应只有HTML文档

HTTP/1.0(构建可扩展性)

增加了Header
有了状态码
支持多种文档类型

HTTP/1.1(标准化协议)

链接复用
缓存
内容协商

HTTP/2(更优异的表现)

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

HTTP/3

新出来的协议版本,会有更优秀的表现,更快的传输速度,有QUIC等

报文

每一次请求(Requests)都会有一次响应(Responses) 请求头部有请求类型,响应头部有状态码

Method

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

状态码

1XX 指信息请求已接收,继续处理
2XX 成功,表示服务器成功接收,理解,接受
3XX 重定向,要完成请求必须进行更进一步的操作
4XX 客户端错误,请求有语法错误或请求无法实现
5XX 服务器端错误,服务器未能实现合法的请求

200 OK-客户端请求成功
301 资源(网页等)被永久转移到其它 URL
302 临时跳转
401 Unauthorized-请求未经授权
404 请求资源不存在,可能是输入了错误的 URL
500 服务器内部发生了不可预期的错误
504 Gateway Timeout-网关或者代理的服务器无法在规定的时间内获得想要的响应

RESTful API

表示一种设计风格
每一个URL代表—种资源
客户端和服务器之间,传递这种资源的某种表现层
客户端通过HTTP method,对服务器端资源进行操作,实现"表现层状态转化"

常用请求头

Accept接收类型,表示浏览器支持的MIME类型(对标服务端返回的Content-Type)
Content-Type客户端发送出去实体内容的类型
Cache-Control指定请求和响应遵循的缓存机制,如no-cache
If-Modified-Since对应服务端的Last-Modified, 用来匹配看文件是否变动,只能精确到1s之内
Expires缓存控制,在这个时间内不会请求,直接使用缓存,服务端时间
Max-age代表资源在本地缓存多少秒,有效时间内不会请求,而是使用缓存
If-None-Match对应服务端的ETag,用来匹配文件内容是否改变(非常精确)
Cookie有cookie并日同域访问时会自动带上
Referer该页面的来源URL(适用于所有类型的请求,会精确到详细页面地址,csrf拦截常用到这个字段)
Origin最初的清求是从哪甲发起的(只会精确到端口),OriainttReferer更首面隐私
User-Agent用户客户端的一些必要信息,如UA头部等

常用响应头

Content-Type服务端返回的实体内容的类型
Cache-Control指定请求和响应遵循的缓存机制,如no-cache
Last-Modified请求资源的最后修改时间
Expires应该在什么时候认为文档已经过期从而不再缓存它
Max-age客户端的本地资源应该缓存多少秒,开启了Cache-Control后有效
ETag资源的特定版本的标识符,Etags类似于指纹
Set-Cookie设置和页面关联的cookie,服务器通过这个头部把cookie传给客户端
Server服务器的一些相关信息
Aaregs-Control-Allow-Origin服务器端允许的请求Origin头部(譬如为*)

缓存

缓存分为强缓存和协商缓存
强缓存:若有缓存,则不会向服务器发送数据,直接使用本地缓存,返回的状态码是200
协商缓存:通过服务器来告知缓存是否可用,返回的状态码是304

cookie

虽然HTTP请求是无状态的,但是有时候我们希望可以获取用户的信息,以做出相应的反应,cooike就可以提供一个作用

Name=value:各种cookie的名称和值
Expires=Date:Cookie 的有效期,缺省时Cookie仅在浏览器关闭之前有效
Path=Path:限制指定Cookie 的发送范围的文件目录,默认为当前
Domain=domain:限制cookie生效的域名,默认为创建cookie的服务域名
secure:仅在HTTPS 安全连接时.才可以发送cookie
HttpOnly:JavaScript 脚本无法获得Cookie
SameSite=[None|Strict|Lax]:(1)None 同站、跨站请求都可发送(2)Strict 仅在同站发送(3)允许与顶级导航一起发送,并将与第三方网站发起的GET请求一起发送

HTTP/2

HTTP/2是现在出来的第二版的HTTP协议,可以提供更快的速度,更稳定的应用,更简单的使用,每一个HTTP/2的连接都是永久的,且提供了流控制
帧(frame):HTTP/2通信的最小单位,每个帧都包含一个帧头,至少也会标识出当前帧所属的数据流
消息:用于请求或者相应的一系列帧的组合,它与帧是逻辑关系
数据流:是建立的双向字节流,可以承载一条或者多条消息

HTTPS

HTTPS是更加安全的协议,它会提供一些安全验证,如安全证书验证,TSL/SSL加密,加密有对称加密和非对称加密

常见场景

静态资源

因为有缓存的出现,所以再次发起同样的请求,并返回200这个状态码,有可能是因为读取缓存 强制缓存的时间:一年
静态资源方案:缓存+CDN_文件名hash

CDN

将服务器分散到各地,若有请求,会找最近服务器请求数据,这样可以提升速度,CDN是一种极为高效的方式为用户的请求提供服务 当更改样式,如何让用户请求到更新后的样式:可以将文件名+hash的方式,每当更新文件,就会生成新的hash,所以这时候用户的缓存是找不到请求的文件的,这样就可以每次更新都去向服务器请求了

跨域

当客户端向服务器请求的协议,主机,端口都不一样时,就会出现跨域,这时候是请求不了的 跨域解决方式: 1.CORS,获知服务器是否允许该跨域源请求 2.代理服务器 3.iframe

登录

鉴权方案

1.Session+cookie,若登录成功服务器会返回客户端成功的信息,客户端会存到cookie中,这样下次登录就可以使用cookie来登录
2.JWT(JSON web token),若登录成功服务器会返回客户端Token,下次登录使用Token就可以登录,一般现时登陆就可以使用这种方式,或者链接登录,服务器向用户邮箱发送登录链接,用户点击这个链接,就可以用Token的方式

单点登录(SSO)

当用户登录一个站点,在点击其他站点会自动登录,可以使用SSO来实现
SSO就是用户登录一个站点A时,站点A会向SSO服务器查询是否登录,若未登录,就会使用用户信息登录,并且将用户登录的相关信息发送给SSO服务器,这样当用户在登录站点B时,B在向SSO服务器查询用户登录情况,就可以直接获取到用户的登录信息,就可以自动登录

实际应用

网络优化

网络优化可以通过: http2协议,CDN动态加速,DNS与解析,网络预连接,域名,压缩,https性能优化等方面实现 稳定性:1.重试机制,当超时、错误时重试,这种方式不推荐,会大大提高服务器负载2.缓存,可以使用缓存来兜底3.数据安全,使用HTTPS

了解更多

WebSocket

基于TCP,提供全双工通讯的网络技术,一般用于实时性较高的服务,如聊天室等,常见使用WebSocket的URL开头是ws://或wss://等

QUIC

基于UDP的传输层协议,提供像TCP一样的可靠性,还有类似TLS的加密技术,提供不同的空间拥塞控制,最新的BBR算法等,避免了HOL阻塞