http
2024-04-12 16:56:06 6 举报
AI智能生成
登录查看完整内容
http
作者其他创作
大纲/内容
只支持GET请求
没有请求头概念
http 0.9
新增POST、DELETE、PUT、HEAD等请求方式
无连接
队头阻塞
缺陷
http 1.0
长连接
管线化(并行请求)
缓存:新增Cache-Control
大文件可以部分传输
断点传输
http 1.1
头部压缩
允许通过单一的HTTP/2连接发起多重的请求-响应
多路复用
最小通信单位,以二进制压缩格式存放内容。来自不同数据流的帧可以交错发送,然后再根据每个帧头的数据流标识符重新组装。
帧
对应 HTTP/1.1 中的请求 request 或者响应 response,包含 1 条或者多条 帧。
消息
一个双向通信的数据流,包含 1 条或者多条 Message。每个数据流都有一个唯一的标识符和可选的优先级信息,用于承载双向消息。
流
二进制分帧:HTTP 1.x在应用层以纯文本的形式进行通信,而HTTP 2.0将所有的传输信息分割为更小的消息和帧,并对它们采用二进制格式编码
服务端推送
请求优先级
http 2
http协议版本
HTTP GET 方法请求指定的资源。使用 GET 的请求应该只用于获取数据。
GET
HEAD方法与GET方法一样,都是向服务器发出指定资源的请求。但是,服务器在响应HEAD请求时不会回传资源的内容部分,即:响应主体。这样,我们可以不传输全部内容的情况下,就可以获取服务器的响应头信息。HEAD方法常被用于客户端查看服务器的性能。
HEAD
DELETE请求用于请求服务器删除请求URI所标识的资源
DELETE
更新指定URI标识的资源
PUT
向指定资源提交数据
POST
OPTIONS请求与HEAD类似,一般也是用于客户端查看服务器的性能。 这个方法会请求服务器返回该资源所支持的所有HTTP请求方法,该方法会用'*'来代替资源名称,向服务器发送OPTIONS请求,可以测试服务器功能是否正常。JavaScript的XMLHttpRequest对象进行CORS跨域资源共享时,就是使用OPTIONS方法发送嗅探请求,以判断是否有对指定资源的访问权限。
OPTIONS
GET在浏览器回退时是无害的,而POST会再次提交请求。
GET请求会被浏览器主动cache,而POST不会,除非手动设置
GET请求只能进行url编码,而POST支持多种编码方式。
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
GET请求在URL中传送的参数是有长度限制的,而POST么有。
对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
GET参数通过URL传递,POST放在Request body中。
浅比较(W3C)
GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200
POST请求,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok
深入
GET和POST对比
请求方式
非对称加密
https
CSP安全策略
客户端和缓存服务器都可以缓存
public
private
强缓存xx秒
max-age=xxx
no-cache
不允许缓存
no-store
Cache-Control
分块编码:主要应用于如下场景,即要传输大量的数据,但是在请求在没有被处理完之前响应的长度是无法获得的。
chunked
Transfer-Encoding(逐跳传输消息首部)
Date:报文创建时间
Via:代理服务器相关信息
keep-alive
表明客户端或服务器想要关闭该网络连接(http1.0默认)
close
Connection
通用首部
任意类型
*/*
图片文件
image/*
image/*;q=0.8
视频文件
video/mp4
JSON
application/json
示例
...
Accept:用户代理可处理的媒体类型
gzip
br
identity
*
Accept-Encoding:优先的内容编码
示例:Host:127.0.0.1:3000
Range:告知服务器返回文件的哪一部分
User-Agent :客户端信息
示例:If-Match: "bfc13a64729c4290ef5b2c2730249c88ca92d82d"
示例:If-None-Match: "bfc13a64729c4290ef5b2c2730249c88ca92d82d"
If-None-Match:当且仅当服务器上没有任何资源的 ETag 属性值与这个首部中列出的相匹配的时候,服务器端会才返回所请求的资源
来源页面采用的协议为表示本地文件的 \"file\" 或者 \"data\
请求首部
bytes:可处理
none:不能处理
Accept-Ranges :告知服务器是否能处理范围请求
示例:ETag: "usagi-1234"
强 ETag 值:不论实体发生多么细微的变化都会改变其值。
示例:ETag: W/"usagi-1234"
弱 ETag 值:只有资源发生了根本改变,产生差异时才会改变 ETag 值。
ETag:资源唯一性标识(当资源更新时,ETag 值也需要更新)
Server :HTTP 服务器应用程序信息
通知浏览器只能通过HTTPS访问当前资源
Strict-Transport-Security
指定响应的资源是否被允许与给定的origin共享
Accept-Control-Allow-Origin
Content-Security-Policy
响应首部
Allow:枚举资源所支持的 HTTP 方法的集合
对应Accept-Encoding
Content-Encoding:实体内容采用的编码方式
Content-Length:实体内容大小(当采用了压缩或者分块传输时就没有这个字段了)
对应Range
示例:Content-Range: bytes 5001-10000/10000
Content-Range:数据片段在整个文件中的位置
对应Accept
Content-Type:实体内容的媒体类型
默认值,表示回复中的消息体会以页面的一部分或者整个页面的形式展示
inline
消息体应该被下载到本地;大多数浏览器会呈现一个“保存为”的对话框,将filename的值预填为下载后的文件名,假如它存在的话
attachment
filename
Content-Disposition:指示回复的内容该以何种形式展示,是以内联的形式(即网页或者页面的一部分),还是以附件的形式下载并保存到本地
实体首部
分支主题
Cookie:请求首部字段
Cookie 的名称和其值(必需项)
NAME=VALUE
Cookie 的有效期(若不明确指定则默认为浏览器关闭前为止)
expires=DATE
仅在 HTTPS 安全通信时才会发送 Cookie
Secure
加以限制,使 Cookie 不能被 JavaScript 脚本访问
HttpOnly
Set-Cookie:响应首部字段
为 Cookie 服务的首部字段
首部
主体
报文
max-age:相对时间的强缓存
缓存响应指令
max-age
缓存请求指令
http1.1:Cache-Control
强缓存
如果服务器上文件被多次修改了但是内容却没有发生改变,服务器需要再次重新返回文件
由于Last-Modified修改时间是GMT时间,只能精确到秒,如果文件在1秒内有多次改动,服务器并不知道文件有改动,浏览器拿不到最新的文件
缺点
Last-Modified和If-Modified-Since
ETag和If-None-Match
协商缓存
缓存
204:响应不包含任何实体信息
2xx:成功
301:永久重定向
3xx:重定向
404:找不到响应资源
405:请求方法错误,例如使用 GET 请求一个 POST 接口
413:请求实体太大
4xx:客户端错误
502(错误网关)
504:网关响应超时
5xx:服务器错误
状态码
GET、POST、HEAD
请求方法
Accept、Accept-Language、Content-Language、DPR、Downlink、Save-Data、Viewport-Width、Width
text/plain、multipart/form-data、application/x-www-form-urlencoded
Content-Type: 仅限这几种
首部字段
请求中的任意XMLHttpRequestUpload 对象均没有注册任何事件监听器;XMLHttpRequestUpload 对象可以使用 XMLHttpRequest.upload 属性访问
请求中没有使用 ReadableStream 对象
用户代理自动设置的首部字段
Fetch 规范中定义为 禁用首部名称 的其他首部,允许人为设置的字段为 Fetch 规范定义的 对 CORS 安全的首部字段集合
简单请求: 不会触发CORS 预检请求
预检请求: 非简单请求触发,由浏览器通过OPTIONS请求发起,获知服务端是否允许该跨源请求,服务端确认允许后,才会发起实际的HTTP请求
Access-Control-Request-Method: 实际请求的HTTP方法
Access-Control-Request-Headers: 实际请求携带的首部
请求头
Access-Control-Allow-Methods: 允许的HTTP请求方法
Access-Control-Allow-Headers: 允许携带的首部,*写法不兼容低版本内核浏览器,大概0.66以下,具体版本以具体测试为准
Access-Control-Max-Age: 该响应的缓存时间,在缓存时间内,浏览器不用为同一请求再次发起预检请求
如果服务端指定了具体的域名而非“*”,那么响应首部中的 Vary 字段的值必须包含 Origin。这将告诉客户端:服务器对不同的源站返回不同的内容。
请求头中携带了Cookie,响应为*时,请求会失败
Access-Control-Allow-Origin: 允许的域,*代表不限制任何域
Access-Control-Expose-Headers:: 在跨源访问时,XMLHttpRequest对象的getResponseHeader()方法只能拿到一些最基本的响应头,Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma,如果要访问其他头,则需要服务器设置本响应头
跨域XMLHttpRequest和Fetch默认不会发送Cookie,当标志位withCredentials为true时,才会携带
响应头没有Access-Control-Allow-Credentials: true的话,浏览器不会把响应内容返回给请求的发送者
Access-Control-Allow-Credentials
响应头
浏览器的同源策略限制
原因
跨域
http
0 条评论
回复 删除
下一页