【http】基础知识

HTTP

Header(消息头)

定义:允许客户端和服务器通过 HTTP 请求(request)或者响应(response)传递附加信息。一个 HTTP 标头由它的名称(不区分大小写)后跟随一个冒号(:)

HTTP 消息头支持自定义, 自定义的专用消息头一般会添加’X-'前缀。

项目中常用的 Header

keyvalue描述
content-typeapplication/json (以json格式传递数据)
application/x-www-form-urlencoded (以键值对形式传递数据)
multipart/form-data (常用于文件上传)
请求体类型
access_token口令
web_code防重入
AuthorizationBasice base64 编码的(用户名:密码)认证信息,在获取日志内容和下载日志的接口中需要传入
Security-Hostx.x.x.x指定服务 IP,在分片上传的时候用到
X-Requested-WithXMLHttpRequest表示 ajax 请求

Access-Control-Allow-Origin

指定了该响应的资源是否被允许与给定的来源(origin)共享

# 允许任意来源的请求代码都具有访问资源的权限
Access-Control-Allow-Origin: * 
# 指定一个来源(只能指定一个)
Access-Control-Allow-Origin: http://www.example.com 
# 指定来源为“null”
Access-Control-Allow-Origin: null

Connection

决定当前的事务完成后,是否会关闭网络连接

指令描述
keep-alive保持连接
close关闭连接

Accept-Encoding

会将客户端能够理解的内容编码方式——通常是某种压缩算法——进行通知(给服务端)

指令描述
gzip表示采用 Lempel-Ziv coding (LZ77) 压缩算法,以及 32 位 CRC 校验的编码方式
compress采用 Lempel-Ziv-Welch (LZW) 压缩算法
deflate采用 zlib 结构和 deflate 压缩算法
br采用 Brotli 算法的编码方式
idetity服务器可以返回未压缩的响应
*匹配其他任意未在该请求头字段中列出的编码方式。假如该请求头字段不存在的话,这个值是默认值。它并不代表任意算法都支持,而仅仅表示算法之间无优先次序。
;q=值代表优先顺序,用相对质量价值 表示,又称为权重。

示例:

Accept-Encoding: gzip
Accept-Encoding: gzip, compress, br
Accept-Encoding: br;q=1.0, gzip;q=0.8, *;q=0.1

状态码

由 3 位数字和原因短语组成。数字中的第一位指定了响应类别,后两位无分类。相应类别由以下五种:

状态码类别描述
1xxInformational(信息状态码)接收的请求正在处理
2xxSuccess(成功状态码)请求正常处理完毕
3xxRedirection(重定向状态码)需要进行附加操作以完成请求
4xxClient Error(客户端错误状态码)服务器无法处理请求
5xxServer Error(服务器错误状态码)服务器处理请求出错

其中具有代表性的 19 个状态码如下:

状态码类别描述
200OK请求成功
204No Content服务器成功处理,但未返回内容
206Partial Content是对资源某一部分的请求
301Moved Permanently永久性重定向
302Found临时性重定向
303See Other查看其它地址
304Not Modified资源未被修改
307Temporary Redirect临时性重定向
400Bad Request客户端请求的语法错误,服务器无法理解
401Unauthorized请求要求用户的身份认证
402Payment Required保留,将来使用
403Forbidden服务器理解请求客户端的请求,但是拒绝执行此请求
404Not Found服务器无法找到请求的资源
405Method Not Allowed服务器不支持请求方法
408Request Timeout服务器没有在规定时间内完成请求
500Internal Server Error服务器内部错误
501Not Implemented服务器不支持请求的某个功能
502Bad Gateway作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应
503Service Unavailable由于维护或者负载过重,服务器当前无法处理请求

常见请求方法

方法描述
GET从服务器获取指定资源
POST向服务器发送数据,一般用于提交表单
PUT向服务器更新资源
DELETE从服务器删除资源

缓存

请求头

协议头说明示例
Cache-Control用来指定当前的请求/回复中的,是否使用缓存机制。Cache-Control: no-cache
Pragma与具体的实现相关,这些字段可能在请求/回应链中的任何时候产生Pragma: no-cache
If-Match仅当客户端提供的实体与服务器上对应的实体相匹配时,才进行对应的操作。主要用于像 PUT 这样的方法中,仅当从用户上次更新某个资源后,该资源未被修改的情况下,才更新该资源。If-Match: “9jd00cdj34pss9ejqiw39d82f20d0ikd”
If-None-Match允许在对应的内容未被修改的情况下返回304未修改( 304 Not Modified ),参考 超文本传输协议 的实体标记If-None-Match: “9jd00cdj34pss9ejqiw39d82f20d0ikd”
If-Modified-Since允许在对应的资源未被修改的情况下返回304未修改If-Modified-Since: Dec, 26 Dec 2015 17:30:00 GMT
If-Unmodified-Since仅当该实体自某个特定时间以来未被修改的情况下,才发送回应If-Unmodified-Since: Dec, 26 Dec 2015 17:30:00 GMT

