HTTP请求与响应的介绍

  1. 一次客户端向服务端发起请求,经历了什么
    URL统一资源定位符,通过一个URL,可以确定一个唯一的地址(网址)
    例如:
    https://www.baidu.com/s?wd=he...
    https:协议
    www.baidu.com :域名 .com顶级(一级)域名 baidu是二级域名 www是三级域名
    /s:是路径
    ?wd=hello&rsv_spt=1:查询参数,中间用&连接
    #5:锚点

    但是http协议是基于TCP和IP协议的,也就是说,通过url并不能直接找到服务器,因此需要你的电信服务商,提供一个DNS服务器,它的作用就是,你输入域名,输出一个ip,解析这个域名到对应的ip,因此,你访问一个域名时,DNS服务器会解析出相应的ip,你根据这个ip找到对应的服务器,服务器接收到请求,根据你的请求内容,返回对应的响应,客户端拿到响应,下载响应,并根据用软件展示出相应的内容。

  2. 可以在命令行用curl指令,模拟一次请求和响应

     curl -s -v -H "yangdepp: xxx" -- "https://www.baidu.com"
     -s :slient不要显示进度条
     -v :verbose要显示请求和响应,没有-v则只显示响应
     -H "yangdepp:xxx"添加一个响应头
     -- "将要请求的网址"

    还可以加一个POST参数
    加一个参数POST
    请求示例 curl -X POST -s -v -H "yangdepp:xxx" -- "https://www.baidu.com"



    添加一个-d 上传数据, POST带数据的请求
    curl -X POST -d "123456789" -s -v -H "yangdepp:xxx" -- "https://www.baidu.com"

  3. HTTP请求
    首先可以在命令行进行一次http请求,在命令行输入命令:

     curl -s -v -H "yangdepp: xxx" -- "https://www.baidu.com"
     -s :slient不要显示进度条
     -v :verbose要显示请求和响应,没有-v则只显示响应
     -H "yangdepp:xxx"添加一个响应头
     -- "将要请求的网址"
     
     可以看到http请求包含以下部分,如下图:

    图片描述

    其中:

    GET / HTTP/1.1 //获取根目录的内容, 协议是http版本号是1.1,用GET请求
    Host: www.baidu.com //访问的是ip,但是要告诉他我访问的域名
    User-Agent: curl/7.54.0 //我用的是什么软件 curl
    Accept: / //我接受你返回给我的任何内容
    yangdepp: xxx //可加可不加
    换行
也可以用Chrome开发者工具查看 HTTP 请求内容
在地址栏输入http://www.baidu.com,右键打开调试工具,点击network,右下方的headers中有一个Request Headers,点击view parsed
如下图:

图片描述

可以看到与命令行的请求基本一致。

  1. HTTP响应
    在1的命令行进行HTTP请求后,后面还有一段返回的响应信息。如下图
    图片描述


    基本信息如下

    // 响应(GET)
    < HTTP/1.1 200 OK //协议
    < Accept-Ranges: bytes
    < Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
    < Connection: Keep-Alive
    < Content-Length: 2443 //返回的内容的长度大小
    < Content-Type: text/html //返回的内容的类型是html
    < Date: Fri, 28 Sep 2018 14:25:53 GMT //返回的时间
    < Etag: "5886041d-98b"
    < Last-Modified: Mon, 23 Jan 2017 13:24:45 GMT
    < Pragma: no-cache
    < Server: bfe/1.0.8.18 //百度的前端服务器
    < Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/

    <!DOCTYPE html> //返回额html内容

也可以用Chrome开发者工具查看 HTTP 响应内容
依然是在地址栏输入百度的地址,打开chrome的调试工具,点击右下方的headers中有一个Response Headers,点击view parsed
如下图:

图片描述

可以看到和命令行得到的响应基本一致。

yangdepp
446 声望21 粉丝

只有那些疯狂的人才能引起我的兴趣,那些人疯狂地生活,疯狂地表达,同时对一切事物心怀渴望,他们毫无倦意,不屑于陈词滥调,只是燃烧,燃烧,燃烧。