【计算机网络】应用层协议Http

news2024/11/28 16:51:52

文章目录

  • 前言
  • URL(网址)
  • urlencode 和 urldecode
  • Http格式
  • 方法
  • Http状态码
  • 重定向
  • Http常见报头
  • 会话保持
  • 结语

前言

通过前面的学习,我们已经知道了协议其实就是一种约定,要求双方都能理解对方的消息。应用层上的协议不属于操作系统,是我们自己定制的,只要双方都能看懂即可,今天来学习一下Http协议。

URL(网址)

何为url:
在这里插入图片描述

urlencode 和 urldecode

url不只是为了http设计的,url希望能被所有网络协议使用,而协议中规定不能出现非ASCII的字符,因此要对非字符转义。比如图中,/?:等已经被当作特殊字符处理,若想单独表示这些字符,就要对特殊字符先进行转义。

规则:
将需要转码的字符转为16进制。
每两位做一位,前面加上%,编码为%XY

例如:
你的16进制是 0xE4BDA0(utf-8)
%E4%BD%A0

Http格式

  • 请求
    在这里插入图片描述

  • 首行:方法 + url + 版本

  • Header:请求的属性,冒号分隔的键值对;每组用\n来分割;遇到空行表示结束

    • Connection:长短连接,长连接允许接收多次请求;短连接即响应完就断开连接。
  • Body:空行后面是body的内容,Body允许设置为空字符串;如果body存在,在Header里会有一个Content-Length标识body的长度

  • 响应

在这里插入图片描述

  • 首行:版本号 + 状态码 + 状态码解释
  • Header:响应的属性,也是键值对,规则同上
  • Body:空行下面就是body,如果服务器返回了一个界面,那么html页面就是在body里的。

方法

GET和POST最为常见,其中GET获取资源,POST传输资源实体。

<form action = "a/c.exe",method="GET">
    姓名:<input type="text" name="myname" value="输入姓名"><br/>
    密码:<input type="text" name="mypass" value=""><br/>
    
    <input type="submit" value="submit"><br/>
</form>

GET和POST方法的区别:
在这里插入图片描述


在这里插入图片描述
GET和POST区别:

  • 数据:GET将数据放在了url里,POST则直接放在了正文里
  • 大小:GET受限于url大小,不能太长、POST可以更长一些
  • 安全:GET直接暴露在url里不适合传输敏感数据,而POST相对更安全一点

Http状态码

  • 1XX:信息状态码,接收的请求正在处理
  • 2XX:成功状态码,请求正常处理完毕
  • 3XX:重定向状态码:需要进行附加操作来完成请求
  • 4XX:客户端错误码:服务器无法处理请求
  • 5XX:服务器错误码:服务器处理请求出错

重定向

临时重定向:不会更改浏览器的任何地址信息。
永久重定向:永久重定向,会改变浏览器的本地书签。

重定向到qq的主页:

    std::string response;
    response += "HTTP/1.0 302 Found" + SEP;
    response += "Location: https://www.qq.com/" + SEP;
    response += SEP;

临时重定向的使用场景主要有:旧网站维护、活动广告跳转等
而永久重定向在我们使用中不常见,搜索引擎要周期性的全网爬取数据,如果爬到了永久重定向的网站,他就会把对应的跳转直接修改。

Http常见报头

  • Content-Type:请求的类型
  • Content-Length:Body长度。
  • Host:客户端告诉服务器所求资源在哪个主机的哪个端口
  • User-Agent:声明用户的操作系统和浏览器版本(反爬虫-伪造信息)
  • referer:当前页面是从哪个页面跳转来的
  • location:搭配3写了重定向状态码使用
  • Cookie:在客户端存储少量信息,用于实现会话功能

会话保持

Http本身是无状态的——访问无法被记住。http不直接参与,但用户需要会话保持,所以用户是否在线必须要记录下来。

Cookie就是来缓存我们用户信息的技术,浏览器会自动将我们保存的cookie信息带上,自动发给对应的网站,但这样做是有较大风险的:我们把用户信息直接暴露在了外面,如果被中间人拿到这个cookie信息,不仅会让该网站的号被盗号,个人信息也极其有可能被盗