响应头

协议头说明示例
Cache-Control通知从服务器到客户端内的所有缓存机制,表示它们是否可以缓存这个对象及缓存有效时间。其单位为秒Cache-Control: max-age=3600
Expires指定一个日期/时间,超过该时间则认为此回应已经过期Expires: Thu, 01 Dec 1994 16:00:00 GMT
Pragma与具体的实现相关,这些响应头可能在请求/回应链中的不同时候产生不同的效果Pragma: no-cache
ETag对于某个资源的某个特定版本的一个标识符,通常是一个 消息散列ETag: “737060cd8c284d8af7ad3082f209582d”
Last-Modified所请求的对象的最后修改日期Last-Modified: Dec, 26 Dec 2015 17:30:00 GMT

Cache-Control

指令报文类型描述
no-cache请求数据内容不能被缓存, 每次请求都重新访问服务器
no-store所有请求不仅不能缓存, 连暂存也不可以(即: 临时文件夹中不能暂存该资源)
max-age所有请求相对过期时间, 即以秒为单位的缓存时间
public响应可以被任何缓存区缓存, 如: 浏览器、服务器、代理服务器等
private响应只能在浏览器中缓存, 只有在第一次请求的时候才访问服务器
no-transform响应禁用对响应内容的压缩

例子如下:

例子解释
Cache-Control: max-age=86400响应可以由浏览器和中间缓存缓存长达 1 天(60 秒 x 60 分钟 x 24 小时)
Cache-Control: private, max-age=600响应可以由浏览器(但不是中间缓存)缓存长达 10 分钟(60 秒 x 10 分钟)
Cache-Control: public, max-age=31536000响应可以由任何缓存存储 1 年
Cache-Control: no-store不允许缓存响应,并且必须在每次请求时全部获取。

Token

用户身份验证的工具。但与 cookie、session 明文似的形式不同,token 是经过一系列加密手段加密过的,最后表现为一串“无意义”的字符串。但里面包含了许多信息,可能包括用户登录的终端的地址、用户身份 ID、时间戳以及一个签名

流程图

客户端 服务器 发起登录请求,携带用户名+密码参数 1 返回登录结果,包含token 2 缓存token到本地 3 发起请求,请求头中携带token 4 验证token有效性 5 返回数据 6 返回401 7 清除缓存的token,并重定向到登录页 8 alt [验证成功] [验证失败] 返回401 9 清除缓存的token,并重定向到登录页 10 alt [请求头中有tokn] [无token] 返回登录失败原因 11 alt [登录成功] [登录失败] 客户端 服务器

iframe

跨域问题

通过 nginx 过滤掉 X-Frame-Options 的配置

location / {
	proxy_pass   http://com.ityj.frame;
	proxy_hide_header X-Frame-Options;   # 避免出现多个 X-Frame-Options属性
	add_header X-Frame-Options ALLOWALL; # 将之前网页的 SAMEORIGIN 属性给替换了,可以嵌套了
}
  • 28
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HTTP(HyperText Transfer Protocol)是一种用于在网络中传输超文本的协议。它是客户端和服务器之间进行通信的规则集。下面是一些HTTP协议的基础知识: 1. HTTP通信是无状态的:HTTP协议本身不保留任何关于先前请求或响应的信息。每个HTTP请求都是独立的,服务器不会记住之前的请求。 2. 请求方法:HTTP定义了不同的请求方法,常用的有GET、POST、PUT、DELETE等。GET用于获取资源,POST用于提交数据,PUT用于更新资源,DELETE用于删除资源。 3. URL:统一资源定位符(URL)是用于标识和定位资源的地址。它由协议类型(如http://)、主机名、可选的端口号、路径和查询参数组成。 4. 请求头:HTTP请求包含一些元数据,称为请求头。请求头包含了一些关于请求的附加信息,如User-Agent、Accept-Language等。 5. 响应状态码:HTTP响应包含一个状态码,用于表示请求的处理结果。常见的状态码包括200(成功)、404(未找到)和500(服务器内部错误)等。 6. 响应头:HTTP响应也包含一些元数据,称为响应头。响应头包含了一些关于响应的附加信息,如Content-Type、Content-Length等。 7. 实体:HTTP请求和响应中的有效载荷称为实体。通常,在请求中,实体是要发送给服务器的数据;在响应中,实体是服务器返回的数据。 这些是HTTP协议的一些基础知识,希望对你有帮助!如有更多问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值