http请求

httpClient不是单例的导致OOM

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

浅析HTTP协议

时光毁灭记忆、已成空白 提交于 2019-12-22 01:00:02
浅析 HTTP 协议 HTTP 协议是什么? 简单来说,就是一个基于应用层 的通信规范:双方要进行通信,大家都要遵守一个规范,这个规范就是 HTTP 协议。 HTTP 协议能做什么? 很多人首先一定会想到:浏览网页。没错,浏览网页是 HTTP 的主要应用,但是这并不代表 HTTP 就只能应用于网页的浏览。 HTTP 是一种协议,只要通信的双方都遵守这个协议, HTTP 就能有用武之地。比如咱们常用的 QQ ,迅雷这些软件,都会使用 HTTP 协议(还包括其他的协议)。 HTTP 协议如何工作? 大家都知道一般的通信流程:首先客户端发送一个请求 (request) 给服务器,服务器在接收到这个请求后将生成一个响应 (response) 返回给客户端。 在这个通信的过程中 HTTP 协议在以下 4 个方面做了规定: 1. Request 和 Response 的格式 Request 格式: HTTP 请求行 (请求)头 空行 可选的消息体 注:请求行和标题必须以 <CR><LF> 作为结尾(也就是,回车然后换行)。空行内必须只有 <CR><LF> 而无其他空格。在 HTTP/1.1 协议中,所有的请求头,除 Host 外,都是可选的。 实例: GET / HTTP/1.1 Host: gpcuster.cnblogs.com User-Agent: Mozilla/5.0

Java 发送http GET/POST请求

孤人 提交于 2019-12-21 23:18:10
最近项目里面需要用到Java发送http请求,由于发送https请求有点复杂,暂时不考虑 HttpURLConnection HttpURLConnection是一种多用途、轻量极的HTTP客户端,使用它来进行HTTP操作可以适用于大多数的应用程序。 HttpURLConnection是Java的标准类,它继承自URLConnection,可用于向指定网站发送GET请求、POST请求。它在URLConnection的基础上提供了如下便捷的方法: int getResponseCode(); // 获取服务器的响应代码。 String getResponseMessage(); // 获取服务器的响应消息。 String getResponseMethod(); // 获取发送请求的方法。 void setRequestMethod(String method); // 设置发送请求的方法。 如何使用 HTTP请求方法有8种,分别是GET、POST、DELETE、PUT、HEAD、TRACE、CONNECT 、OPTIONS。其中PUT、DELETE、POST、GET分别对应着增删改查。 GET:请求获取Request-URI所标识的资源 POST:在Request-URI所标识的资源后附加新的数据 HEAD:请求获取由Request-URI所标识的资源的响应消息报头 PUT:

express搭建纯后台,前台使用vue-cli脚手架

