网络原理---拿捏HTTP协议:请求和响应

文章目录

  • 认识请求
    • 首行
      • URL
        • URL的格式
        • URL的encode和decode
      • 版本号
      • 方法
        • GET方法
        • POST方法
        • GET VS POST
    • 请求头:header
      • Host
      • Content-Length 和 Content-Type
      • User-Agent(UA)
      • Referer
      • Cookie
    • 空行
    • 正文:body
      • 如何构造HTTP请求?
        • 浏览器自己构造
        • HTML构造
        • ajax构造
        • 第三方工具:postman构造
  • 认识响应
    • 首行
    • 响应头:header
    • 空行
    • 正文:body
      • 状态码
      • Content-Type

认识请求

首行

URL

我们平时俗称的“网站”,其实就是URL。还有一个与它相近的概念叫URI

URL:是唯一资源定位符,用来找到网络上唯一的资源。
URI:是唯一资源标识符,用来区分网络上的资源

这两个概念非常的相似,一般情况下我们不做区分。

URL的格式

URL的格式是什么样子的,是由“RFC标准文档”来进行描述的。我们下面介绍一个典型的URL:

一个完整的URL包括:
协议://主机名(域名):端口号/路径/查询字符串query string
在这里插入图片描述

注:

  1. HTTP协议的默认端口号是80
  2. HTTPS协议的默认端口号是443
URL的encode和decode

URL的encode(编码):把原始的字符转成转义后的字符
URL的decode(解码):把转义后的字符转成原始的字符

进行编码和解码的原因:
URL中已经包含了一些特殊含义的符号了,比如:/ ?
万一query string的value中也出现了这些字符。就可能导致截断错误(错误的区分每个字段包含了几个字符),浏览器可能会错误的识别URL,服务器也可能会错误的解析URL

转义的规则:
把待转义的字符串的每个字符按照十六进制表示,并且在每个字节前加上一个%
在这里插入图片描述

版本号

版本号:表示当前的版本

方法

在这里插入图片描述

HTTP请求的方法非常多,每个方法都有各自的用途。但是常用的只有两个:GET和POST。我们下面也只介绍这两个方法:

GET方法

在这里插入图片描述

特点:

  1. 首行中第一个是GET
  2. URL中的query string 可以为空,也可以不为空
  3. GET请求中有若干组header这样的键值对
  4. GET请求的body为空
POST方法

在这里插入图片描述

特点:

  1. 首行中第一个是POST
  2. URL中的query string为空
  3. POST请求中有若干组header这样的键值对
  4. POST请求的body一般不为空,POST要给服务器传递信息的时候就把信息放在body中传递
GET VS POST
  1. GET和POST没有本质区别。使用GET的场景基本都可以使用POST来代替;使用POST的场景基本也可以使用GET来代替

  2. 语义的区别:GET是“从浏览器获取数据”;POST是“向浏览器提交数据”

  3. 使用习惯的区别:给服务器传递数据时,GET通常把数据放在URL的query string中;POST通常把数据放在body中

  4. GET请求建议实现成“幂等的”;POST则一般不要求实现成“幂等的” 幂等:就是指输入是确定的,输出就是确定的

  5. 在“幂等”的基础上,GET的请求结果是可以被缓存的;POST的请求结果一般不缓存。

    如果当前的GET是幂等的,就让浏览器缓存
    如果当前的GET不是幂等的,就要让浏览器避免产生缓存(比如:让每次GET请求的URL不同)

  6. GET请求和POST请求都不安全。传递的信息没有加密,放在query string中和放在body中区别不大

请求头:header

header里面大部分放的都是一些规定好的键值对,每一组键值对都有固定的含义。当然也可以把一些自定义的键值对放到header里面

我们下面就来介绍一下这些固定的键值对的含义:

Host

Host表示服务器的主机地址和端口,其实就是放的IP地址和端口号。

URL中不是有IP地址和端口号嘛? 为啥还要再搞个Host?

其实,URL里的IP地址、端口号和Host里的IP地址、端口号不一定完全一样。(当请求是通过代理来访问服务器的时候就不一样)
在这里插入图片描述

Content-Length 和 Content-Type

Content-Length:表示body中的数据长度,可以用来解决“粘包问题”
Content-Type:表示body中的数据格式

这俩字段不一定会有,但是如果有,就一定是两个都有。
当请求中没有body(GET),就没有。
当请求中有body(POST),就有。

Content-Type常见的格式:

  1. application/x-www-form-urlencoded:

    由form表单提交数据时的格式,和query string一样。比如:username=“zhangsan”&password=“123456”

  2. multipart/form-data:

    上传文件时的格式

  3. application/json:

    数据为json格式,body内的数据组织形式是这样的:{username:“zhangsan”,password:“123456”}

User-Agent(UA)

UA:包含了操作系统信息和浏览器信息,描述了用户使用啥样的设备上网,来对不同的设备做出不同的“支持”(比如:页面支持等)
在这里插入图片描述

注:在如今UA的功能已经被削弱了(浏览器基本统一),它被用在服务器端统计用户的设备情况(有多少用户用哪个版本使用哪个设备访问)

