0%

1. HTTP 协议

在谈论 HTTPS 协议之前,先来回顾一下 HTTP 协议的概念。

1.1 HTTP 协议介绍

HTTP 协议是一种基于文本的传输协议,它位于 OSI 网络模型中的应用层

HTTP 协议是通过客户端和服务器的请求应答来进行通讯,目前协议由之前的 RFC 2616 拆分成立六个单独的协议说明(RFC 7230RFC 7231RFC 7232RFC 7233RFC 7234RFC 7235),通讯报文如下:

  • 请求
1
2
3
4
5
6
7
POST http://www.baidu.com HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Content-Length: 7
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36

wd=HTTP
  • 响应
1
2
3
4
5
6
7
8
HTTP/1.1 200 OK
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8
Date: Thu, 14 Feb 2019 07:23:49 GMT
Transfer-Encoding: chunked

<html>...</html>
阅读全文 »

前言

使用 docker 的时候为了排查问题经常需要下载一些软件包,但是一般镜像中都没有vim,如果直接用apt官方源去下载,基本上就是下面这样:

这是因为没有更新源,需要通过apt-get update进行更新,但是国内访问官方源的速度实在是太慢,要修改成国内的源镜像去加速,这里记录下没有vim的情况下如何快速修改源地址。

使用清华大学镜像

1
2
sed -i 's/deb.debian.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
sed -i 's|security.debian.org/debian-security|mirrors.tuna.tsinghua.edu.cn/debian-security|g' /etc/apt/sources.list
  • 更新和安装软件
1
2
apt-get update
apt-get install -y net-tools

前言

github page 在国内访问速度非常慢,而且近期 github.io 的域名经常被干扰解析成127.0.0.1,迫于无奈在网上找到了一个能白嫖加速 github page 的办法,就是套一层 cloudflare CDN,虽然它在国内没有 CDN 节点,但是整体效果是完爆 github.io,不过要注意的是免费版本是有请求次数限制的,每天 10W 次,当然这足够我的小博客使用了,这里记录一下操作步骤。

阅读全文 »

前言

以前在使用wireshark做协议分析的时候,一直以为它只能抓 HTTP 的报文,所以在抓 HTTPS 包的时候一直是用的Fiddler,然而有一天我突然想抓一下HTTP2的报文看一看,Fiddler就不行了,于是在一番 google 之后发现wireshark是可以支持的,只不过需要在特定的条件下才可以。

阅读全文 »

为什么升级

最近突然想把博客的评论系统换掉,因为之前用的valine评论插件,起初是觉得方便并且可以支持匿名评论,但是在评论之后没有通知,很多评论都是过了很久之后我才知道,所以想换一个能有通知的评论系统,起初的选型是:GitmentGitalk,但是发现一个更好的utterances,查了一下 next 高版本已经可以支持utterances了,这样升级 next 就直接接入了。

阅读全文 »

背景

首先请思考一下以下代码执行的结果:

  • LogAop.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//声明一个AOP拦截service包下的所有方法
@Aspect
public class LogAop {

@Around("execution(* com.demo.service.*.*(..))")
public Object log(ProceedingJoinPoint joinPoint) throws Throwable {
try {
MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
Method method = methodSignature.getMethod();
Object ret = joinPoint.proceed();
//执行完目标方法之后打印
System.out.println("after execute method:"+method.getName());
return ret;
} catch (Throwable throwable) {
throw throwable;
}
}
}
阅读全文 »

Maven-Helper 插件介绍

这个插件能可以通过 UI 界面的方式来查看 maven 项目的依赖关系,当然还有最重要的功能解决依赖冲突,使用起来非常的方便,效果图:

在开发 JAVA 项目的时候,经常会由于 maven 依赖冲突导致项目启动失败,这个时候往往会懵逼,到底哪个依赖冲突了,需要排除哪个子依赖,有了这个插件之后就可以很快的定位到冲突的组件,并进行排除。

阅读全文 »

proxychain 介绍

本文介绍的是proxychains-ng项目

在 linux 上运行一些命令的时候,经常访问到国外的网站,速度非常的慢,例如用gitwget等等,这个时候就可以通过proxychain工具来使用代理进行网络访问,使用教程如下:

1
proxychains4 git clone git@github.com:rofl0r/proxychains-ng.git

在所有要运行的命令行之前加上proxychains4就可以通过代理进行网络访问了。

阅读全文 »

背景

在一次升级阿里云 k8s 版本之后暴露出来一个问题,一般在 k8s 集群中都会使用service域名来进行服务之间访问,但是为了在本地开发时能访问到这些服务,又会通过ingress暴露在外网中,这样在开发的时候就可以直接使用的ingress暴露的外网域名进行访问。

按理说本地开发环境的时候使用外网域名,在部署到 k8s 的时候应该使用 k8s 内部的service域名就什么事都没有了,然而在没有强约束的情况下很多项目调用集群内部服务的时候还是使用的外网域名,然而这样可能会导致服务调用失败,没想到吧。对此我们咨询了阿里云,给我们的回答是:

好吧,按着提示把externalTrafficPolicy选项修改为Cluster,确实问题解决了,但是这样一改又把源IP丢失了,在后端服务中获取的IP都变成了Node IP,这肯定也不行。

阅读全文 »

RequestMappingHandlerMapping 介绍

RequestMappingHandlerMappingSpringMVC中的一个重要组件,作用是扫描@Controller@RequestMapping注解修饰的类,然后生成请求方法的对应关系,当有一个 HTTP 请求进入 SpringMVC 时,就会通过请求找到对应的方法进行执行。

可以简单的想象一下,在RequestMappingHandlerMapping会维护一个Map<String,Handle>,key 存放的是URI,value 存放的是对应处理的handle,例如:

1
2
map.put("GET /user",UserController#get)
map.put("POST /user",UserController#create)

这样通过解析请求就可以很快的找到对应的方法去执行,当然 SpringMVC 的实现肯定不会像上面一样这么简单,不过思路是差不多的。

阅读全文 »