透视HTTP协议
罗剑锋(Chrono)
奇虎360技术专家,Nginx/OpenResty开源项目贡献者
立即订阅
6077 人已学习
课程目录
已完结 44 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词|To Be a HTTP Hero
免费
破冰篇 (7讲)
01 | 时势与英雄:HTTP的前世今生
02 | HTTP是什么?HTTP又不是什么?
03 | HTTP世界全览(上):与HTTP相关的各种概念
04 | HTTP世界全览(下):与HTTP相关的各种协议
05 | 常说的“四层”和“七层”到底是什么?“五层”“六层”哪去了?
06 | 域名里有哪些门道?
07 | 自己动手,搭建HTTP实验环境
基础篇 (7讲)
08 | 键入网址再按下回车,后面究竟发生了什么?
09 | HTTP报文是什么样子的?
10 | 应该如何理解请求方法?
11 | 你能写出正确的网址吗?
12 | 响应状态码该怎么用?
13 | HTTP有哪些特点?
14 | HTTP有哪些优点?又有哪些缺点?
进阶篇 (8讲)
15 | 海纳百川:HTTP的实体数据
16 | 把大象装进冰箱:HTTP传输大文件的方法
17 | 排队也要讲效率:HTTP的连接管理
18 | 四通八达:HTTP的重定向和跳转
19 | 让我知道你是谁:HTTP的Cookie机制
20 | 生鲜速递:HTTP的缓存控制
21 | 良心中间商:HTTP的代理服务
22 | 冷链周转:HTTP的缓存代理
安全篇 (7讲)
23 | HTTPS是什么?SSL/TLS又是什么?
24 | 固若金汤的根本(上):对称加密与非对称加密
25 | 固若金汤的根本(下):数字签名与证书
26 | 信任始于握手:TLS1.2连接过程解析
27 | 更好更快的握手:TLS1.3特性解析
28 | 连接太慢该怎么办:HTTPS的优化
29 | 我应该迁移到HTTPS吗?
飞翔篇 (4讲)
30 | 时代之风(上):HTTP/2特性概览
31 | 时代之风(下):HTTP/2内核剖析
32 | 未来之路:HTTP/3展望
33 | 我应该迁移到HTTP/2吗?
探索篇 (5讲)
34 | Nginx:高性能的Web服务器
35 | OpenResty:更灵活的Web服务器
36 | WAF:保护我们的网络服务
37 | CDN:加速我们的网络服务
38 | WebSocket:沙盒里的TCP
总结篇 (2讲)
39 | HTTP性能优化面面观(上)
40 | HTTP性能优化面面观(下)
答疑篇 (2讲)
41 | Linux/Mac实验环境搭建与URI查询参数
42 | DHE/ECDHE算法的原理
结束语 (1讲)
结束语 | 做兴趣使然的Hero
透视HTTP协议
登录|注册

07 | 自己动手,搭建HTTP实验环境

Chrono 2019-06-12
这一讲是“破冰篇”的最后一讲,我会先简单地回顾一下之前的内容,然后在 Windows 系统上实际操作,用几个应用软件搭建出一个“最小化”的 HTTP 实验环境,方便后续的“基础篇”“进阶篇”“安全篇”的学习。

“破冰篇”回顾

