hincky的主页 hincky的主页
  • 学习笔记

    • Vue笔记
    • Vuepress
    • nginx
  • 语言类

    • java
    • go
    • python
    • 设计模式
  • 框架类

    • Spring
    • Spring Security
    • Mybatis
  • 容器技术

    • docker
    • k8s
    • helm
    • prometheus
    • grafana
    • jenkins
  • 命令集合

    • linux命令
    • docker命令
    • git命令
    • vim命令
    • k8s命令
  • 数据库

    • sql
    • mysql
  • 协议

    • 网络模型
    • http/1.1
    • WebSocket
    • http/2
    • TLS/SSL
    • tcp
    • IP
    • tcpdump抓包命令
    • wireshark抓包工具
  • 通用

    • Git
  • 技术分享

    • git push/pull总是超时怎么办
    • idea debug技巧
    • postman使用
    • 问题总结
    • idea使用技巧
  • Oauth2

    • Oauth2原理
  • 项目列表

    • redis项目
    • 微服务项目
  • 分类
  • 标签
  • 归档
  • 随笔
GitHub (opens new window)

Hincky

当有趣的人,做想做的事
  • 学习笔记

    • Vue笔记
    • Vuepress
    • nginx
  • 语言类

    • java
    • go
    • python
    • 设计模式
  • 框架类

    • Spring
    • Spring Security
    • Mybatis
  • 容器技术

    • docker
    • k8s
    • helm
    • prometheus
    • grafana
    • jenkins
  • 命令集合

    • linux命令
    • docker命令
    • git命令
    • vim命令
    • k8s命令
  • 数据库

    • sql
    • mysql
  • 协议

    • 网络模型
    • http/1.1
    • WebSocket
    • http/2
    • TLS/SSL
    • tcp
    • IP
    • tcpdump抓包命令
    • wireshark抓包工具
  • 通用

    • Git
  • 技术分享

    • git push/pull总是超时怎么办
    • idea debug技巧
    • postman使用
    • 问题总结
    • idea使用技巧
  • Oauth2

    • Oauth2原理
  • 项目列表

    • redis项目
    • 微服务项目
  • 分类
  • 标签
  • 归档
  • 随笔
GitHub (opens new window)
  • 数据库

  • 网络协议以及抓包工具

    • http1.1

      • http概览
        • http协议
          • 搭建http实验环境
        • 浏览器发送http请求的过程
          • HTTP消息格式(基于ABNF语义)
          • 上机演示
    • WebSocket

    • http2

    • TLS&SSL

    • tcp

    • ip

    • 网络排查

    • tcpdump抓包命令
      • BPF
        • libpcap
        • tcpdump调用关系
      • 抓包文件格式
      • tcpdump命令基本用法
      • 抓取http内容
      • 如何过滤报文
    • chrome开发者工具
      • 快捷打开开发者工具
      • 具体问题查找路径
    • WireShark抓包工具
  • Git笔记

  • 技术分享

  • Oauth2

  • 计算机相关技术
  • 网络协议以及抓包工具
  • http1.1
hincky
2022-10-12
目录

http概览

# http协议

区分请求方和应答方的超文本(图片,文字,音视频)传输协议

一种无状态的,应用层的,以请求/应答方式运行的协议,它使用可扩展的语义和自描述消息格式,与基于网络的超文本信息系统灵活的互动

前置问题

  • 用 Nginx 搭建 Web 服务器,照着网上的文章配好了,但里面那么多的指令,什么 keepalive、rewrite、proxy_pass 都是怎么回事?为什么要这么配置?

  • 用 Python 写爬虫,URI、URL“傻傻分不清”,有时里面还会加一些奇怪的字符,怎么处理才好?

  • 都说 HTTP 缓存很有用,可以大幅度提升系统性能,可它是怎么做到的?又应该用在何时何地?

  • HTTP 和 HTTPS 是什么关系?还经常听说有 SSL/TLS/SNI/OCSP/ALPN……这么多稀奇古怪的缩写,头都大了,实在是搞不懂。

  • 状态码

状态码 含义
1xx 提示信息,是协议处理的中间状态,实际能够用到的时候很少
200 资源访问成功
204 响应头后没有 body 数据
301 网页url永久重定向
302 短暂重定向,抓取新页面但是保留旧url
  • 与http相关的概念

详情看极客时间 (opens new window)

  • 与http相关的协议

详情看极客时间 (opens new window)

  • 四层/七层到底是什么

详情看极客时间 (opens new window)

# 搭建http实验环境

详情看极客时间 (opens new window)

# 浏览器发送http请求的过程

  1. 服务器暴露80和443等web端口
  2. 浏览器送url中取出域名,并根据域名查询DNS服务器获取目的IP地址
  3. 浏览器和服务器三次握手建立TCP连接(如果是https还要完成TLS/SSL握手)
  4. 浏览器构造HTTP请求,填充上下文和HTTP头部
  5. 发起HTTP请求
  6. 接收到HTTP响应包体(里面携带HTTP页面)
  7. 浏览器解析响应,并在用户界面进行渲染

# HTTP消息格式(基于ABNF语义)

起始行:

  • 请求行 GET / HTTP/1.1
  • 响应行 HTTP/1.1 200 OK

headers:

请求体:

示例:

HTTP-message = start-line *(header-field CRLF) CRLF [message-body]

# * 表示零个或多个 
# CRLF 回车+换行 即必须以CRLF的换行结尾
# [message-body] 可选的message-body

# SP 空格
# HTAB 横向制表符
1
2
3
4
5
6
7
8

# 上机演示

telnet www.baidu.com 80
GET /wp-content/plugins/Pure-Highlightjs_1.0/assets/pure-highlight.css?ver=0.1.0 HTTP/1.1
Host: www.baidu.com
1
2
3
编辑 (opens new window)
#http
kafka介绍
WebSocket

← kafka介绍 WebSocket→

最近更新
01
人生前期重要的能力
05-17
02
防火墙命令
04-11
03
docker-compose部署mysql主从集群
03-22
更多文章>
Theme by Vdoing | Copyright © 2022-2023 Hincky | MIT License | 粤ICP备2022120427号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式