http请求

震惊!线上四台机器同一时间全部 OOM,到底发生了什么?

假装没事ソ 提交于 2019-12-11 00:17:45
案发现场 昨天晚上突然短信收到 APM (即 Application Performance Management 的简称,我们内部自己搭建了这样一套系统来对应用的性能、可靠性进行线上的监控和预警的一种机制)大量告警 (画外音: 监控是一种非常重要的发现问题的手段,没有的话一定要及时建立哦) 紧接着运维打来电话告知线上部署的四台机器全部 OOM (out of memory, 内存不足),服务全部不可用,赶紧查看问题! 问题排查 首先运维先重启了机器,保证线上服务可用,然后再仔细地看了下线上的日志,确实是因为 OOM 导致服务不可用 第一时间想到 dump 当时的内存状态,但由于为了让线上尽快恢复服务,运维重启了机器,导致无法 dump 出事发时的内存。所以我又看了下我们 APM 中对 JVM 的监控图表 画外音: 一种方式不行,尝试另外的角度切入!再次强调,监控非常重要!完善的监控能还原当时的事发现场,方便定位问题。 不看不知道,一看吓一跳,从 16:00 开始应用中创建的线程居然每时每刻都在上升,一直到 3w 左右,重启后(蓝色箭头),线程也一直在不断增长),正常情况下的线程数是多少呢,600!问题找到了,应该是在下午 16:00 左右发了一段有问题的代码,导致线程一直在创建,且创建的线程一直未消亡!查看发布记录,发现发布记录只有这么一段可疑的代码 diff:在

python 基于requests爬虫

孤人 提交于 2019-12-10 19:52:10
一,一些基本的用法 #获取响应及其的一些信息 response = requests.get('http://www.baidu.com') print(response.status_code) # 打印状态码 print(response.url) # 打印请求url print(response.headers) # 打印头信息 print(response.cookies) # 打印cookie信息 print(response.text) # 打印respose信息 print(response.content) # 打印二进制信息 #请求的方法 requests.get('http://httpbin.org/get') requests.post('http://httpbin.org/post') requests.put('http://httpbin.org/put') requests.delete('http://httpbin.org/delete') requests.head('http://httpbin.org/get') requests.options('http://httpbin.org/get') #代理及请求头 pro=['113.194.29.102:9999', '58.253.154.72:9999' '182.34.32.128

JavaWeb:http协议格式以及常用请求方式

 ̄綄美尐妖づ 提交于 2019-12-10 18:58:24
B/S:浏览器、服务器、网页、http协议 协议:本质就是固定格式的一串字符串,然后进行解析。 浏览器向服务器发数据称之为请求(request) 服务器向浏览器发送数据称之为响应(response) 服务器只能被动的接收某个浏览器发送的请求,请求后进行相应的处理然后响应(必然会响应) http请求数据格式:请求行(http请求方法、请求的url、http版本)、请求头、空行、消息体 响应的格式:状态行(http版本、响应码、响应描述)、响应头、空行、消息体 http中常用的请求方法有get和post: get:用于向服务器检索信息,因为web服务器会限制完整url的长度为255,所以不能发送大量的信息。有两种方式,带参方式与不带参方式。带参方式则数据是url中的一部分,在请求路径后跟?,然后键值对的方式,多个参数则用&符号进行分隔。所以消息体中没有内容。 post:用于向服务器发送数据,并要求指定的url处理。可以无限制数量的数据座位http请求的一部分,通过套接字连接发送。数据不会作为url中的一部分。通常用于发送敏感信息或者大量信息,上传文件等。查询字符串或表单数据在消息体中。 来源: https://www.cnblogs.com/libobo22/p/12018444.html

jmeter登陆接口测试

点点圈 提交于 2019-12-10 17:13:05
首先,打开jmeter,进入线程组 1,新建Http请求 2,在http请求中建立头部信息 利用好抓包工具Fiddler,将页面信息提取出来,放入请求和头部信息中 需要注意的就是 把抓到的地址进行分解,将你的登陆数据放入 点击运行 我这里显示登陆成功 来源: https://www.cnblogs.com/PENGKUNY/p/12017737.html

