HTTP—02

方法(method)

方法说明支持的HTTP协议版本
GET获取资源1.0  1.1
POST传输实体主体1.0  1.1
PUT传输文件1.0  1.1
HEAD获得报文首部1.0  1.1
DELETE删除文件1.0  1.1
OPTION询问支持的方法1.0
TRACE追踪路径1.0
CONNECT要求用隧道协议连接代理1.0
LINK建立和资源之间的联系1.0
UNLINE断开连接关系1.0

上述HTTP请求的初心是为了,表示不同的“语义”

但是在使用的过程中,不一定严格按照上述的标准,比较随意

GET 是最常用的 HTTP 方法 . 常用于获取服务器上的某个资源
在浏览器中直接输入 URL, 此时浏览器就会发送出一个 GET 请求
另外 , HTML 中的 link, img, script 等标签 , 也会触发 GET 请求
GET 请求的特点
首行的第一部分为 GET
URL query string 可以为空 , 也可以不为空
header 部分有若干个键值对结构
body 部分为空

POST 方法也是一种常见的方法. 多用于提交用户输入的数据给服务器(例如登陆页面)

通过 HTML 中的 form 标签可以构造 POST 请求 , 或者使用 JavaScript ajax 也可以构造 POST 请求
POST 请求的特点
首行的第一部分为 POST
URL query string 一般为空 ( 也可以不为空 )
header 部分有若干个键值对结构
body 部分一般不为空 . body 内的数据格式通过 header 中的 Content - Type 指定 . body 的长度由header 中的 Content - Length 指定

PUT POST 相似,只是具有幂等特性,一般用于更新

DELETE 删除服务器指定资源
OPTIONS 返回服务器所支持的请求方法
HEAD 类似于 GET ,只不过响应体不返回,只返回响应头
TRACE 回显服务器端收到的请求,测试的时候会用到这个
CONNECT 预留,暂无使用
任何一个能进行网络编程的语言都可以构造 HTTP 请求 . 本质上就是通过 TCP socket 写入一个符合 HTTP 协议规则的字符串

在方法中,GET 和 POST 占据了大多数,所以以下就针对这两种方法进行介绍:

GET请求,通常会把要传递给浏览器的数据,加到URL的query string中

POST请求,通常把要传给服务器的数据,加到body中                        ——以上都是习惯用法

浏览器显示的网页,是从服务器这边下载过来的,HTML内容可能比较多,通过网络加载消耗的时间比较多

浏览器一般会自带缓存,把之前加载过的数据,保存到本地网盘上

如要传输图片等数据,一般要进行 base64 转码——>针对二进制数据重新编码(转义),确保编码之后的数据就是纯文本数据

GET 和 POST 的错误描述——>

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

该说法是一个“历史遗留”问题

早期版本的浏览器(硬件资源匮乏),针对GET请求的长度做出了限制

实际上,RFC标准文档中并没有明确URL的最大长度

目前浏览器和服务器的实现过程中,URL可以非常长(以至于可以使用URL传递图片等)

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

依据是:使用GET请求来实现登录,会把用户名和密码放到URL中,进而显示在浏览器的搜索地址里。相比之下,POST则是把数据放在body里面

——>所谓的安全不是,传递的数据不容易被获取,而是在获取后不容易被破解(加密)

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

1. GET也可以使用body(body是可以直接放二进制数据的)

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

以下是关于GET和POST较为模棱两可的论述:

1)GET请求是幂等的,POST请求不是幂等的

任何情境下,输入相同的内容,输出的是稳定的

GET和POST是否是幂等的取决于代码的实现(RFC标准文档建议GET请求是幂等的)

2)GET请求可以被浏览器缓存,POST不可以缓存

幂等性的延续,如果请求是幂等的,就可以缓存

3)GET请求可以被浏览器收藏夹收藏,POST不能(收藏时可能丢失body)

请求报头(header)

header 的整体的格式也是 " 键值对 " 结构
每个键值对占一行 . 键和值之间使用分号分割

Header中的键值对很多,以下是比较重要的几个:

Host

表示服务器主机的地址和端口(在URL中也是存在的)
在使用代理的时候,Host的内容可能和URL中的值不同

Content-Length  Content-Type

Content-Length  body中的数据长度

Content-Type     body中的数据格式

请求中有body,才会有这两个属性

通常情况下,GET请求没有body,POST请求有body

body中的格式,可以选择的方式有很多:

请求:

1. json

2. form表单的格式    相当于是把GET的query string给挪到了body中

3. form-data的格式    上传文件时,会涉及到(不一定是form-data,也可能是form表单)

响应:

1. html        构成网页的骨架

2. css         构成网页的样式

3. json        

4. js            构成网页的行为

5. 图片

... 

TCP涉及到“粘包”问题,HTTP在传输层就是基于TCP

使用同一个TCP连接,传输多个数据包。此时就会使多个HTTP数据包,在TCP接收缓冲区挨在一起。接收方解析时,就需要清除HTTP数据包之间的边界 

GET请求没有body,直接使用  空行(分隔符)