Referer

Referer:指的是当前这个页面是从哪个页面跳转过来的,保存上个页面的地址。可能是没有的(比如:直接打开时)

应用场景:广告计费(按点击量计费:CPC广告)

Cookie

Cookie:是浏览器在本地存储数据的一种机制,存在硬盘上。

服务器端已经保存了需要的大部分信息,但是还有一些特殊信息需要持久化的保存在浏览器上。但是浏览器为了安全,禁止JS直接访问你的硬盘,防止对你的硬盘数据造成破坏。它就专门的提供了一些API让网页使用,使它能够存储一些简单的数据。这就是Cookie

注:

  1. Cookie是按域名来进行组织的,每个域名下会存一些Cookie
  2. 每个Cookie都是键值对,是由程序员定义的。
  3. Cookie保存在浏览器,但是来源是服务器,服务器在响应中可以构造Cookie
  4. Cookie来自于服务器,保存在浏览器,最后还会回到服务器。当前浏览器保存了Cookie之后,下次再访问同一个网站时,就会把本地存储的Cookie再通过HTTP请求传给服务器。

空行

正文:body

正文body只在POST请求中有,有常见的三种格式Content-Type,这些在上面介绍Header的时候已经介绍过了,大家想看可以翻上去看看!!!

如何构造HTTP请求?

浏览器自己构造

在浏览器地址栏中输入URL地址点击回车,就会自动构造出一个HTTP请求

HTML构造
  1. 通过a标签的href属性构造,点击a标签就会发起HTTP请求
  2. 通过img标签的src属性构造,在需要加载图片的时候就会自动发起HTTP请求
  3. 通过input标签使用form表单构造

注:form表单构造的请求是一定会触发页面跳转的

ajax构造

使用JS借助Jquery,在前端页面通过ajax发起HTTP请求

注:ajax发起的请求一般是不会触发页面跳转的,当然也可以手动控制跳转

第三方工具:postman构造

使用postman软件可以构造任意类型的请求

认识响应

首行

首行 = 协议版本 + 状态码 + 状态文本

//比如:HTTP/1.1 200 OK

HTTP/1.1 为 HTTP 协议版本,200 为响应的状态码,OK 为状态文本

响应头:header

响应头与 HTTP 请求中的请求头类似,我们只需要认识在请求头中介绍的常见的请求头即可。

空行

正文:body

有下面介绍的四种类型:Content-Type

状态码

状态码:是一个数字,这个数字描述了当前请求的状态(成功、失败、失败的原因)。

状态码有很多,下面介绍一些常见的状态码:

200:表示访问成功

客户端有问题:
404:Not Find,请求路径写错了(你要访问的资源服务器上没有)
403:Forbidden,访问被拒绝(没有权限)

服务器有问题:
500:Internal Server Error,服务器内部错误
504:Gateway Timeout,访问超时(流量大的时候服务器无法响应到)

302:重定向,将访问的旧的URL自动转移到新的URL上

总结:
在这里插入图片描述

Content-Type

响应的Content-Type有以下几种类型:

  1. text/html : body的数据格式是HTML
  2. text/css : body的数据格式是CSS
  3. application/javascript : body的数据格式是JS
  4. application/json : body的数据格式是json

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/133972.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

