网络编程5----初识http

1.1 请求和响应的格式

http协议和前边学过的传输层、网络层协议不同,它是“一问一答”形式的,所以要分为请求响应两部分看待,同时,请求和响应的格式是不同的,我们来具体介绍一下。

1.1.1 请求

在介绍请求之前,先来看一个具体的http使用案例:

首先我们能看到的是,http的内容是能够直接看懂的,说明http是文本形式的,不同于TCP、IP协议的二进制形式,http的响应也是文本形式的,但是我们查看时会发现是二进制形式,这是因为响应在网络传输过程中会被压缩为二进制形式,用来提高传输效率,节省网络带宽。

请求分为以下几个部分:

1、首行

这是http的第一行 分为三个部分,用空格分隔

1)GET:http请求的方法(method),还有其它很多方法,之后介绍

2)URL:唯一资源定位符,描述了一个资源在网络中的位置

3)版本号:

2、请求头

请求头是很多键值对结构的数据,每个键值对都是独占一行的,要注意的是,这里的键值对都是属于“标准规定的”,即key和value都有固定的东西,不可以程序员自己随便定义

3、空行

请求头的结束标记

4、正文(请求体)

有的http请求有,有的没有,后边详细介绍

1.1.2 响应 

响应也是由四部分构成的:

1、首行

1)版本号:HTTP/1.1

2)  状态码:200

3)状态码描述:OK

2、响应头

响应头的格式和请求头是一样的,也是键值对形式的,但是具体的键和值不同,后边会详细介绍

3、空行

响应头的结束标记

4、正文(响应体)

正文里的内容可能会很长,有很多中形式,HTML、CSS、JS、JSON、图片、视频.....

1.2 请求(详细版)

1.2.1 首行

请求方法:

请求方法有上图中那么多种,在这里我们只介绍最常用的GET和POST方法。

GET:通常会把要传给服务器的数据放在URL的查询字符串中(query string)

POST:通常会把要传给服务器的数据放在请求体中

这是GET和POST最本质的区别,接下来介绍的一些特点均是基于这个区别的:

注意:GET请求和POST请求的区别是面试中的常考题,但是由于技术的发展,这些区别已经属于“历史遗留”问题了,现在二者已经可以相互替换,差别不大了,所以了解即可:

1、GET请求能传递的数据量有上限,POST请求能传递的数据量没有上限

这种说法产生的原因是因为GET请求携带数据是放在query string中的,而POST请求携带数据是放在请求体中的,有一定的道理,但是随着技术的进步,现在的URL甚至可以携带图片资源,所以这种说法应该会逐渐消失

2、GET请求传递数据不安全,POST请求传递数据安全

举个例子,在我们登录账号时,如果使用GET请求,账号和密码都会直接携带在URL中,可以直接被看到,而POST的账号和密码是隐藏在请求体中的,不会被看到,所以有更安全这个说法,但是!!!这个说法是不正确的,上述的例子骗一个不懂计算机的小白或许还可以的,但是对于一个黑客,无论你的数据放在哪里,他都能拿到,所以,想要数据安全,要采取别的方法,比如加密措施....

3、GET只能给服务器传文本数据,POST可以给服务器传文本和二进制数据

这种说法也是不正确的:

1)GET请求也可以把数据放在请求体中(只是通常不这样做)

2)GET也可以把二进制数据进行base64转码,放在URL的query string中

4、GET请求是幂等的,POST请求是不幂等的

幂等:输入相同的数据,输出是稳定的

比如奶牛产奶,吃草之后,奶牛一定产的是牛奶,而不是别的东西,这就是幂等的。

但是这种说法也不完全正确,当我们使用GET请求访问一些广告页面时,输入的请求相同,但是输入的广告常常是不相同的,所以这种说法也不完全正常

5、GET请求可以被浏览器缓存,POST不可以被缓存

这个说法其实是基于第4个说法的,如果每次输出稳定,当然可以将数据缓存在浏览器中,反正每次请求的输出都一样,那直接在缓存中拿来使用不就好了

6、GET请求可以被浏览器收藏夹收藏,POST不可以被收藏

这种说法的主要原因是认为收藏的时候可能会丢失请求的body

URL:

这是请求首行中URL的具体划分:

  • 协议方案名:指出用到的协议是什么
  • 登录信息(认证):现在大多数请求已经没有了
  • 服务器地址:服务器在网络中的位置,也就是IP 地址,此处用域名表示
  • 服务器端口号:指明了具体要访问服务器中的哪个程序
  • 带层次的文件路径:指明了具体要访问程序中的哪个资源
  • 查询字符串:是一种键值对结构的数据,以?开头,这里的键值对都是程序猿自定义的,相当于对这次请求的一些补充说明
  • 片段标识符:有的网页内容比较长,就需要划分为多个“片段”,通过片段标识符,能够实现页面内部的跳转(技术文档中十分常见)