POST请求有body,结合  空行  和  Content-Length

后续给服务器提交请求的时候,不同的Content-Type,服务器处理数据的逻辑是不同的

服务器返回数据给浏览器,也需要设置合适的Content-Type,浏览器也会根据不同的Content-Type做出不同的处理

User-Agent(UA)

表示浏览器/操作系统的属性

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/91.0.4472.77 Safari/537.36
Windows NT 10.0 ; Win64 ; x64 表示操作系统信息
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36 表示浏览器信息

Referer

表示这个页面是从哪个页面跳转过来的
如果直接在浏览器中输入 URL, 或者直接通过收藏夹访问页面时是没有 Referer

Cookie

浏览器的数据来自服务器,浏览器的后续操作也是要提交给服务器的

服务器这边管理了一个网站的各种核心数据

程序运行过程中,也会需要一些数据,需要在浏览器储存,在后续请求的过程中可能会发给服务器(这些临时性的数据,存储在浏览器比较好)但是禁止网页直接访问电脑的文件系统——>

于是为保证安全,又能进行保存数据,引入了Cookie(按照硬盘文件的方式进行保存,但是浏览器把操作文件封装了,网页只能往Cookie里储存键值对)——>Cookie 中存储了一个字符串

1)Cookie往往是从服务器返回的数据(可以是页面自己生成的)

2)Cookie存储到浏览器所在的主机的硬盘上,按照域名为维度来存储(每个域名下可以存自己的Cookie,彼此之间互不影响)

3)Cookie是按照键值对的形式组织的(此处的键值对是自定义的)

键值对之间,使用  ;  分割          键和值之间,使用  =  分割

后续再请求这个服务器的时候,会把Cookie中的内容自动带入到请求中,发给服务器。服务器通过Cookie的内容做一些逻辑上的处理

状态码

1XXInformational(信息性状态码)接受的请求正在处理
2XXSuccess        (成功状态码)请求正常处理完毕
3XXRedirection   (重定向状态码)需要进行附加操作以完成请求
4XX

Client Error   (客户端错误

状态码)

服务器无法处理请求
5XX

Server Error  (服务器错误

状态码)

服务器处理请求出错

 3XX    请求中访问的是A的地址,响应返回了一个重定向的报文,告诉你要访问B地址

很多时候网页的跳转就是使用重定向来实现

重定向的响应报文中,会带有Location字段,描述出当前要跳转到哪个字段

404    Not Found  请求中访问的资源,在服务器上不存在

403    Forbidden  访问的资源没有权限

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

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

相关文章

jQuery总结(思维导图+二维表+问题)

关于什么是jQuery:(下面是菜鸟里的介绍) jQuery 是一个 JavaScript 库。 jQuery 极大地简化了 JavaScript 编程。 jQuery 很容易学习。 而jQuery对我的感受就是,链式运用的很形象,隐式迭代还有一些兼容性强的优点&…

python数据分析:介绍pandas库的数据类型Series和DataFrame

安装pandas pip install pandas -i https://mirrors.aliyun.com/pypi/simple/ 使用pandas 直接导入即可 import pandas as pd pandas的数据结构 pandas提供了两种主要的数据结构:Series 和 DataFrame,类似于python提供list列表,dict字典,…

安装opnet14.5遇到的问题

安装opnet遇到的问题 我是按照这个教程来安装的。 然后遇到了两个问题&#xff1a; 1、“mod_dirs”目录问题 Can’t enable ETS scripting support due to missing files。 This is likely because:<opnet_release_dir>\sys\lib is notinclude in the “mod_dirs” pre…

SLAAC如何工作?

SLAAC如何工作&#xff1f; IPv6无状态地址自动配置(SLAAC)-常见问题 - 苍然满关中 - 博客园 https://support.huawei.com/enterprise/zh/doc/EDOC1100323788?sectionj00shttps://www.zhihu.com/question/6691553243/answer/57023796400 主机在启动或接口UP后&#xff0c;发…

6.3.1 MR实战:计算总分与平均分

在本次实战中&#xff0c;我们的目标是利用Apache Hadoop的MapReduce框架来处理和分析学生成绩数据。具体来说&#xff0c;我们将计算一个包含五名学生五门科目成绩的数据集的总分和平均分。这个过程包括在云主机上准备数据&#xff0c;将成绩数据存储为文本文件&#xff0c;并…

空天地遥感数据识别与计算--数据分析如何助力农林牧渔、城市发展、地质灾害监测等行业革新

在科技飞速发展的时代&#xff0c;遥感数据的精准分析已经成为推动各行业智能决策的关键工具。从无人机监测农田到卫星数据支持气候研究&#xff0c;空天地遥感数据正以前所未有的方式为科研和商业带来深刻变革。然而&#xff0c;对于许多专业人士而言&#xff0c;如何高效地处…

基于langchain的Agent(实现实时查询天气)

心血来潮&#xff0c;玩一下Agent&#xff0c;实现了多轮对话功能 import requests, jsonfrom langchain.agents import load_tools from langchain.agents import initialize_agent from langchain_community.llms.tongyi import Tongyi from langchain.memory import Conver…