13年测试老鸟,稳定性测试要点+性能监控关键指标分析(详细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、稳定性测试的要…

【服务配置文件详解】补充rsyslog服务的配置文件翻译解读

学习rsyslog日志管理服务的配置文件 # rsyslog configuration file 关于rsyslog软件的配置文件# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html 想看到更多相关信息,可以去查看这个文件,rsyslog-*的*表示软件版本,我…

近日的ChatGPT宕机事件,竟是黑客组织的蓄谋攻击!?还声称要教训OpenAI和奥特曼

作者 | 王二狗 想必大家都知道了,近日无论是ChatGPT还是其API服务都出现了长时间的线上崩溃! Sam Altman还下场亲自道歉说是因为太受欢迎导致服务器负载超荷。 大模型研究测试传送门 GPT-4传送门(免墙,可直接测试,遇…

实力进阶,再攀高峰!触想智能获评国家级专精特新“小巨人”企业

近日,触想智能收获工业和信息化部颁发的专精特新“小巨人”企业证书,成功跻身全国中小企业实力评优最高梯队。 此项荣誉,不仅是国家权威对触想智能十余年潜心耕耘的深度回响,也进一步激发触想持续奋发、不懈探索的成长底气。 触想…

Ripro-V5 6.4最新版 不限域名无限搭建(授权激活文件)

RiPro主题全新V5版本,是一个优秀且功能强大、易于管理、现代化的WordPress虚拟资源商城主题。支持首页模块化布局和WP原生小工具模块化首页可拖拽设置,让您的网站设计体验更加舒适。同时支持了高级筛选、自带会员生态系统、超全支付接口等众多功能&#…

JavaWeb Day09 Mybatis-基础操作01-增删改查

目录 环境准备 ①Emp.sql ②Emp.java 一、删除 ①Mapper层 ②测试类 ③预编译SQL(查看mybatis日志) 1.性能 2.安全 ④总结 二、新增 ①Mapper层 ②测试类 ③结果 ④新增(主键返回) 1.Mapper层 2.测试类 ⑤总结​…

基于YOLOv8与DeepSORT实现多目标跟踪——算法与源码解析

一、概述 "目标跟踪 (Object Tracking)"是机器视觉领域中的一个重要研究领域。根据跟踪的目标数量,可以将其分为两大类:单目标跟踪 (Single Object Tracking,简称 SOT) 和多目标跟踪 (Multi Object Tracking,简称 MOT)…

openpnp - 74路西门子飞达控制板(主控板STM32_NUCLEO-144) - 验证

文章目录 openpnp - 74路西门子飞达控制板(主控板STM32_NUCLEO-144) - 验证概述笔记重复数字IO的问题想法手工实现程序实现确定要摘掉的数字重合线自动化测试的问题测试程序的场景测试程序的运行效果测试程序实现备注END openpnp - 74路西门子飞达控制板(主控板STM32_NUCLEO-14…

【Linux】编译Linux内核

之所以编译内核,是因为gem5全系统仿真需要vmlinux文件,在此记录一下以备后面需要。 此过程编译之后会获得vmlinux和bzImage两个文件; 主要参考知行大佬的编译内核与gem5官方教程 文章目录 一、Linux源码下载二、安装编译依赖三、编译1. 内核编…

【uniapp】文件授权验真系统(含代码)

文章目录 前言一、框架选用二、数据库设计三、设计上传列表四、上传操作1.前端2.后端 五、修改操作六、访问操作七、二维码生成八、二维码访问九、删除操作总结 前言 吐槽:终于开通了【资源绑定】的功能了,之前还要一个一个的去贴链接 之前的同学联系…

Java12新增特性

前言 前面的文章,我们对Java9、Java10、Java11的特性进行了介绍,对应的文章如下 Java9新增特性 Java10新增特性 Java11新增特性 今天我们来介绍一下Java12版本的新增特性 版本介绍 Java 12是Java SE的第12个版本,于2019年3月19日发布。这个…

口袋参谋:新品上架如何实现月销1w?

​如今在淘宝天猫上,开新店上新品,想要出单是很不容易的。很多商家在新品上架之后,都是非常焦虑的,总是在担心一直没销量该咋办? 以下这几个方法,大家不妨尝试一下; ①打造店铺和产品人群的一致…

MYSQL5.7和MYSQL8配置主从

1、创建专门主从的账号 #登录 mysql -u root -p #创建用户 我这里用户名为test5,注意这里的ip是从库服务器的ip CREATE USER test5192.168.1.20 IDENTIFIED WITH mysql_native_password BY xxxxx; #给主从复制账号授权 grant replication slave on *.* to test5192…

基于Qt Linux开发板USER-KEY按键实现

介绍如何在 Qt 应用上使用嵌入式 GET6818 Linux 开发板 上的按键。 工具:Qt Creator 5.14.2 平台:windows ## 资源简介 在GET6818 开发板,开发板板载资源上有两个用户按键。如下图原理图(下图开发板的按键原理图)。 ## 应用实例 想要监测这个 KEY0,首先出厂内核已经…

Spring的缓存机制-循环依赖

群公告 Java每日大厂面试题: 1、Spring 是如何解决循环依赖? 答案:三级缓存,简单来说,A创建过程中需要B,于是A将自己放到三级缓存里面,去实例化B,B实例化的时候发现需要…

01 计算机图形学概述

什么是图形学 合成和操作视觉信息。 图形学的应用 游戏 电影 动画 模拟 设计 可视化 虚拟现实VR&增强现实AR 电子绘画 图形化UI 字体 图形学的挑战 思维上的挑战 创建与虚拟世界互动需要了解物理世界的各个方面新的计算方法,显示,技术 技术上…

SpringBoot不同环境加载不同配置文件(dev,sit,uat)

目录 一、springboot的profile配置profile多配置文件 二、maven的profiles策略 我们在使用spring的时候,一般都会有不同的环境需要部署:开发环境、测试环境和验收环境,而不同的环境则会有不同的配置,比如数据库ip。解决这个问题&a…

视频批量剪辑:视频合并技巧全攻略,成为视频剪辑专家

在视频制作的过程中,我们常常会遇到需要将多个视频片段合并的需求。这不仅涉及到视频的排列和组合,还需要考虑过渡效果、音频同步等因素。在视频制作过程中,视频批量剪辑是一个非常关键的环节。它可以大大提高工作效率,减少重复劳…

经典OJ题:奇偶链表

目录 题目: 示例: 解题思路: 方法一:双链表链接法 图例: 代码演示: 解题效果: 方法二:奇偶指针 图例: 代码演示: 题目: 给定单链表…

双H桥直流马达步进电机驱动芯片SS8833E

由工采网代理的率能SS8833E是一款适用于有刷直流或双极步进电机的集成电机驱动芯片;采用eTSSOP16封装;该器件集成了两个PNMOS H桥和电流调节电路;电机输出电流可以由外部脉宽调制器(PWM)或内部PWM电流控制器控制。 工…