对于URL,给大家举个具体的例子:

http://小淘气食堂:80/包子/猪肉大葱包子?葱=少放&辣椒=微辣

对于上述这个例子,小淘气食堂就是域名,也就是要访问的网络资源的地址,80是这个食堂中具体的窗口,也就是我们要访问的具体的程序,包子/猪肉大葱包子是在这个窗口中具体想要访问的资源,?葱=少放&辣椒=微辣就是我们说的查询字符串,是对于这次请求的一个补充说明。

1.2.2 请求头

请求头里的键值对很多,这里介绍几个比较重要的:

1、HOST:这是请求的域名,在URL中也有,即服务器的网络地址

2、Content-Length:body中数据的长度

3、Content-type:body中数据的类型

请求中有body才会有以上两种请求头键值对,GET请求通常没有body,所以通常没有,POST请求有body,所以请求头中会包含以上两种键值对

Content-type是有很多类型的,例如:

  • json
  • form表单的格式
  • form-data的格式

后续给服务器提交请求时,不同的Content-type,服务器处理数据的逻辑是不同的,服务器返回数据给浏览器,也需要设置合适的Content-type,浏览器也会根据不同的Content-type做出不同的处理。

4、User-Agent

5、Referer:Referer描述了当前页面是从哪个页面跳转过来的

6、Cookie:Cookie可以认为是浏览器在本地存储数据的一种机制(即直接把数据保存在浏览器中)

浏览器的数据都来自服务器,之后的操作也会将数据提交给服务器,但是在程序运行过程中,也有一些数据需要存储在浏览器本地(例如上次登陆时间、用户的身份信息...),这些数据是需要在下次传给服务器数据时一并发送过去的,这些临时性的数据,就存储在浏览器比较合适。以下是一些Cookie在日常应用中的例子:

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

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

相关文章

助力数据跨境,最新政策解读与应用实践分享

6月13日,VERYCLOUD睿鸿股份联合深数所企业数据合规服务南山工作站、亚马逊云科技,在深圳南山区共同主办了一场关于《数据出境合规之路——法规解析与实践探索》研讨会。 VERYCLOUD睿鸿股份是南山大数据产业协会的副会长单位。南山大数据产业协会作为深圳…

C++代码编写风格:Header-Only与声明实现分离的选择

C代码编写风格:Header-Only与声明实现分离的选择 最近看到一些小伙伴问到了几个比较有趣的问题,这里总结一下,这些都是实际面试中出现过的问题,看看你知道多少,考察一下底子。 面试问题1:你通常编写代码的风…

实战!如何从零搭建10万级 QPS 大流量、高并发优惠券系统--图文解析

实战!如何从零搭建10万级 QPS 大流量、高并发优惠券系统–图文解析 原文链接:https://juejin.cn/post/7087824893831544845 原文作者:字节跳动技术团队 需求背景 需要设计、开发一个能够支持十万级 QPS 的优惠券系统 什么是QPS? Queri…

集采商城,智能费控4.0的核心载体

纵观企业费控模式进化史,从1.0手工报销模式到2.0线上报销模式,再到3.0移动报销模式,企业对费用管控的模式与技术虽然在不断升级迭代,但始终没有将消费端纳入费控体系,难以形成完整链路和闭环。 智能费控4.0创新提出场景…

SpringBoot+Vue物流快递仓库管理系统

物流快递仓库管理是一项非常繁琐复杂的工作,每天要处理大量的单据数据,包括入库、出库、退库、调库等多项货物操作流程。因此,为提高库管工作的质量和效率,就必须根据仓库管理的特点开发库存物流信息系统。 本文立足于物流信息系…

基于大数据的计算机就业数据可视化分析项目

使用Python作为编程语言,配合MySQL数据库以及Hadoop和Spark等大数据处理工具,实现了数据的抓取、清洗、分析到可视化展示的整个流程。系统采用Scrapy爬虫框架从拉勾网招聘平台高效抓取计算机行业的就业数据。随后,通过Pandas库对数据进行了深…

三人同行免单模式:社交电商的新趋势

在当今社交电商日益繁荣的背景下,三人同行免单模式作为一种创新的购物激励机制,正逐渐受到消费者和品牌的青睐。该模式通过消费者之间的互动和分享,促进产品销售和品牌推广,实现消费者与品牌的双赢。 模式概述 三人同行免单模式的…