《剑网三》遇到找不到d3dx9_42.dll的问题要怎么解决?缺失d3dx9_42.dll是什么原因?

《剑网三》游戏运行中d3dx9_42.dll缺失问题深度解析与解决方案 在畅游《剑网三》的武侠世界时&#xff0c;不少玩家可能会遇到系统提示“找不到d3dx9_42.dll”的报错信息。这一突如其来的问题不仅让游戏进程受阻&#xff0c;还可能让玩家陷入困惑与无奈。我将为大家深入剖析这…

springboot443旅游管理系统(论文+源码)_kaic

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统旅游管理系统信息管理难度大&#xff0c;容错率低&#…

OneCode:开启高效编程新时代——企业定制出码手册

一、概述 OneCode 的 DSM&#xff08;领域特定建模&#xff09;出码模块是一个强大的工具&#xff0c;它支持多种建模方式&#xff0c;并具有强大的模型转换与集成能力&#xff0c;能够提升开发效率和代码质量&#xff0c;同时方便团队协作与知识传承&#xff0c;还具备方便的仿…

OpenCV(python)从入门到精通——运算操作

加法减法操作 import cv2 as cv import numpy as npx np.uint8([250]) y np.uint8([10])x_1 np.uint8([10]) y_1 np.uint8([20])# 加法,相加最大只能为255 print(cv.add(x,y))# 减法&#xff0c;相互减最小值只能为0 print(cv.subtract(x_1,y_1))图像加法 import cv2 as…

git 删除鉴权缓存及账号信息

在Windows系统下 清除凭证管理器中的Git凭据 按下Win R键&#xff0c;打开“运行”对话框&#xff0c;输入control&#xff0c;然后回车&#xff0c;打开控制面板。在控制面板中找到“用户账户”&#xff0c;然后点击“凭据管理器”。在凭据管理器中&#xff0c;找到“Windows…

【Linux进程】进程间的通信

目录 1. 进程间通信 1.1 进程间通信的目的 2. 管道 2.1 什么是管道 2.2. 匿名管道 匿名管道的特性 管道的4种情况 联系shell中的管道 2.3. 命名管道 代码级建立命名管道 2.4. 小结 总结 1. 进程间通信 进程间通信&#xff08;Inter-Process Communication&#xff0c;IPC&…

leecode494.目标和

这道题目第一眼感觉就不像是动态规划&#xff0c;可以看出来是回溯问题&#xff0c;但是暴力回溯超时&#xff0c;想要用动态规划得进行一点数学转换 class Solution { public:int findTargetSumWays(vector<int>& nums, int target) {int nnums.size(),bagWeight0,s…

会话守护进程

会话&&守护进程 文章目录 会话&&守护进程1.会话1.概念和特性2.创建会话3.getsid和setsid函数getsid函数setsid 函数 4.代码 2.守护进程3.创建守护进程模型守护进程创建步骤&#xff1a;两个函数 完整代码&#xff1a; 1.会话 1.概念和特性 进程组&#xff0c…

学习反射(反射的使用,反射的应用场景)

目录 反射的使用 总的测试代码如下 反射的应用场景 反射的使用 大家先看一个案例 有一个person 类 属性有 String 类型的 name ,int age &#xff0c;还有一个 方法 a。 package fs;public class Person {private String name;private int age;public void a(){System.out.p…

在ESP32使用AT指令集与服务器进行TCP/IP通信时,<link ID> 解释

在ESP32使用AT指令集与服务器进行TCP/IP通信时&#xff0c;<link ID> 是一个非常重要的参数。它用于标识不同的连接实例&#xff0c;特别是在多连接场景下&#xff08;如同时建立多个TCP或UDP连接&#xff09;。每个连接都有唯一的<link ID>&#xff0c;通过这个ID…

Ansible 批量管理华为 CE 交换机

注&#xff1a;本文为 “Ansible 管理华为 CE 交换机” 相关文章合辑。 使用 CloudEngine - Ansible 批量管理华为 CE 交换机 wsf535 IP 属地&#xff1a;贵州 2018.02.05 15:26:05 总体介绍 Ansible 是一个开源的自动化运维工具&#xff0c;AnsibleWorks 成立于 2012 年&a…

【python虚拟环境安装】linux centos 下的python虚拟环境配置

linux centos 下的python虚拟环境配置 在 CentOS 环境中处理 pip 安装警告的方法1. 创建并使用虚拟环境2. 忽略警告并继续使用 root 用户安装&#xff08;不推荐&#xff09;报错问题处理 在 CentOS 环境中处理 pip 安装警告的方法 当在 CentOS 环境中遇到 pip 安装警告时&…

【Datawhale AI 冬令营】如何动手微调出自己的大模型

目录 总体思路实操案例数据集构造收集数据数据构造 模型微调选择模型选择数据集参数配置开始训练 模型使用 总体思路 微调大模型主要以开源的通用大模型为基础&#xff0c;喂给模型自己准备的数据&#xff0c;将通用的大模型往自己想要的方向引导&#xff0c;变成更偏向某一领…