• HTTP协议格式、URL格式及URL encode


    系列文章目录

    Fiddler抓包:下载、安装及使用_crazy_xieyi的博客-CSDN博客


    文章目录

    • 一、请求格式(Request)
    • 二、响应格式(Response)
    • 三、HTTP协议格式总结
    • 四、URL格式  &  URL encode

    前言

    我们在查看http请求/响应的时候,可以用Fiddler抓包工具。Fiddler抓包:下载、安装及使用_crazy_xieyi的博客-CSDN博客

    一、请求格式(Request)

    首行:方法 URL 版本号

    请求头:包含了若干个键值对,每一个键值对占一行,键和值之间使用 冒号+空格 分割

    空行:作为请求头的结束标记

    请求正文:有的有正文,有的没有正文(可有可无)


    HTTP请求是一个“行文本”,一行一行的组织数据,每一行都有特定的含义。

    1.首行

    27f0dbf08715452caa84e6cf7296a694.png

     2.首部(请求头)Header

    header这里就是一堆键值对,键值对与键值对之间,使用 换行 来分割;键和值之间,使用 冒号+空格 来分割;header中具体有多少行是不固定的,具体是使用 空行 来作为header的结束标记。

    a23777a5f2054b9c84b0f9b979e14062.png

    二、响应格式(Response)

    首行:版本号 状态码 状态码描述

    响应头:包含了若干个键值对,每一个键值对占一行,键和值之间使用 冒号+空格 分割

    空行: 作为响应头的结束标记

    响应正文: 有的响应有正文,有的则没有,一种常见的格式就是HTML,当然这里具体格式要看程序猿自己是怎么写的


    1.首行

    f27f37c417f64644b0f97c17af352704.png

     2.响应头

    包含了若干个键值对,每一个键值对占一行,键和值之间使用 冒号+空格 分割

    858707c3c5f1436ab2baea8541685100.png

    三、HTTP协议格式总结

    ed346468d477456f8943164de176dbef.png

     为什么HTTP报文中要存在“空行”?

    因为HTTP协议格式并没有规定报头部分的键值对有多少个,空行就相当于是报头的结束标记。

    而且HTTP在传输层依赖TCP协议,TCP是面向字节流的,如果没有空行存在,就会存在“粘包问题”。        

    四、URL格式  &  URL encode

    URL就是我们平时俗称的“网址”。

    URL 的详细规则由因特网标准RFC1738 进行了约定. (https://datatracker.ietf.org/doc/html/rfc1738)

    URL格式:

    cfad3daf904c4ccd923b1c8eb8c1481a.png

    1. 协议名称:http://

    2.服务器地址:可以是域名,也可以是IP

    3.端口号:可以省略,不写端口号,浏览器在构造请求的时候会自动加上端口号,对于HTTP是80,HTTPS是443。

    4.路径:描述了要访问服务器上具体哪个资源

    5.查询字符串:这里是程序员自己定义的一组键值对,从浏览器传递给服务器,查询字符串是以 ?开头的,然后键值对与键值对之间使用 & 来分割,键和值之间用等号来连接。

    6.片段标识符:定位一个网页内部的一个位置的。62c6d8bcc6ce44dbbcffaef82e1258df.png

     但是,这些都不是必须的:

    ab7cbb6ff46c44edb4f2a58a46e28aec.png

     

    URL encode

    像 / ? : 等这样的字符, 已经被url当做特殊意义理解了,因此这些字符不能随意出现。
     
    比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义。
     
    转义的规则如下: 将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式。
     
     
     

    0f5d95c9d44d4205a300bdbe80d1f1bc.png

     a2326111570e4d63b6ade6070e935158.png

     

     

     


     

     

  • 相关阅读:
    JAVA中的内存泄漏和需要手动关闭的资源
    day17正则表达式作业
    SpringBoot 使用 Redisson
    选择最适合的产品研发和运营管理工具
    【从零开始学习Redis | 第一篇】快速了解Redis
    SpringBoot整合其它项目
    如何将本地项目推送到gitee仓库
    ​Python是如何表示时间的?2个模块、3种方式,1文看懂~
    【Java基础】File类 IO流
    【源码+名师讲解】Java游戏开发_Java飞机大战1.0进阶版_Java28个功能点能力提升必备_Java初级项目_Java练手项目_Java课程设计
  • 原文地址:https://blog.csdn.net/crazy_xieyi/article/details/126728106