• HTTP介绍&&报文格式&&构造


    HTTP

    一. 简单介绍一下:

    二. 学习报文格式:

    三. HTTP中的细节介绍

    四, 如何构造一个HTTP请求

    一.  简单介绍一下:

    • 是应用层的典型协议
    • 客户端发送一个HTTP请求, 服务器返回一个HTTP响应(一问(请求)一答(响应)的)
    • HTTP是文本格式的协议

    二. 学习报文格式:

    1)先简单看一看HTTP的请求报文格式

    1.首行

    GET

    https://cn.bing.com/

    HTTP/1.1

    方法

    URL描述网络上的唯一资源

    版本号

    2.请求头header

    Host: cn.bing.com

    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:107.0) Gecko/20100101 Firefox/107.0

    ……

    • 这是按行组织的键值对~~
    • 每一行,是一个键值对~~这里的键都是有固定含义的
    • 键和值之间的使用 : 空格分割

    3.空行

    一个HTTP请求的header可以有若干个,就可用空行,作为header的结束标志

    4.正文body

    有很多格式json……(body部分 有的请求有, 有的没有)

    2)再简单看一看HTTP的响应报文格式

    1.首行

    HTTP/1.1

    200

    OK

    版本号

    状态码

    状态码的描述

    2.响应报头header

    和请求的一样---键值对结构

    3.空行

    和请求的一样---作为header的结束标记

    4.正文

    有很多格式json/html/css/js/图片……

    3)简单汇总

    请求

    1.首行                           方法 URL  版本号

    2.请求头header            键值对,分割方式

    3.空行                           结束标志

    4.正文body                   格式

    响应

    1.首行                           版本号 状态码 状态码描述

    2.响应头header            键值对,分割方式

    3.空行                           结束标志

    4.正文body                   格式

    三. HTTP中的细节介绍

    1.方法  2.URL  3.请求头header  4.状态码

    1.方法

    GET, POST, PUT, HEAD, DELETE, OPTIONS, TRACE, CONNECT, LINK, UNLINK

    GET最常用, POST次之, 其他都不常用

    GET

    产生GET的途径

    1.从浏览器地址栏直接输入URL

    2.html里面的一些标签会触发,比如: link,a,script…

    3.form表单

    4.ajax

    body部分通常为空

    so->如果需要给服务器传递一些参数, 这些参数通常就是通过query string 传递的

    POST

    产生POST的途径

    1.from

    2.ajax

    query string 部分通常为空

    so->如果需要给服务器传递一些参数, 这些参数通常就是放到 body 中传递

    GET 与POST 的区别

    GET和POST没有本质的区别

    GET语义-从服务器获取数据 , POST语义-往服务器上提交数据

    习惯用法, 给服务器传递数据  GET通常放在url的query string  POST通常放在url的body

    GET请求 建议实现''幂等''(给定一个输入, 输出结果是确定的, 输入输出一一对应)

    在GET''幂等''前提下,GET请求的结果是可以缓存

    2.URL

    唯一资源定位符->用这个来找到网络上的资源

    ‘’RFC标准文档’’ 中有URL更详细的介绍

    http:// user:pass @ www.example.jp : 80 / dir/index.html ? uid=1 # ch1

    http://

    user:pass

    www.example.jp

    80

    dir/index.html

    uid=1

    ch1

    协议方案名

    登录信息

    服务器地址

    服务器端口号

    带层次的文件路径

    查询字符串

    片段标识符

    协议方案名

    URL是很多协议都可以使用的

    http:// 代表是http的 比如还有https…

    登录信息

    认证一下信息,现在基本不使用

    服务器地址

    • 服务器IP, 也可以写为域名
    • 网络上的设备都是通过IP地址, 作为身份的标识 但是IP地址不好记, - > 用以串单词(域名), 来表示这个IP地址
    • DNS系统可以域名自动转换成IP地址

    服务器端口号

    • 标识了要访问目标服务器的哪个进程
    • http, 默认端口号80
    • https, 默认端口号443

    带层次的文件路径

    • 服务器可能提供很多资源(html文件,css文件…) -> 放到具体的目录中
    • 服务器提供的资源分两种: 真实存在的文件(静态资源), 虚拟出来的文件(动态资源)

    查询字符串(query string)

    • 键值对形式: 键值对之间& 键和值= 分割
    • 浏览器给服务器传递一些必要的参数
    • 这个是程序猿自己定义的

    片段标识符

    • 区分网页中的哪个部分
    • 借助它可以快速跳转到网页的某个部分
    • 比如: 小明小芳爱情故事第34章节

    随机掉落的芝士🧀—URL encode

    • URL中已经包含一些特殊含义的符号了, 比如 : / @
    • 如果query string 的value中也有这些特殊符号怎么办?
    • Maybe会识别错误
    • So-> URL encode(编码) -> 把特殊符号进行转义, 范围不只是特殊符号,还有汉字~~
    • URL decode(解码) -> 把转义后的字符还原成原始的字符
    • 举个栗子 我搜1+1=3 是 query=1%2B1%3D3

    3.请求头header

    这里的键值对,都是标准规定的,有特殊含义,但是也可以自定义~

    Host

    表示服务器主机的地址和端口, 去哪里找到服务器

    端口可以省略, 即表示默认值

    Content-Length

    Content-Type

    有就一起有,无也一起无(好兄弟~)

    • Content-Length 表示body中的数据长度
    • ~HTTP协议中,传输层是TCP(HTTP 3.0版本前), -> TCP是面向字节流的(第九个性质TCP那里) -> 粘包问题 -> 这里解决问题就是约定报文长度
    • ~上述举一个栗子

    GEThttps://sp3.baidu.com/-0U_dTmfKgQFm2e88IuM_aGET https://…

    GET请求后面直接就是下一个GET请求, 所以,搞一个Content-Length, 直接告诉他取到那里是body长度

    • Content-Type 表示请求的body中的数据格式 -> 数据格式很多种 -> 不同格式,接收方,解析方式不一样
    • ~说几种:

    1.from表单构造的请求() application/x-www-form-urlencoded

    2.上传文件出现的格式

    3.json格式(很香~) {"username":"11111"}

    User-Agent(简称UA)

    下面详细介绍

    Referer

    • 表示这个页面是从哪个页面跳转过来的(上级页面是什么)
    • 可能没有referer ,例如: 在浏览器地址栏里直接输入一个地址,直接点收藏夹
    • 用处: CPC广告~~(不详细介绍)

    Cookie

    下面详细介绍

    随机掉落的芝士🧀—Host:

    随机掉落的芝士🧀—Host 与 URL 里的服务器主机IP与端口

    • URL 里的主机IP与端口 与Host 里的不一定完全一样~~
    • 先解释一个次 代理 (类似中间商, 比如买车,卖车,然后中间人(平台), 它可以隐藏买车的人的真实信息, 或者可以隐藏卖车的人的真实信息),
    • URL 的地址可能是, 代理的地址
    • Host 的地址 是, 真实想访问的地址

    User-Agent(简称UA)

    直接看一个

    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36

    Mozilla/5.0

    Windows NT 10.0

    Win64; x64

    AppleWebKit/537.36

    Chrome/107.0.0.0

    Safari/537.36

    MDN~~查询文档

    系统是win10系统

    64位系统

    一个浏览器的内核

    浏览器

    Mac电脑上,默认浏览器

    • 小结: UA主要包含信息- > 操作系统信息和浏览器信息 -> 描述了用户使用什么设备上网 -> 因为最早的浏览器,有的支持图片,有的支持js… -> 从UA收集信息,知道可以支持什么页面 -> 显示什么页面 -> 现在UA没什么用了,但是可以统计用户设备情况~

    Cookie

    • 由浏览器专门提供的特殊api -> 让网页(持久化)存储(保存硬盘上)一些简单的数据

       

     

    • Cookie和query string一样都是程序猿自定义的~ -> cookie只能存一些简单的键值对信息  -> 比如 上次访问页面的时间,当前页面的访问次数…
    • 那你是不是以为cookie就是来自于浏览器? 其实不是~~ 看一张图

     

    • cookie 典型的应用场景

    客户端维持登录状态~某个网址登录成功后,浏览器就会记住当前的登录用户的信息~~下一次可以直接登录~

     

    用我的理解就是~学生卡吧~回到宿舍楼的时候,需要信息登记嘛~~但是你带着自己的卡一刷,你的信息就直接出来了~~不需要到阿姨那里,手动填写一系列东西~~

    所以cookie就像是一个媒介的感觉

    4.状态码

    是一个数字, 描述了当前这次请求的 ‘’状态’’ (成功,失败,失败原因)

    比较好理解~~直接看表吧

    200  访问成功

    301  永久重定向

    302  重定向 访问旧的URL自动跳转到新的URL上

    403  forbidden 访问被拒绝,没权限

    404  not found 请求路径写错了

    500  internal server error 服务器内部错误

    504  gateway timeout访问超时,服务器请求量大

    1XX

    信息性状态码

    接收的请求正在处理

    2XX

    成功状态码

    请求正常处理完毕

    3XX

    重定向状态码

    需要进行附加操作以完成请求

    4XX

    客户端错误状态码

    服务器无法处理请求

    5XX

    服务器错误状态码

    服务器处理请求出错

    四, 如何构造一个HTTP请求

    1.浏览器自己构造~~

    比如: 地址栏里写url -> 构造get请求  点击a标签->构造get请求 …

    2.form

    方法只能get pos

    get键值对 query string

    post键值对 body

    Content-Type 都是 x-www-form-urlencoded

    标签 请求构造数据

    键值对 input

    name 键

    输入 值

    关键作用

    给服务器传键值对

     

    3.ajax

    全称~ Asynchronous Javascript And XML

    Asynchronous异步 发起请求的主体,不负责接受结果,有别人主动推送

    XML最初ajax主要借助http传输xml, 但是xml用的越来越少了, 现在ajax传其他数据ex:json

    form与 ajax 区别

    1. ajax方法都可以 不局限于get post

    2. form构造的http请求 必触发 页面跳转  -> 开销大,耗时长,,用户等

      ajax默认发起请求不会跳转, 可手动改

  • 相关阅读:
    题目0097-数组组成的最小数字
    直播出海 | 国内直播间再出爆品,「外卷」全球如何致胜
    无框折叠玻璃隔断,上下轨道自由折叠门,集美丽与实用一体,开启空间最大化
    设计模式——中介者模式
    〖Python 数据库开发实战 - MySQL篇㉚〗- MySQL 条件函数
    【Git】Git 学习笔记_操作本地仓库
    【GPU驱动开发】- AST简介
    ESP32微控制器与open62541库: 详细指南实现OPC UA通信协议_C语言实例
    Python3数据分析与挖掘建模(1)python数据分析的流程与概述
    网页自适应方案
  • 原文地址:https://blog.csdn.net/m0_63501066/article/details/128055988