不羁的心 提交于 2019-12-21 19:08:31
注意:后台服务更改之后需要重启服务;前端配置文件更改之后也需要重新跑命令npm run dev 一、使用express提供后台服务,输出接口 后台目录结构: main.js var express = require('express'); var app = express(); app.get('/', function (req, res) { res.send('Hello World'); }) app.get('/getUserInfo', function(req, res, next){ //用于前台调用的接口,地址:http://127.0.0.1:8888/getUserInfo console.log('get用户请求数据为:'); console.log(req.query); res.json({ code:200, data:{ message:'你好' }, message:'success' }); }); var server = app.listen(8888, function () { var host = server.address().address var port = server.address().port console.log(host,port) console.log("your application is

爬虫-requests用法

我的梦境 提交于 2019-12-21 10:07:41
中文文档 API: http://requests.kennethreitz.org/zh_CN/latest/ 安装 pip install requests 获取网页 # coding=utf-8 import requests response = requests.get('http://www.baidu.com') # 第一种方式 获取响应内容 # 查看网页编码方式 print(response.encoding) # 修改编码方式 response.encoding = 'utf-8' # 获取响应内容 print(response.text) # 第二种方式 获取二进制响应内容 # 获取二进制响应内容 print(response.content) # 解码 decode('解码方式') 默认时utf-8的方式 print(response.content.decode())# coding=utf-8 import requests response = requests.get('http://www.baidu.com') # 第一种方式 获取响应内容 # 查看网页编码方式 print(response.encoding) # 修改编码方式 response.encoding = 'utf-8' # 获取响应内容 print(response.text) #

http协议一

吃可爱长大的小学妹 提交于 2019-12-21 07:27:34
本资料来自于 https://www.cnblogs.com/lzq198754/p/5780310.html 感谢Java初级码农博主的HTTP协议详解 一、第一次学习,HTTP协议 1.HTTP协议是一个属于应用层的面向对象的协议,由于其简洁、快速的方式,适用于分布式超媒体信息系统。(稍微了解了一下分布式超媒体信息系统,我理解的就是可以将分布广的计算机上的图像、文字、视频等多种媒体信息共享的一种方式)。 2.HTTP协议的特点: (1)支持客户/服务器模式 (2)简单快速:客户向服务器请求服务时,只需传送请求方法和路径。 (3)灵活:HTTP允许传输任意类型的数据对象。 (4)无连接:无连接是限制每次连接只处理一个请求。这种方式可以节省传输时间。 (5)无状态:HTTP协议是无状态协议。无状态是指协议对于事物处理没有记忆能力。缺少状态以为着如果后续处理需要前面的信息,则它必须重传,这样会导致每次连接传送的数据量增大,如果不需要先前信息则应答较快。 2.URL HTTP URL(URL是一种特殊的URL,包含了用于查找某个资源的足够的信息)的格式如下: http://host[“:”port][abs_path] http表示使用HTTP协议定位网络资源;host表示合法的Internet主机域名或者IP地址;port指定一个端口号,为空则使用缺省端口8080;abs

Web服务器——HTTP状态机解析

99封情书 提交于 2019-12-21 06:06:07
Web服务器——HTTP状态机解析 程序说明 主要练习HTTP解析的状态机的使用。接收一个客户端请求,判断是否是一个正确的GET请求,并解析出相应字段。   主要练习HTTP解析的状态机的使用。接收一个客户端请求,判断是否是一个正确的GET请求,并解析出相应字段。   有两个状态机,主状态机和从状态机,分别解析出相关字段。   注意一个地方,每次recv时,并没有把buffer给覆盖,而是继续加到buffer现有字段的后面,类似于append方式读取。   当读取到构成一个完整的行(携带\r\n)时,然后开始进行解析,分两步:     第一步,解析GET、 index.html、HTTP/1.1等信息     第二步,解析Host信息   其实就是按照请求消息的内容顺序解析储这4个字段。 运行方法 编译 g++ main.cpp -o main 直接运行也可以,默认ip为127.0.0.1,默认端口为8888 运行 curl 127.0.0.1:7777/index.html 运行结果: 客户端发起请求: # 方式1:命令行curl方式 yongpu@ubuntu:~$ curl 127.0.0.1:7777/index.html I get a correct result # 方式2:浏览器 输入: 127.0.0.1:7777/index.html 浏览器页面无法显示结果

Servlet 学习开发笔记

依然范特西╮ 提交于 2019-12-21 04:23:25
生命周期 Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程: Servlet 通过调用 init () 方法进行初始化。 Servlet 调用 service() 方法来处理客户端的请求。 Servlet 通过调用 destroy() 方法终止(结束)。 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。 init 方法被设计成只调用一次。它在第一次创建 Servlet 时被调用,在后续每次用户请求时不再调用。 service() 方法是执行实际任务的主要方法。Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。 destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。destroy() 方法可以让 Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。在调用 destroy() 方法之后

【node】node的核心模块---http模块,http的服务器和客户端

巧了我就是萌 提交于 2019-12-21 03:35:28
nodejs事件机制 ##### http服务器和客户端 node.js标准库提供了http模块,其中封装了一个高效的http服务器和一个简易的http客户端 HTTP服务器 1. http.createServer()创建HTTP服务器。 //服务器实例 var httpServer = require("http") httpServer.createServer(function(req,res){ res.writeHead(200,{"Content-Type":"text/html"}); res.write("<h2>hello world</h2>"); res.end("<h3>你好</h3>"); }).listen(2333); console.log("http server is listening at port 2333,localhost:2333"); 将一个函数作为HTTP请求处理函数,这个函数接受两个参数,分别是请求对象(req)和响应对象(res),在函数体内,res显式的写回了响应代码200(表示请求成功),指定响应头为"Content-Type":"text/html",然后写入响应体通过res.end()结束并发送,最后调用listen函数,启动服务器并且监听2333端口。 运行之后,我们在浏览器打开localhost:2333

AJAX安全

人走茶凉 提交于 2019-12-21 03:11:33
AJAX 三问 ajax请求真的不安全吗,为什么后端总是让使用普通HTTP请求? ajax请求哪里不安全? 怎样让ajax请求更安全? 目录 常见的web前端安全问题 CSRF简介 CSRF和ajax的关系 XSS简介 XSS和ajax关系 SQL注入 SQL和ajax关系 ajax和HTTP区别 cors 和ajax安全性之间的关系 首先解决问题:ajax真的不安全吗?哪里不安全?如何更安全? 在Web应用中, 客户端输入不可信 是一个基本原则。 如果某个Web应用具备良好的安全性,那么再怎么用“不安全的AJAX”也削弱不了它的安全性,反之如果应用本身存在漏洞,不管用何种技术请求,它都是不安全的。 web常见安全问题: 1.XSS(跨站脚本攻击) -> 伪造会话(基于XSS实现CSRF) ->劫持cookie ->恶意代码执行 2.CSRF(跨站请求伪造) ->伪造用户身份操作 3.SQL注入 CSRF简介 CSRF 冒用用户身份,进行恶意操作 采用cookie来进行用户校验 登录受信任网站A,并在本地生成Cookie 在不登出A的情况下,访问危险网站B 如下图: 一般在(4)处恶意网站(B)的攻击手段如下(必须是指向A的地址,否则无法带上cookie): // 1.譬如在网站内的图片资源中潜入恶意的转账操作 <img src=http://www.bank.example