HTTP 协议诞生于 30 年前,设计之初的目的是用来传输纯文本数据。但由于形式灵活,搭配 URI、HTML 等技术能够把互联网上的资源都联系起来,构成一个复杂的超文本系统,让人们自由地获取信息,所以得到了迅猛发展。
HTTP 有多个版本,目前应用的最广泛的是 HTTP/1.1,它几乎可以说是整个互联网的基石。但 HTTP/1.1 的性能难以满足如今的高流量网站,于是又出现了 HTTP/2 和 HTTP/3。不过这两个新版本的协议还没有完全推广开。在可预见的将来,HTTP/1.1 还会继续存在下去。
HTTP 翻译成中文是“超文本传输协议”,是一个应用层的协议,通常基于 TCP/IP,能够在网络的任意两点之间传输文字、图片、音频、视频等数据。
HTTP 协议中的两个端点称为请求方应答方。请求方通常就是 Web 浏览器,也叫 user agent,应答方是 Web 服务器,存储着网络上的大部分静态或动态的资源。
在浏览器和服务器之间还有一些“中间人”的角色,如 CDN、网关、代理等,它们也同样遵守 HTTP 协议,可以帮助用户更快速、更安全地获取资源。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《透视HTTP协议》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(61)

  • cylim
    在Mac上,

    拷贝项目(需要Git)
    1. git clone https://github.com/chronolaw/http_study

    安装OpenResty (推荐使用Homebrew)
    1. brew tap openresty/brew
    2. brew install openresty

    运行项目
    1. cd http_study/www/
    2. openresty -p `pwd` -c conf/nginx.conf

    停止项目
    1. openresty -s quit -p `pwd` -c conf/nginx.conf

    作者回复: 好同学!!赞!

    2019-06-12
    7
    71
  • 古夜
    我打赌很多人抓不到包,找不到本地回环地址,不知道最新版的wireshark是否修复了这个问题,如果出现以上问题,记得卸载重装wireshark,不要勾选它自带的ncap应该是这个名字,然后自己去单独下一个这个软件

    作者回复: 有问题欢迎提出来,我机器上的Wireshark装的比较早,具体的步骤记不太清了,应该是很简单的。

    2019-06-12
    1
    10
  • pyhhou
    想请问下在 MacOs 或者是 Linux 上怎么搭建?(不是太想弄 Windows 虚拟机)

    作者回复: 需要用brew或者yum安装OpenResty,然后看一下nginx.conf,里面的注释有说明。

    2019-06-12
    8
  • Leon📷
    破冰篇最后一篇,是马上开展破冰行动,抓捕林耀东了吗

    作者回复: 写这个的时候电视剧还没出呢,完全的碰巧,笑。

    2019-06-12
    6
  • Amark
    老师,上面过程怎么没有用到telnet

    作者回复: 后面会用,Telnet需要手动输入http请求,比较麻烦,只有在比较特殊的时候才会用。

    2019-06-12
    5
  • 告辞
    start启动完成后,cmd窗口一闪而过,当我点击list启动时显示“没有运行的任务匹配制定标准”,请按任意键继续,当我随便输入数据时,cmd窗口又没了

    作者回复: 看一下www/logs/error.log,是否有端口被占用了。

    2019-06-12
    5
  • Geek_d4dee7
    老师 最近我维护的一个网站打开速度非常慢 服务器CPU 负载0.5到0.8之间 有十多台web 服务器 redis db 负载都正常 只是nginx 的链接数在出问题的时间点有上升 我目前不知道从哪下手排查这个问题 是用php symfony 开发的 能否给点思路 万分感谢

    作者回复: 在日志里加上$upstream_connect_time、$upstream_header_time、$upstream_response_time这几个变量,看看反向代理耗时在哪里。

    另外也可以用systemtap,抓火焰图看看。

    2019-06-12
    5
  • QQ怪
    为啥有时候批处理stop不掉openresty?

    作者回复: 可能是多次start,stop就失效了,只能手动在任务管理器里关闭。

    2019-06-12
    4
  • Leon📷
    老师可以把环境打包成容器,我们进容器直接嗨,隔离更彻底

    作者回复: 考虑大多数同学都用的是Windows,所以暂时只能这样,手动操作也能加深一下印象吧。

    2019-06-12
    4
  • 不是云不飘
    建议还是能有win和Mac,逼近做开发的Mac不再少数。这些东西之前只有客户对接问题才会看到运维大哥在哪捣腾那时候看的一脸们逼,难得如此细致的了解。

    作者回复: 有同学已经写的很详细了,看看后续是否再专门详细写一下Linux和mac的搭建吧。

    2019-06-17
    3
  • sunözil
    希望有个Mac环境搭建 谢谢老师

    作者回复: 已经有同学回复了,比较详细,有不清楚的可以再问。

    2019-07-05
    2
  • xiaolin777
    老师,我的Npcap Loopback Adapter (port 80) 一直抓不到包怎么办,Npcap和wireshark都重装好几次了

    作者回复: 这个实在是帮不上忙,可以再网上找找资料或者问周围的朋友。

    不过抓不了包也没事,GitHub上也有抓好的包,先临时用一下。

    2019-06-12
    2
    2
  • 因缺思厅
    这次环境搭建很顺利呀

    作者回复: nice

    2019-06-12
    2
  • 6欢
    建议环境搭建都在linux操作,哈哈

    作者回复: 我也是这么想,可惜用Windows的同学还是不少。

    2019-06-12
    2
  • 小肥羊
    老师,可以解释一下虚拟主机这个概念嘛?一般什么时候需要配置虚拟主机,配置虚拟主机有什么用?

    作者回复: 真实主机就是指一个ip地址对应一个主机名(域名),那么反过来,虚拟主机就是一个ip地址对应多个主机名(域名)。

    虚拟主机的好处是可以在一台真实主机上(一个ip地址)托管多个域名,把一台真实主机在域名层次“虚拟”成多台主机,对于互联网服务商非常有用。

    比如,只用一台机器,就可以在上面建立非常多的网站,节约成本。

    2019-10-24
    1
  • Cris
    在浏览器和服务器之间还存在“中间人”,这些中间人也都遵循http协议,我想问下,这些中间人是不是都工作在应用层?

    作者回复: 是的,都是用http协议,当然就是在应用层。

    2019-07-11
    1
  • 名曰蓝兮
    centos上的安装步骤,有错误请指出
    wireshark:
    1. yum install wireshark
        yum install wireshark-gnome
    2. 如果不是root用户,启动后没有权限,做如下操作
        2.1 添加当前用户到wireshark组,我的用户叫'zp':
              usermod -a -G wireshark zp
        2.2 然后给dumpcap读网卡的权限:
              setcap cap_net_raw,cap_net_admin+eip /usr/sbin/dumpcap
    完成后重启机器。

    telnet:
    yum install telnet

    OpenResty:
    官网有说明,按照说明一步步来
    1. 添加OpenResty仓库:
        sudo yum install yum-utils
        sudo yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
    2. 安装OpenResty:
        sudo yum install openresty
        sudo yum install openresty-resty
    3. 在~目录下创建conf和logs文件夹:
        mkdir ~/work
        cd ~/work
        mkdir logs/ conf/
    4. 在conf文件夹下创建nginx.conf文件,内容如下:
    worker_processes 1;
    error_log logs/error.log;
    events {
        worker_connections 1024;
    }
    http {
        server {
            listen 8080;
            location / {
                default_type text/html;
                content_by_lua_block {
                    ngx.say("<p>hello, world</p>")
                }
            }
        }
    }
    5. 添加OpenResty环境变量,注意冒号,别丢了:
        PATH=/usr/local/openresty/nginx/sbin:$PATH
        export PATH
    6. 在'~/work'目录下启动OpenResty:
        nginx -p `pwd`/ -c conf/nginx.conf
    7. 验证安装:
        curl http://localhost:8080
        输出:
        <p>hello, world</p>

    作者回复: 写的很详细,赞!

    2019-06-19
    1
  • bywuu
    成功了!这里需要下载wireshark,不过下载之后最好更新为最新版本3.0.x(最好翻墙),否则最好是重启,否则看不到。如果是先打开了localhost,那么应该刷新一下,才能在wireshark里面看到结果。
    运行了stop脚本之后,再刷新浏览器,就会提示找不到页面了。这时的wireshark里面也都是红黑色的出错信息了。

    作者回复: 辛苦终有回报。

    2019-06-13
    1
  • 马哲富
    老师,你好!
        这个www文件夹里面的文件和openResty是什么关系,我点那个start一闪而过,提示端口占用,能不能改一下端口啊,不要用80端口启用?

    作者回复: 如果不能禁用占用端口的服务,就只能自己手动改www/conf/http/servers下的配置了,用80端口是为了测试方便。

    2019-06-12
    1
  • 10
    请问我在git hub上怎么访问到您说的资源呢?在您的文章中没有链接地址?

    作者回复: 应该有吧,https://github.com/chronolaw/http_study。

    2019-06-12
    1
收起评论
61
返回
顶部