日常笔记记录

1、Http

1.1 概念

HTTP 是 HyperText Transfer Protocol(超文本传输协议)的简写,它是 TCP/IP 协议集中的一个应用层协议,是客户端与服务端进行交互时必须遵循的规则。它用于定义 Web 浏览器与 Web 服务器之间交换数据的过程以及数据本身的格式,底层是靠 TCP 进行可靠地信息传输。

1.2 URL

URL(统一资源定位符)是 Uniform Resource Locator 的缩写。它用来找到资源所在的位置,并且去访问和得到资源

URL格式:

http://122.225.198.118:5000/api/ERPWeb/DocumentFlow/GetByPage?page_index=1&page_size=15&state=2&server_id=60.191.59.11
http://www.pycxbus.cn/service.aspx
https://a1.easemob.com/1101221025110065/demo/chatgroups
  • http:协议。比如,https、ftp 等协议。
  • 122.225.198.118:服务器地址(IP,域名)
  • 5000:服务端口
  • /api/ERPWeb/DocumentFlow/GetByPage:资源路径(接口路径)
  • page_index=1:参数

1.3 Http报文格式

请求端(客户端)的 HTTP 报文叫做请求报文,响应端(服务器端)的叫做响应报文。

  • 请求报文
    请求报文是由请求方法、请求 URL、协议版本、可选的请求首部字段和内容实体构成的。

    image

    image

  • 响应报文
    响应报文基本上由协议版本、状态码(表示请求成功或失败的数字代码)、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成。

1.4 Http方法

  • Get 请求资源(一般用于查询)
    参数放在url后,格式?key1=value1&key2=value2

    get方法提交的数据大小长度并没有限制,Http协议规范没有对URL长度进行限制,目前说的get长度有限制,是特定的浏览器及服务器对它的限制。

    浏览器:IE:对URL的最大限制为2083个字符,若超出这个数字,提交按钮没有任何反应。Firefox:对Firefox浏览器URL的长度限制为:65536个字符。Safari:URL最大长度限制为80000个字符。Opera:URL最大长度限制为190000个字符。Google(chrome):URL最大长度限制为8182个字符。服务器:Apache:能接受的最大url长度为8192个字符IIS:能接受最大url的长度为16384个字符。Nginx:可以通过修改配置来改变长度限制。
    client_header_buffer_size 默认值:client_header_buffer_size 1k
    large_client_header_buffers默认值 :large_client_header_buffers 4 4k/8k
  • Post 传输实体主体(一般用于新增编辑)

    content-type是http请求的响应头和请求头的字段。当作为响应头时,告诉客户端实际返回的内容的内容类型。作为请求头时(post或者put),客户端告诉服务器实际发送的数据类型。

    在前端开发过程中,通常需要跟后端工程师对接接口的数据格式,不同的数据类型对于服务器来说有不同的处理方式,因此我们需要关注不同的conten-type类型

    • application/x-www-form-urlencoded
      代表项目调度系统,浏览器原生form表单默认的提交方式(在不设置enctype的情况下)。此时请求头的格式如下:

      content-type: application/x-www-form-urlencoded;charset=utf-8
      form-data: key1=val1&key2=val2
      

      此时后端获取参数值方法

      framework
      Request["key1"]
      
      netcore
      [HttpPost]
      public void Test([FromForm] FlowRecordQuery query)
      

      此种情况下:非字母或数字的字符会被进行编码(编码方式percent-encoding百分比编码),这种方式不支持二进制数据。

    • multipart/form-data
      用于文件上传接口,与application/x-www-form-urlencoded的区别是支持文件的传输,并且它的传输数据放在request-payload里,并且以bounday进行分隔。

      POST /test.html HTTP/1.1 
      Host: example.org 
      Content-Type: multipart/form-data;boundary="boundary" --boundary 
      Content-Disposition: form-data; name="field1" value1 
      --boundary 
      Content-Disposition: form-data; name="field2"; filename="example.txt" value2
      

      此时后端获取参数值方法

      framework
      Request.Files["file"]
      
      netcore
      和application/x-www-form-urlencoded一致
      
    • application/json

      POST http://www.example.com HTTP/1.1 
      Content-Type: application/json;charset=utf-8{"title":"test","sub":[1,2,3]}
      

      它用来告诉服务端消息主体是序列化后的JSON字符串,其中一个好处就是JSON 格式支持比键值对复杂得多的结构化数据。

      此时后端获取参数值方法

      framework
      Request.Files["file"]
      
      netcore
      public void Test(FlowRecordQuery query)
      