WebAPI测试概念及postman初识

浪尽此生 提交于 2019-12-10 16:41:05
什么是接口? ------ 某个对象和外界交互的部分 消息交互接口:基于soap的web service ---- http协议 web api ------- http协议 diameter、radius ------ socket协议 编程接口:各种语言的开发包 其他接口:数据服务产品:sql语言操作接口 对账系统:FTP文件接口 web服务接口: 互联网产品对外提供的服务接口,我们通常称之为web服务接口、web service接口、REST接口 我们经常说的'接口测试'、‘API测试’,就是对web服务接口的测试。 包括APP服务端接口。 主要包括两种类型:① 基于SOAP的web service接口 ② REST接口 HTTP协议: 超文本传输协议 就是浏览器与服务器之间进行‘沟通’的一种规范。 HTTP协议属于应用层的协议。 HTTP版本:在0.9 1.0 1.1(最广泛) 2 要想知道http协议,就要清楚它的请求和响应,当然还有请求方式、状态码、URL地址等。 http请求: 一个完整的http请求,包含一个请求行,若干个请求头、空行、消息体 请求行:描述客户端的请求方法(如get、post等)、请求资源的名称、http协议的版本号 请求头:包含客户机请求的服务器主机名,客户机的环境信息等 (换行) 消息体:指浏览器端通过http协议发送给服务器的实体数据

golang http server源码解析

删除回忆录丶 提交于 2019-12-10 15:23:36
golang 版本:1.12.9 简单的HTTP服务器代码: package main import ( "net/http" ) type TestHandler struct { str string } func (th *TestHandler)ServeHTTP(w http.ResponseWriter, r *http.Request){ w.Write([]byte(string(th.str+",welcome"))) } func main(){ http.Handle("/", &TestHandler{"Hi,Stranger"}) http.HandleFunc("/test",func(w http.ResponseWriter,r *http.Request){ w.Write([]byte("Hi,Tester")) }) http.ListenAndServe(":8000",nil)} 在浏览器输入“http://127.0.0.1:8000”得到输出“Hi,Stranger,welcome”;输入“http://127.0.0.1:8000/test”得到输出“Hi,Tester” handler的注册 handler的相关方法如下: func NewServeMux() *ServeMux func (mux *ServeMux)

第伍章 Web原理与应用开发

老子叫甜甜 提交于 2019-12-10 13:34:01
1.从技术上看,WWW是一个基于HTTP得客户/服务器应用系统,即属于客户/服务器范型的分布式计算应用,WWW得核心技术包括HTML和HTTP。其中,HTTP是WWW服务器负使用的应用层协议,用于实现WWW客户机与WWW服务器之间的通信;HTML语言是WWW服务的信息组成形式,用于定义在WWW服务器中存储的信息格式。 2.HTTP协议原理 建立TCP连接 Web浏览器与Web服务器建立连接,打开一个称为socket(套接字)的虚拟文件,此文件的建立标志着连接建立成功。  2)web浏览器向web服务器发送请求命令 一旦建立了TCP连接,web浏览器就会向web服务器发送请求命令。 例如:GET/sampe/hello.jsp HTTP/1.1 3)web浏览器发送请求头信息 浏览器发送其请求命令之后,还要以头信息的形式向web服务器发送一些信息,之后浏览器发送一个空白行,通知服务器它已经结束了该头信息的发送。  4)服务器应答:Web浏览器提交请求后,通过HTTP协议传送给Web服务器。Web服务器接到后,进行事务处理,处理结果又通过HTTP传回给Web浏览器,从而在Web浏览器上显示出所请求的页面。    常用的HTTP头信息有:   ① HTTP 1.0 200 OK  这是Web服务器应答的第一行,列出服务器正在运行的HTTP版本号和应答代码。代码"200 OK"表示请求完成