Bilibili开源发布轻量级 Index 系列语言模型:2.8T 训练数据,支持角色扮演

Bilibili首次发布 Index 系列模型中的轻量版本:Index-1.9B 系列 本次开源的 Index-1.9B系列包含以下模型: Index-1.9Bbase:基座模型,具有 19 亿 非词嵌入参数量,在 2.8T 中英文为主的语料上预训练,多个评测基准上与…

养猫的上班族还不买智能猫砂盆吗?自费测评好用合集来啦!

到底谁还在蹲点等下班然后冲回家给猫铲屎的?原来是以前的我啊,任劳任怨给猫铲屎,上完自己的班回家还要给猫上班,累死累活的真的受不了!最后实在受不了,在网上看了各种智能猫砂盆的测评后果断购入&#xff0…

mysql中的lead函数和over函数

文章目录 mysql中的lead函数和over函数作用需求场景实现方法group by分组和使用over函数分组有什么区别? mysql中的lead函数和over函数 作用 over函数是用来分组加排序的,然后等over函数分好组排好序之后,再使用lead函数去找当前分组内的下…

JMeter详解

一、线程组 作用:线程组就是控制Imeter用于执行测试的一组用户 位置:右键点击测试计划’-->添加 -->线程(用户)--> 线程组 特点: 模拟多人操作线程组可以添加多个,多个线程组可以并行或串行取样器(请求)和逻辑控制器必须依赖线程组才能使用线程组下可以…

自动化测试:Autorunner的使用

自动化测试:Autorunner的使用 一、实验目的 1、掌握自动化测试脚本的概念。 2、初步掌握Autorunner的使用 二、Autorunner的简单使用 autoRunner使用方法 新建项目 a) 在项目管理器空白区域,右键鼠标,选择新建项目 b) 输入项目名后,点击[确定]. 在初次打开aut…

手机怎么自动切换ip地址

在数字化时代,网络IP地址不仅是设备在网络世界的标识,也是确保用户网络安全和数据隐私的关键因素。对于手机用户来说,在某些情境下可能需要自动切换IP地址,本文将为您介绍手机怎么自动切换IP地址。 随着网络技术的发展&#xff0c…

python项目(课设)——飞机大战小游戏项目源码(pygame)

主程序 import pygame from plane_sprites import * class PlaneGame: """ 游戏类 """ def __init__(self): print("游戏初始化") # 初始化字体模块 pygame.font.init() # 创建游戏…

CocosCreator 微信小游戏上架流程准备工作

前言 事前准备非常重要,因为有creator的助力,实际上开发小游戏往往很快,但是如果准备不足,上架及审核过程非常慢,往往游戏做好了,还得各种排队等审核,大多数开发者又不是腾讯白名单之内&#x…

在WordPress上添加亚马逊联盟链接的三种方法

在互联网快速发展的今天,很多人都希望通过网络来增加收入,而加入亚马逊联盟计划(Amazon Associates)无疑是一个不错的选择。如果你有一个WordPress网站,那么在文章中添加亚马逊联盟链接是个很好的变现方式。今天&#…

什么样的企业适合运用裂变拉新工具?深入解析

在当今数字化快速发展的时代,裂变拉新工具已成为许多企业吸引新用户、扩大市场影响力的重要手段。然而,并非所有企业都适合运用这种工具。林叔将探讨哪些类型的企业更适合运用裂变拉新工具,并分析其背后的原因。 首先,拥有高度用…

DDK电通拧紧MFC-S060控制器过流维修

一、DDK伺服拧紧轴控制器过流故障的成因 1. 电源电压过低:当电源电压过低时,控制器可能会出现过流现象。 2. 负载过大:当负载过大时,DDK电通拧紧机控制器MFC-S060的电流也会随之增大,可能导致过流故障。 3. 控制器内部…

2024年7月JLPT日语N1真题试卷和答案解析,《Navi日语社》小程序在线答题考试,你的专属考试助手,日语学习神器!

掌握日语,从日语社小程序开始。这款小程序专为日语学习者设计,提供全面的JLPT备考资源,包括日语N1至N5等级考试的历年真题和2024年最新题目。无论你是日语新手还是备考高手,都能在这里找到适合自己的学习路径。 核心功能&#xf…

采购管理系统:反向竞价失败的 6 个常见原因

在当今快节奏和竞争激烈的商业环境中,采购专业人员一直在寻找创新战略来节约成本和简化供应链流程。反向竞价就是其中一种广受欢迎的策略。 反向竞价提供了一种独特的采购方法,允许买家邀请多个供应商参与实时竞标,以争取他们的业务。虽然反…