1.5 Http访问控制(CORS跨域资源共享)

  • 跨域:指不同域名之间相互访问,浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全机制。

  • 同域:指同一协议、同一 ip 地址、同一端口,其中有一个不同就会产生跨域。

image

解决办法:

//请求跨域处理,配置IP白名单
services.AddCors(options =>options.AddPolicy("ALL", p =>p.WithOrigins(Configuration.GetSection("AppSetting:CorsOrigins").Value.Split(",", StringSplitOptions.RemoveEmptyEntries).ToArray()).AllowAnyHeader().AllowAnyMethod().AllowCredentials())
);//文件跨域处理
app.UseStaticFiles(new StaticFileOptions
{//指定实际物理路径FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "文件目录")),OnPrepareResponse = (c) =>{c.Context.Response.Headers.Add("Access-Control-Allow-Origin", "*");},//设置URL请求的文件路径RequestPath = new PathString("/images")
});

IIS跨域处理

Access-Control-Allow-Headers:Content-Type
Access-Control-Allow-Methods:GET,POST,PUT,DELETE,OPTIONS
Access-Control-Allow-Origin:*

[外链图片转存中…(img-PuUcIudA-1668680914968)]

[外链图片转存中…(img-7ckzdP7x-1668680914969)]

1.6 Http状态码(不是业务状态码)

  • 2** 处理成功响应类
    200:处理成功
    204:处理成功但没有任何返回
  • 4** 客户端错误
    401:未授权(没有加Token或者Token过期)
    403:禁止的动作(没有权限,比如用户没有新增权限,调用新增接口)
    404:资源路径找不到(请求路径不对,注意中英文、空格等)
    405:请求方法不正确(Get接口使用Post请求)
  • 5** 服务端错误
    500:服务器内部错误(服务挂掉、服务运行异常)
    503:服务不可用(IIS应用程序池没有开启)

2、抓包

image

3、Https

大家可能都听说过 HTTPS 协议之所以是安全的是因为 HTTPS 协议会对传输的数据进行加密,而加密过程是使用了非对称加密实现。但其实,HTTPS 在内容传输的加密上使用的是对称加密,非对称加密只作用在证书验证阶段。

HTTPS的整体过程分为证书验证和数据传输阶段,具体的交互过程如下:
image

为什么需要加密?

因为http的内容是明文传输的,明文数据会经过中间代理服务器、路由器、wifi热点、通信服务运营商等多个物理节点,如果信息在传输过程中被劫持,传输的内容就完全暴露了。劫持者还可以篡改传输的信息且不被双方察觉,这就是中间人攻击。所以我们才需要对信息进行加密。最容易理解的就是对称加密 。

为什么需要CA认证机构颁发证书?

HTTP 协议被认为不安全是因为传输过程容易被监听者勾线监听、伪造服务器,而 HTTPS 协议主要解决的便是网络传输的安全性问题。
首先我们假设不存在认证机构,任何人都可以制作证书,这带来的安全风险便是经典的**“中间人攻击”**问题。

浏览器是如何确保 CA 证书的合法性?

证书包含颁发机构信息、公钥公司信息、域名、有效期、指纹
首先,权威机构是要有认证的,不是随便一个机构都有资格颁发证书,不然也不叫做权威机构。证书分为免费的、收费。免费阿里云有效期1年

浏览器验证证书的合法性:
验证域名、有效期等信息是否正确。证书上都有包含这些信息,比较容易完成验证;
判断证书来源是否合法。每份签发证书都可以根据验证链查找到对应的根证书,操作系统、浏览器会在本地存储权威机构的根证书,利用本地根证书可以对对应机构签发证书完成来源验证;
image

目前项目涉及到微信公众号、小程序项目都需要Https访问

4、Nginx反向代理和负载均衡