而现在的普遍做法是,由服务器统一来维护你的信息,我们登录验证后,服务器会形成一个session对象,并把sessionid(唯一)返回给我们客户端,客户端的cookie文件就只存放这个sessionid,这样即使被中路截胡,也不用担心用户信息泄露。

同时,服务端也会做一些识别的工作,比如检测你的ip是否异常,数据是否异常等等…根据这些异常会让你的session失效。

结语

尽管如此,Http协议依然不安全,post请求虽然避开了浏览器缓存、无法直接分享和书签;cookie和session也尽量做到了用户信息安全,但依然有很多安全问题:post请求被网络抓包、登陆时在刚开始登录时就被中间人截获,为了解决这些安全问题,我们要引入一个新的协议:Https。

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

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

相关文章

七夕送什么礼物最有意义?可以试试潮趣数码好物!

​七夕送什么礼物最有意义&#xff1f;七夕节不想送常见物品&#xff0c;你可以送给他/她潮趣数码好物&#xff0c;不需要多么的贵重&#xff0c;最重要的是你的心意&#xff0c;只要你送的都喜欢。下面来安利几款值得入手的数码好物&#xff01; 推荐一&#xff1a;南卡00压开…

readMe、profile美化。

GitHub的profile美化&#xff0c;第一步&#xff1a;创建与个人账号一致的仓库。然后就会自动展示于个人首页、再新建readme.md文档&#xff0c;添加照片信息即可。&#xff08;动态效果是用svg实现的&#xff09; 一、上波浪svg代码 <svg xmlns"http://www.w3.org/2…

C# WPF 开源主题 HandyControl 的使用(一)

HandyControl是一套WPF控件库&#xff0c;它几乎重写了所有原生样式&#xff0c;同时包含80余款自定义控件&#xff08;正逐步增加&#xff09;&#xff0c;下面我们开始使用。 1、准备 1.1 创建项目 C# WPF应用(.NET Framework)创建项目 1.2 添加包 1.3 在App.xaml中引用…

15-矩阵转置的拓展延伸

&#x1f52e;矩阵的转置✨ 前言 在很多时候我们拿到的数据本身可能并不会把点的坐标按列的方向排列起来&#xff0c;对于我们人类来说&#xff0c;更方便的方式依然是把这个点的坐标按行的方向排列&#xff0c;我们比较熟悉把矩阵看作为一个数据&#xff0c;在这里&#xff0…

6款SSL证书实用工具,全都免费使用!

俗话说“工欲善其事&#xff0c;必先利其器”&#xff0c;SSL证书作为保护网站数据传输安全的重要部分&#xff0c;我们在申请、签发、部署安装SSL证书的时候&#xff0c;可能会涉及到CSR文件生成、获取证书链、转换证书格式等需求&#xff0c;这时候有对应的工具就可提高工作效…

SharePoint 审核和监控工具

审核在顺利的 SharePoint 管理中起着重要作用&#xff0c;尤其是在满足法规遵从性和取证要求方面。为避免数据泄露&#xff0c;必须了解谁来自哪个组访问了哪个文档&#xff0c;以及谁创建或删除了网站或网站集。 审核 SharePoint 服务器 SharePoint采用率的提高导致企业在其…

词性标记:了解使用维特比算法(2/2)

作者&#xff1a;Sachin Malhotra和Divya Godayal 来源&#xff1a; Viterbi Algorithm in Speech Enhancement and HMM 一、说明 早就想写一篇隐马尔可夫&#xff0c;以及维特比算法的文章&#xff1b;如今找了一篇&#xff0c;基本描述出隐马尔可夫的特点。 隐马尔可夫模型&a…

精彩回顾 | D-Day深圳 上海站:高频策略研发再提速

上周末&#xff0c;DolphinDB 分别在上海及深圳成功举办了两场 D-Day 分享会&#xff0c;来自国内头部券商、公募基金以及多家私募机构的数十位核心策略研发、数据分析专家们分享了 DolphinDB 在量化交易各个环节的使用经验&#xff0c;并基于与同类技术栈的优劣势对比&#xf…

java spring cloud 企业电子招标采购系统源码:营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展 tbms

​ 项目说明 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&#xff0c;以…

Java多线程(八)