通信app安全_Fiddler拦截http请求修改数据

若如初见. 提交于 2019-12-10 12:28:14
1、拦截http请求 使用Fiddler进行HTTP断点调试是fiddler一强大和实用的工具之一。通过设置断点,Fiddler可以做到: ①修改HTTP请求头信息。例如修改请求头的UA,Cookie,Referer信息,通过“伪造”相应信息达到相应的目的(调试,模拟用户真实请求等)。 ②构造请求数据,突破表单的限制,随意提交数据。避免页面js和表单限制影响相关调试。 ③拦截响应数据,修改响应实体。 设置断点共有两种方式: ①fiddler菜单栏->rules->automatic Breakpoints->选择断点方式,这种方式下设定的断点会对之后的所有HTTP请求有效。有两个断点位置: 1)before response。也就是发送请求之后,但是Fiddler代理中转之前,这时可以修改请求的数据。 2)after response。也就是服务器相应之后,但是在Fiddler将响应中转给客户端之前。这时可以修改响应的结果。 3)如何消除命令呢?点击Rules->Automatic Breakpoint->Disabled ②命令行设置断点 1)bpu在请求开始时中断 2)bpafter在响应到达时中断 3)bps中断HTTP响应状态为指定字符的全部session响应 4)bpv/bpm中断指定请求方式的全部session响应 示例一: 命令行输入:bpm www.baidu.cm

Spring Cloud第四篇 | 客户端负载均衡Ribbon

痴心易碎 提交于 2019-12-10 10:12:59
​ 本文是Spring Cloud专栏的 第四篇 文章,了解 前三篇 文章内容有助于更好的理解本文: ​Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cloud第二篇 | 使用并认识Eureka注册中心 Spring Cloud第三篇 | 搭建高可用Eureka注册中心 一、Ribbon是什么 Ribbon是一个基于HTTP和TCP的客户端负载均衡器,当使用Ribbon对服务进行访问的时候,他会扩展Eureka客户端的服务发现功能,实现从Eureka注册中心获取服务端列表,并通过Eureka客户端来确定服务端是否已经启动。Ribbon在Eureka客户端服务发现的基础上,实现对服务实例的选择策略,从而实现对服务的负载均衡消费。负载均衡在系统架构中是一个非常重要的内容,因为负载均衡是对系统的高可用、网络的压力的缓冲和处理能力扩容的重要手段之一,我们通常说的负载均衡都是指的是服务端的负载均衡,其中分为硬件负载均衡和软件负载均衡。 硬件负载均衡: 主要通过服务器节点之间安装专门用于负载均衡的设备,比如F5,深信服,Array等。 软件负载均衡: 则是通过服务器上安装一些具有负载功能或模块的软件来完成请求分发工作,比如Nginx、LVS、HAProxy等。 硬件负载均衡的设备或是软件负载均衡的软件模块都会维护一个下挂可用的服务端清单

golang http server分析(一)

余生颓废 提交于 2019-12-10 09:29:57
golang中使用的http协议版本是 RFC2616 对于一个http服务来讲,需要兼容新旧版本的http协议,http1.0/2.0,以及https的支持,http的通信是建立在tcp连接基础上的通信。 现在协议有了,连接通信也有了,还剩一个问题就是如何处理client request请求,这个问题可以分为路由和具体逻辑实现,下面看看在golang中是如何解决这些问题的。 路由部分 在golang中有个Handler的概念,一个URL对应一个Handler,在Handler中处理request的具体逻辑,对应关系保存在一个map结构中 type ServeMux struct { mu sync.RWMutex m map[string]muxEntry //key是URL匹配字符串,muxEntry是对应的处理handler hosts bool // 路由匹配时,是否包含host } Handler分为一般类型Handler和特殊类型Handler,特殊类型Handler是指包含特定功能处理的Handler, 比如redirectHandler用来处理302跳转、NotFoundHandler用来处理404请求等。 Handler定义如下: // Handler类型定义 type Handler interface { ServeHTTP(ResponseWriter,