1.反向代理:简单来说就是真实的服务器不能直接被外部网络访问,所以需要一台代理服务器,而代理服务器能被外部网络访问的同时又跟真实服务器在同一个网络环境,当然也可能是同一台服务器,端口不同而已(嘉兴公交)。
Http配置

http {include       mime.types;default_type  application/octet-stream;server_tokens off;add_header X-Frame-Options DENY;add_header X-XSS-Protection  "1; mode=block";add_header X-Content-Type-Options nosniff;sendfile        on;keepalive_timeout  65;#gzip  on;server {listen       8000;server_name  127.0.0.1;index index.html;location / {proxy_pass http://192.168.3.191:8000;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}server {listen       8001;server_name  127.0.0.1;index index.html;location / {proxy_pass http://192.168.3.192:8001;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}server {listen       8001;server_name  127.0.0.1;index index.html;location /test {proxy_pass http://192.168.3.193:8001;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}

TCP/UDP配置

stream {server {listen 7001;proxy_connect_timeout 10s;proxy_timeout 360s;proxy_pass 192.168.3.191:7003;}server {listen 7001 udp;proxy_connect_timeout 10s;proxy_timeout 360s;proxy_pass 192.168.3.191:7003;}
}

2.单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,由反向代理服务器将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡

负载均衡配置

upstream test {  server 192.168.3.191:8081;  server 192.168.3.192:8081;  
}  
server {  listen       8081;                                                        server_name  127.0.0.1;                                                 client_max_body_size 1024M;  location / {  proxy_pass http://test;  proxy_set_header Host $host:$server_port;  }  
}  

负载均衡策略

  • 轮询(默认)
    每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

    upstream test {  server 192.168.3.191:8081;  server 192.168.3.192:8081;  
    } 
    
  • 指定权重
    指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
    权重越高,在被访问的概率越大,如下例,分别是30%,70%。

    upstream test {server 192.168.3.191:8081 weight=3;server 192.168.3.192:8081 weight=7;
    }
    
  • ip_hash
    在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然是不妥的。

    我们可以采用ip_hash指令解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。

    每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

    upstream test {ip_hash;...  
    } 
    
  • fair
    按后端服务器的响应时间来分配请求,响应时间短的优先分配。

  • url_hash
    按访问url的hash结果来分配请求,使每个url定向到同一个(对应的)后端服务器,后端服务器为缓存时比较有效。

最终总结

upstream test{ ip_hash; server 127.0.0.1:9090 down; (down 表示单前的server暂时不参与负载) server 127.0.0.1:8080 weight=2; (weight 默认为1.weight越大,负载的权重就越大) server 127.0.0.1:6060; server 127.0.0.1:7070 backup; (其它所有的非backup机器down或者忙的时候,请求backup机器) 
} 

5、IIS部署服务

1、安装.NetSDK和Hosting Bundle

image

2、添加网站,选择端口号和资源路径

image

3、设置应用程序池

image

6、常见问题

  • IP地址

    • 0.0.0.0
      用于表示一个无效的,未知的或者不可用的目标
      用作服务端,表示本机上的任意IPV4地址
    • 127.0.0.1
      回环地址,本机地址。用于本机测试
    • 192.168.*.*
      局域网地址,路由器分配
    • loaclhost
      大多数电脑指向 127.0.0.1这个IP地址。在操作系统支持ipv6后,它同时还指向 ipv6 的地址 [::1]
      不是一个IP地址,而是一个域名
  • 前后端开发阶段测试联调?
    局域网内或者同一WiFi下
    1、以0.0.0.0或者本机局域网IP启动服务
    2、电脑关掉防火墙
    3、需要开通端口映射(需要公网访问)
    image
    家里开通公网端口(公网IP一直变化)
    1、让运营商宽带改为桥接模式
    2、使用宽带账号密码方式上网
    3、开启动态域名服务,Tplink路由器提供域名,华为路由器支持花生壳域名
    image
    4、注册花生壳账号,开启域名管理或者内网穿透
    image

  • 域名
    域名简单来说就是一串由英文字符组成的IP地址。通过域名,我们可以很轻松的访问网站。在没有域名的情况下,我们如果需要访问网站的话,则需要输入很复杂的IP地址,如果有了域名,我们只需要记住它的域名即可以进行访问。

  • DNS:进行域名解析,
    一般使用8.8.8.8(Google公司),114.114.114.114
    host文件地址:C:\Windows\System32\drivers\etc

  • 接口参数规范
    下拉框:对象(大多是数值、字符串)
    下拉框多选:数组
    日期:yyyy-MM-dd
    日期时间:yyyy-MM-dd HH:mm:ss
    日期时间范围查询:分为开始时间和结束时间范围查询,
    假如年月范围查询yyyy-MM-01和yyyy-MM-30 23:59:59
    假如时分范围查询yyyy-MM-dd HH:mm:00,必须保证时间格式一致

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/57957.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang | Leetcode Golang题解之第504题七进制数

题目&#xff1a; 题解&#xff1a; func convertToBase7(num int) string {if num 0 {return "0"}negative : num < 0if negative {num -num}s : []byte{}for num > 0 {s append(s, 0byte(num%7))num / 7}if negative {s append(s, -)}for i, n : 0, len…

《虚拟现实的边界:探索虚拟世界的未来可能》

内容概要 在虚拟现实&#xff08;VR&#xff09;技术的浪潮中&#xff0c;我们见证了其从实验室的奇想逐渐走向日常生活的非凡旅程。技术发展的背后是不断突破的创新&#xff0c;早期的设备虽然笨重&#xff0c;但如今却趋向精致、轻巧&#xff0c;用户体验显著提升。想象一下…

Java并发学习总结:原子操作类

本文是学习尚硅谷周阳老师《JUC并发编程》的总结&#xff08;文末有链接&#xff09;。 基本类型原子类 AtomicIntegerAtomicLongAtomicBoolean AtomicInteger 的方法 getAndIncrement 和 incrementAndGet 的区别&#xff1a; 两个方法都能实现对当前值加 1 &#xff0c; 但…

家用wifi的ip地址固定吗?换wifi就是换ip地址吗

在探讨家用WiFi的IP地址是否固定&#xff0c;以及换WiFi是否就意味着换IP地址这两个问题时&#xff0c;我们首先需要明确几个关键概念&#xff1a;IP地址、家用WiFi网络、以及它们之间的相互作用。 一、家用WiFi的IP地址固定性 家用WiFi环境中的IP地址通常涉及两类&#xff1a…

图解:什么是多租户?

大家好&#xff0c;我是汤师爷~ 什么是多租户&#xff1f; 多租户是SaaS&#xff08;软件即服务&#xff09;领域里特有的一个概念。在SaaS服务中&#xff0c;“租户”指的就是使用这个SaaS系统的客户。 那么租户和用户有什么区别呢&#xff1f;举个例子。假设你正在使用一款…

从零开始的Go语言之旅(2 Go by Example: Values)

Go 语言有多种值类型&#xff0c;包括字符串、整数、浮点数、布尔值等。以下是一些基本示例。 package mainimport "fmt"func main() {fmt.Println("go" "lang")fmt.Println("11 ", 11)fmt.Println("7.0/3.0 ", 7.0/3.0)f…

[计算机网络]第一周

TCP/IP 与OSI TCP/IP TCP/IP 四层模型是一个分层网络通信模型&#xff0c;它将网络通信过程分为四个层次&#xff0c;这四层分别是&#xff1a;网络接口层、互联网层、传输层和应用层。 网络接口层负责在计算机和网络硬件之间传输数据&#xff0c;负责在物理网络上发送和接收…

六,Linux基础环境搭建(CentOS7)- 安装HBase

Linux基础环境搭建&#xff08;CentOS7&#xff09;- 安装HBase 大家注意以下的环境搭建版本号&#xff0c;如果版本不匹配有可能出现问题&#xff01; 一、HBase下载及安装 HBase是一个分布式的、面向列的开源数据库&#xff0c;该技术来源于 Fay Chang 所撰写的Google论文“…

AndroidStudio部署多渠道打包环境(一)

对于游戏来说&#xff0c;需要上架国内很多家应用商店&#xff0c;还有一些小的渠道SDK&#xff0c;大大小小加起来也有几十家了&#xff0c;那么我们部署了多渠道打包环境之后就很方便了。 一 、配置游戏基本参数&#xff1a;在app下面的build.gradle文件里编辑&#xff0c; …

基于Python+Django的气象数据分析与可视化系统

前言 随着互联网技术不断地发展&#xff0c;网络与大数据成为了人们生活的一部分&#xff0c;而气象数据分析与可视化系统 作为网上应用的一个全新的体现&#xff0c;由于其特有的便捷性&#xff0c;已经被人们所接受 本系统采用的框架为Django和python开发了气象数据分析与可…

基于SSM轻型卡车零部件销售系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;配件类型管理&#xff0c;配件信息管理&#xff0c;订单信息管理&#xff0c;检修休息管理&#xff0c;系统管理 用户账号功能包括&#xff1a;系统首页&#xff0c;个人中心&…

arm架构 ubuntu 部署docker

如果有旧版本需要卸载 sudo apt remove docker docker-engine docker-ce docker.io 安装依赖包 sudo apt update && apt install -y apt-transport-https ca-certificates curl software-properties-common 添加docker秘钥 阿里云 curl -fsSL http://mirrors.aliyu…

Java | Leetcode Java题解之第501题二叉搜索树中的众数

题目&#xff1a; 题解&#xff1a; class Solution {int base, count, maxCount;List<Integer> answer new ArrayList<Integer>();public int[] findMode(TreeNode root) {TreeNode cur root, pre null;while (cur ! null) {if (cur.left null) {update(cur.…

基于SpringCloud的WMS管理系统源码

商品管理&#xff1a;商品类型&#xff0c;规格&#xff0c;详情等设置。 采购管理&#xff1a;采购单录入。 销售管理&#xff1a;销售单录入。 库存管理&#xff1a;库存查询、库存日志 采用前后端分离的模式&#xff0c;微服务版本前端 后端采用Spring Boot、Spring Cl…

前端零基础入门到上班:【Day1】什么是前端?

本来打算开付费专栏 但是想起那句话 赠人玫瑰手留余香 引言1. 什么是前端&#xff1f;1.1 前端的定义1.2 前端的三大核心技术1.3 前端框架和工具 2. 什么是后端&#xff1f;2.1 后端的定义2.2 后端的组成要素2.3 后端框架和工具 3. 前后端的区别4. 什么是前后端分离&#xff1f…

MySQL 复合索引测试

对MySQL复合索引结合具体示例&#xff0c;各条件下索引使用情况的运行结果及分析。 目录 复合索引示例 创建表 新增数据 查询数据 选项A SQL查询 explain分析 选项B SQL查询 explain分析 选项C SQL查询 explain分析 选项D SQL查询 explain分析 选项E SQL查询…

音质好的骨传导耳机有哪些?音质最好的骨传导耳机推荐

最近发现市场上骨传导耳机的品牌和型号琳琅满目&#xff0c;小伙伴们在选择时可能会面临一些困惑。特别对于喜欢户外活动或运动的朋友来说&#xff0c;选对骨传导耳机很有必要&#xff0c;因为这能够让运动者在运动中享受音乐的同时&#xff0c;不必担心周围环境的变化&#xf…

Linux Shell 实现一键部署mariadb11.6

mariadb MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,使用XtraDB来代替MySQL的InnoDB。 MariaDB由MySQL的创始人Michael Widenius主导开发…

入侵检测算法平台部署LiteAIServer视频智能分析平台行人入侵检测算法

在当今科技日新月异的时代&#xff0c;行人入侵检测技术作为安全防护的重要组成部分&#xff0c;正经历着前所未有的发展。入侵检测算法平台部署LiteAIServer作为这一领域的佼佼者&#xff0c;凭借其卓越的技术实力与广泛的应用价值&#xff0c;正逐步成为守护公共安全的新利器…

跨境支付,哪些国产数据库能接得住?

最近有一个非常重大的事件&#xff0c;那就是10月22日-24日的金砖国家会议。金砖国家领导人第十六次会晤是金砖国家进一步凝聚共识、以实际行动推动“全球南方”共同发展进步的重要机遇。 酝酿已久的金砖跨境支付体系&#xff0c;也在这次峰会中正式推出。金砖国家的支付系统一…