网络原理---拿捏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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ARMday04(开发版简介、LED点灯)

开发版简介 开发板为stm32MP157AAA,附加一个拓展版 硬件相关基础知识 PCB PCB( Printed Circuit Board),中文名称为印制电路板,又称印刷线路板,是重要的电子部件,是电子元器件的支撑体,是电子…

Linux生成随机密码和根据密码批量生成用户

cat /dev/urandom|tr -dc [:alnum:]|head -c20 生成20位数字字母的随机密码。 /dev/urandom生成随机数,tr -dc [:alnum:] 保留所有数字和字母,head -c20保留前20位。 使用原生的Linux命令生成可以说是极度安全的,也适用于批量用户生成的情况…

Django中如何让DRF的接口针对前后台返回不同的字段

在Django中,使用Django Rest Framework(DRF)时,可以通过序列化器(Serializer)和视图(View)的组合来实现前后台返回不同的字段。这通常是因为前后台对数据的需求不同,或者…

AlphaControls控件TsRadioGroup的使用

通常使用AlphaControls控件中的TsRadioGroup时,往往使用默认值,会造成TsRadioGroup标题被TsRadioGroup的ITEMs占用,严重影响美观: 解决方案,通过对TsRadioGroup的ContentVOffset属性,设置为10。即可立即改善…

处理uniapp打包后有广告的问题

1、登录平台(开发者中心) 2、 3、 4、 5、

3线硬件SPI+DMA驱动 HX8347 TFT屏-快速显示文字

本文实现DMA快速显示文字 汉字点阵通常是16*16点阵,那么用DMA一次性显示汉字,应该至少申请480*16个字节的空间,用于显示一行文字,其中480是屏幕一行用DMA驱动所需内存。 一、 源码 HX8347.h #ifndef USER_HX8347_H_ #define USE…

回归预测 | Matlab实现PCA-PLS主成分降维结合偏最小二乘回归预测

回归预测 | Matlab实现PCA-PLS主成分降维结合偏最小二乘回归预测 目录 回归预测 | Matlab实现PCA-PLS主成分降维结合偏最小二乘回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现PCA-PLS主成分降维结合偏小二乘回归预测(完整源码和数据) 1.输…

2023年9月少儿编程 中国电子学会图形化编程等级考试Scratch编程二级真题解析(选择题)

2023年9月scratch编程等级考试二级真题 选择题(共25题,每题2分,共50分) 1、点击绿旗,运行程序后,舞台上的图形是 A、画笔粗细为4的三角形 B、画笔粗细为5的六边形 C、画笔粗细为4的六角形 D、画笔粗细为5的三角形 答案:D 考点分析:考查积木综合使用,重点考查画笔…

伪造referer [极客大挑战 2019]Http1

打开题目 没有发现什么,我们查看源代码 在这里我们发现了提示 访问一下页面得到 提示说不能来自于https://Sycsecret.buuoj.cn,我们尝试访问一下这个url 发现访问不了 我们bp抓包一下 伪造个referer头 referer:https://Sycsecret.buuoj.cn 发包过去…

【js逆向实战】某sakura动漫视频逆向

写在前面 再写一个逆向实战,后面写点爬虫程序来实现一下。 网站简介与逆向目标 经典的一个视频网站,大多数视频网站走的是M3U8协议,就是一个分段传输,其实这里就有两个分支。 通过传统的m3u8协议,我们可以直接进行分…

如何申请QQ邮箱的SMTP密钥简洁版

QQ 邮箱的 SMTP 密钥通常称为"SMTP 授权码",你可以按照以下步骤找到它: 1.登录 QQ 邮箱:打开 QQ 邮箱登录页面,并使用你的 QQ 账号和密码登录。 2.进入设置页面:在 QQ 邮箱页面中,点击顶部的&q…

MySQL篇之mysql主从集群搭建

一、MySQL集群架构的介绍 我们在使用MySQL数据库的时候,只是一个单机的数据库服务。在实际的生产环境中,数据量可能会非常庞大,这样单机服务的MySQL在使用的时候,性能会受到影响。并且单机的数据安全想也会受到影响。因此在生产黄…

制作一个模板三

您已经看到了Jinja2在呈现过程中如何用实际值替换占位符&#xff0c;但这只是Jinja2在模板文件中支持的众多强大操作之一。例如&#xff0c;模板还支持在{%…%}块。下一个版本的index.html模板增加了一个条件语句: app/templates/index.html: <!doctype html> <htm…

快速开发一个简单实用的MES系统?

题主在一个光伏组件工厂做生产管理&#xff0c;但工厂竟然没有MES系统&#xff0c;于是想自己开发一个简单的MES系统。那么我们来看看题主对于开发MES系统的要求—— 对系统&#xff1a;每一个产品都有一个条形码&#xff0c;希望系统可以追踪生产计划下的产品的生产状态&…

RPA在财务预测和分析中的应用

在现代企业管理中&#xff0c;财务数据分析是决策制定和战略规划的关键环节。大数据的兴起带来财务数据的复杂性和数量不断增加&#xff0c;企业为此消耗了大量人力和物力。随着当今数字化、智能化时代的到来&#xff0c;越来越多企业引进RPA技术来提高工作效率&#xff0c;实现…

LeetCode算法心得——全排列(回溯型排列)

大家好&#xff0c;我是晴天学长&#xff0c;排列型的回溯&#xff0c;需要的小伙伴可以关注支持一下哦&#xff01;后续会继续更新的。&#x1f4aa;&#x1f4aa;&#x1f4aa; 1) .全排列 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按…

JVM垃圾回收机制

JVM 可达性分析法 1. 垃圾回收器的基本概念 什么是垃圾回收器&#xff1a;JVM 为 Java 提供了垃圾回收机制&#xff0c;其实是一种偏自动的内存管理机制。简单来说&#xff0c;垃圾回收器会自动追踪所有正在使用的对象&#xff0c;并将其余未被使用的对象标记为垃圾&#xff…

【poi导出excel模板——通过建造者模式+策略模式+函数式接口实现】

poi导出excel模板——通过建造者模式策略模式函数式接口实现 poi导出excel示例优化思路代码实现补充建造者模式策略模式 poi导出excel示例 首先我们现看一下poi如何导出excel&#xff0c;这里举个例子&#xff1a;目前想要导出一个Map<sex,List>信息&#xff0c;sex作为…

独立站运营和facebook投放怎么做

独立站运营和Facebook投放可以采取以下步骤&#xff1a; 制定投放目标&#xff1a;独立站卖家应该选择最适合与自己投放需求匹配的目标&#xff0c;比如需要提高内容参与度等。选择消费受众&#xff1a;根据年龄、性别、教育、地区、兴趣爱好、设备型号、过往购买等行为来判定…

idea2023如何查看被使用上下文关系

1.接口查看实现类&#xff0c;实现类查看接口 查看接口所有实现类 根据类里面的方法查看被覆盖的接口中的方法 2.查看方法、类被调用 3.查看类的继承关系