深入理解http协议

深入理解http协议

概念

http协议:超文本传输协议,基于socket与tcp协议。

  • 请求
    • 请求行
    • 请求头
    • 请求内容
    • 请求体(只能在post请求中)
  • 响应
    • 响应行
    • 响应内容
    • 响应体

防盗链

原理:通过请求头中的referer值进行判断,若不等于本站域名说明就是其他网站在请求。

使用过滤器获取每次请求来源,并进行判断。

静态资源防盗链过滤器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/**
* 静态资源防盗链过滤器
* @author zhuweitung
* @create 2020/9/19
*/
@WebFilter(filterName = "RefererFilter", urlPatterns = {"static/*"})
public class RefererFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {

}

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServerRequest request = (HttpServerRequest) servletRequest;
//请求域名
String referer = request.getHeader("referer");
//服务器域名
String serverName = servletRequest.getServerName();

if (StringUtils.isBlank(referer) || !referer.contains(serverName)) {
//显示错误图片
servletRequest.getRequestDispatcher("static/error.png").forward(servletRequest, servletResponse);
} else {
//放行
filterChain.doFilter(servletRequest, servletResponse);
}
}

@Override
public void destroy() {

}
}

重定向实现原理

服务端收到请求后设置响应状态为302,将重定向地址放入响应头的Location中,客户端收到响应浏览器判断状态为302并自动跳转到Location值的地址。

1
2
3
4
5
6
7
8
9
10
11
@WebServlet("/servlet1")
public class Servlet1 extends HttpServlet {

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//302为重定向状态码
resp.setStatus(302);
//设置重定向地址
resp.setHeader("Location", getServletContext().getContextPath() + "servlet2");
}
}
1
2
3
4
5
6
7
8
@WebServlet("/servlet2")
public class Servlet2 extends HttpServlet {

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("this is servlet2");
}
}

https与http的区别

  • https协议需要到ca申请证书,一般证书都需要收费
  • http中的数据是明文传输,而https则是具有安全性的ssl加密传输协议
  • http与https使用的是完全不同的连接方式,http一般使用80端口,https一般使用443端口
  • http的连接很简单,是无状态的,而hhtps协议是由ssl+http协议构建的,可进行加密传输、身份认证的网络协议,比http协议安全,但效率低

模拟http请求技术

  • 后端:
    • HttpClient
    • HttpUrl
  • 前端:
    • ajax
  • 工具
    • postman

深入理解http协议
https://blog.kedr.cc/posts/2409515937/
作者
zhuweitung
发布于
2020年9月19日
许可协议