目录 一、产生死锁的情况 1.1 一个线程多把锁 1.1.1 Java中可重入锁的实现机制 1.2 两个线程两把锁 1.3 N个线程M把锁 二、解决死锁的方案 2.1 死锁的必要条件 2.2 破除循环等待 一、产生死锁的情况 死锁是这样一种情形&#xff1a;多个线程同时被阻塞&#xff0c;它们中的一个…

开放式耳机很吵吗?开放式耳机推荐

​一般情况下&#xff0c;开放式耳机是不会吵到别人&#xff0c;开放设计&#xff0c;使声音不会被完全封闭在耳朵里&#xff0c;而是向四周扩散。与传统的封闭式耳机相比&#xff0c;开放式耳机以其出色的音质和宽广的音场而备受追捧。选择一款适合自己的开放式耳机无疑是至关…

金蝶云星空对接打通管易云分布式调入单查询接口与其他入库单新增完结接口接口

金蝶云星空对接打通管易云分布式调入单查询接口与其他入库单新增完结接口接口 源系统:金蝶云星空 金蝶K/3Cloud在总结百万家客户管理最佳实践的基础上&#xff0c;提供了标准的管理模式&#xff1b;通过标准的业务架构&#xff1a;多会计准则、多币别、多地点、多组织、多税制应…

Three.js WebXR沉浸式渲染简明教程

在前面文章中&#xff0c;我们了解了 VR 概念以及它们如何在 WebXR 中映射。 这使你可以考虑想要为用户提供的体验。 在本文中&#xff0c;我们将介绍如何将 WebXR 与 Three.JS 结合使用来创建针对大型异构用户群的沉浸式体验。 警告&#xff1a;WebXR API 仍在完善中&#xf…

C++学习笔记总结练习:数值方法

数值方法 1.1 随机数 头文件 #include<random>随机数概述 随机数分布。随机数的分布方式distribution 随机数引擎。产生随机数engin。随机性的源头 随机数生成器。由一个随机数引擎和一个随机数分布&#xff0c;组合成一个随机数生成器。 随机数引擎的操作 编译器…

关于@JSONField的使用

1.此注解来自jar包com.alibaba.fastjson 今天分享一个有意思的事情。这个注解作用与类的属性上&#xff0c;如下&#xff1a; ApiModelProperty(value"开始时间,格式:yyyy-MM-dd",required true) JSONField(name"start_date",ordinal 1) private String…

扫盲!PRINCE2认证6大常见问题集锦!

一&#xff0c;什么是PRINCE2认证&#xff1f; PRINCE2是PRoject IN Controlled Environment&#xff08;受控环境下的项目管理&#xff09;的简称&#xff0c;也叫国际项目管理师认证&#xff0c;是英国商务部(OGC)在1996年开始推广世界三大项目管理体系之一。 PRINCE2是一套…

API数据安全风险飙升! 3场景1实践看美创科技API-SMAC有效防护

在某次实战攻防演练中&#xff0c;防守方层层布防&#xff0c;搭建了十分健全的防御体系&#xff0c;本以为万无一失&#xff0c;结果靶标悄无声息被拿下。事后溯源中才发现&#xff0c;一个存在未授权访问的历史API&#xff0c;成为了突破口&#xff0c;敏感信息被红队获取&am…

【LeetCode 75】第二十一题(1207)独一无二的出现次数

目录 题目: 示例: 分析: 代码运行结果: 题目: 示例: 分析: 用两个unordered_map来分别存放每个数字的出现次数和出现的次数这个数,有点绕,比如说有给的数组有两个1,那么第一个map存放的是(1,2),表示1这个数子出现了两次,而第二个map存放的是(2,true),表示有出现次数为2的数…

python——案例11:数值交换

案例11&#xff1a;数值交换xinput(输入一个数值赋值给x&#xff1a;) yinput(输入一个数值赋值给y&#xff1a;)tempx #创建临时变量&#xff0c;以此变量为基础进行逐次交换 xy ytemp print(交换后的X的值是:{}.format(x)) # print(交换后的Y的值是:{}.format(y)) #

java【native关键字】

描述&#xff1a; native只能修饰方法&#xff0c;表示这个方法的方法体代码不是用java语言实现的&#xff0c;而是由c/c语言编写的。但是对于java程序员来说&#xff0c;可以当作java的方法一样正常去调用它&#xff0c;或者子类重写它 语法&#xff1a; 用在方法的返回值类…