zoukankan      html  css  js  c++  java
  • [网络]http请求报文和响应报文

    请求报文的组成

    请求报文包括4个部分:

    1. 请求行
    2. 请求头
    3. 末尾空行
    4. 请求体

    GET请求报文

    GET方式的请求没有请求体.
    以访问bilibili为例.

    GET / HTTP/2
    Host: www.bilibili.com
    User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    Accept-Language: en-US,en;q=0.5
    Accept-Encoding: gzip, deflate, br
    Connection: keep-alive
    Cookie: _uuid=D5F5D591-4A09-BB1C-221E-AAFC85823BF919559infoc; buvid3=C4FB5784-D896-4E49-9ED1-9B210B850D9018566infoc; sid=koxbdeph; fingerprint=75f33d6729aac5bd602ea55a0ab1a0fc; buvid_fp=C4FB5784-D896-4E49-9ED1-9B210B850D9018566infoc; buvid_fp_plain=C4FB5784-D896-4E49-9ED1-9B210B850D9018566infoc; PVID=3; CURRENT_FNVAL=80; blackside_state=1; bp_video_offset_108161778=482576039988369978; rpdid=|(kRmkm|k)~0J'uYu|RRu~Ym; fingerprint3=9dd8f8ae0c0a63d95bdb109dbe201013; fingerprint_s=698b12624a71729aceed658fd6ac1e20; DedeUserID=108161778; DedeUserID__ckMd5=24a10229926dbfa7; SESSDATA=3e68db81%2C1626266519%2C28746*11; bili_jct=9614048d0667d6ad84c7b5702408fb19; LIVE_BUVID=AUTO7616105216607875; bp_article_offset_108161778=481949507335045813; finger=1195171377
    Upgrade-Insecure-Requests: 1
    Cache-Control: max-age=0
    TE: Trailers
    

    下面是分析.

    # 第一行为请求行,分为3部分
    # GET是请求的方式
    # 然后是请求资源的路径,如果写/的情况下默认请求首页
    # 然后是http协议的版本
    GET / HTTP/2
    
    # 以下为请求头
    # 第二行是服务器的主机ip地址和端口号
    # 因为是http,默认是80.80是不显示的.
    Host: www.bilibili.com
    
    # 用户代理,也就是客户端程序的名称
    # 比如下面是linux的firefox浏览器
    # user-agent可以进行反爬虫
    User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0
    
    # 告诉服务端程序,当前可以接受什么数据类型.
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    
    # 告诉服务端程序,当前支持的语言
    Accept-Language: en-US,en;q=0.5
    
    # 告诉服务端程序,当前支持的压缩算法
    Accept-Encoding: gzip, deflate, br
    
    # 和服务端程序保持长连接
    # 短连接就是服务短发送完数据之后就断开连接
    # 长连接就是服务端发完之后不关闭连接
    # 为了节省资源,有一种策略,当一段时间没有通信之后服务端就会主动断开连接
    Connection: keep-alive
    
    # cookie是客户端用户身份的一个标识
    Cookie: _uuid=D5F5D591-4A09-BB1C-221E-AAFC85823BF919559infoc; buvid3=C4FB5784-D896-4E49-9ED1-9B210B850D9018566infoc; sid=koxbdeph; fingerprint=75f33d6729aac5bd602ea55a0ab1a0fc; buvid_fp=C4FB5784-D896-4E49-9ED1-9B210B850D9018566infoc; buvid_fp_plain=C4FB5784-D896-4E49-9ED1-9B210B850D9018566infoc; PVID=3; CURRENT_FNVAL=80; blackside_state=1; bp_video_offset_108161778=482576039988369978; rpdid=|(kRmkm|k)~0J'uYu|RRu~Ym; fingerprint3=9dd8f8ae0c0a63d95bdb109dbe201013; fingerprint_s=698b12624a71729aceed658fd6ac1e20; DedeUserID=108161778; DedeUserID__ckMd5=24a10229926dbfa7; SESSDATA=3e68db81%2C1626266519%2C28746*11; bili_jct=9614048d0667d6ad84c7b5702408fb19; LIVE_BUVID=AUTO7616105216607875; bp_article_offset_108161778=481949507335045813; finger=1195171377
    
    # 让客户端升级不安全请求,之后要使用https
    Upgrade-Insecure-Requests: 1
    Cache-Control: max-age=0
    TE: Trailers
    #此处应该有空行
    
    

    GET请求报文每项信息后面都要有一个 .并且最后还有一行只含 ,也就是最后面有一个单独的空行.

    POST请求报文

    以gdut教务系统的登录为例

    POST /new/login HTTP/1.1
    Host: jxfw.gdut.edu.cn
    User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0
    Accept: application/json, text/javascript, */*; q=0.01
    Accept-Language: en-US,en;q=0.5
    Accept-Encoding: gzip, deflate, br
    Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    X-Requested-With: XMLHttpRequest
    Content-Length: 71
    Origin: https://jxfw.gdut.edu.cn
    Connection: keep-alive
    Referer: https://jxfw.gdut.edu.cn/login!welcome.action
    Cookie: JSESSIONID=CD77DE5E911AA5B66241BF04CAA08A33
    
    

    同时POST所发送的具体数据会保存在form data中.如下

    account=XXX&pwd=XXX&verifycode=nxxx
    

    其中每一项都用&来分隔.此之谓请求体.

    以下是分析

    # 第一行为请求行,分为3部分
    # POST是请求的方式
    # 然后是请求资源的路径,如果写/的情况下默认请求首页
    # 然后是http协议的版本
    POST /new/login HTTP/1.1
    
    # 以下是请求头
    # 第二行是服务器的主机ip地址和端口号
    # 因为是http,默认是80.80是不显示的.
    Host: jxfw.gdut.edu.cn
    
    # 以下同上
    User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0
    Accept: application/json, text/javascript, */*; q=0.01
    Accept-Language: en-US,en;q=0.5
    Accept-Encoding: gzip, deflate, br
    Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    X-Requested-With: XMLHttpRequest
    Content-Length: 71
    Origin: https://jxfw.gdut.edu.cn
    Connection: keep-alive
    Referer: https://jxfw.gdut.edu.cn/login!welcome.action
    Cookie: JSESSIONID=CD77DE5E911AA5B66241BF04CAA08A33
    #此处应该有空行
    
    

    响应报文

    这是web服务器程序发送给浏览器的.
    包括:

    1. 响应行
    2. 响应头
    3. 空行
    4. 响应体

    响应头

    以访问bilibili时返回的响应报文为例

    # 响应行也叫状态行
    # 第一个是http协议版本
    # 第二个是状态码
    # 第三个是状态描述
    HTTP/1.1 200 Connection established
    
    # 以下是响应头
    date: Thu, 21 Jan 2021 08:32:50 GMT
    content-type: text/html; charset=utf-8
    support: nantianmen
    cache-control: no-cache
    gear: 1
    vary: Origin,Accept-Encoding
    idc: shjd
    content-encoding: gzip
    expires: Thu, 21 Jan 2021 08:32:49 GMT
    x-cache-webcdn: MISS from hw-gz3-webcdn-12
    X-Firefox-Spdy: h2
    #此处应该有空行
    
    

    响应体

    响应体才是真正需要的数据.

    里面通常是网页代码,图片等等,点击preview可以预览他发过来的东西.

  • 相关阅读:
    作业1-四则运算题目生成程序
    实验四 决策树算法及应用
    实验三朴素贝叶斯算法及应用
    自定义博客园背景
    机器学习 实验二 K-近邻算法及应用
    机器学习 实验一 感知器及其运用
    实验三 面向对象分析与设计
    实验二 结构化分析与设计
    实验一:软件开发文档与工具的安装与使用
    朴素贝叶斯学习日志——简单案例python计算过程
  • 原文地址:https://www.cnblogs.com/zzidun-pavo/p/14308918.html
Copyright © 2011-2022 走看看