HTTP 协议的基本格式(部分)

        要想了解HTTP,得先知道什么是HTTP,那么HTTP是什么呢?HTTP (全称为 "超文本传输协议") 是一种应用非常广泛的 应用层协议。那什么是超文本呢?那就是除了文本,还有图片,声音,视频等。

理解 HTTP 协议的工作过程

        当我们在浏览器中输入一个 "网址", 此时浏览器就会给对应的服务器发送一个 HTTP 请求. 对方服务器收到这个请求之后, 经过计算处理, 就会返回一个 HTTP 响应。这个响应的内容往往是HTML内容。事实上, 当我们访问一个网站的时候, 可能涉及不止一次的 HTTP 请求/响应 的交互过程.

认识URL

         平时我们俗称的 "网址" 其实就是说的 URL (Uniform Resource Locator 统一资源定位符). 互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它. URL 的详细规则由 因特网标准RFC1738 进行了约定:(https://datatracker.ietf.org/doc/html/rfc1738)

一个具体的 URL: https://v.bitedu.vip/personInf/student?userId=10000&classId=100

https : 协议方案名. 常见的有 http https, 也有其他的类型. (例如访问 mysql 时用的 jdbc:mysql ),省略后默认为http

user:pass : 登陆信息. 现在的网站进行身份认证一般不再通过 URL 进行了. 一般都会省略

v.bitedu.vip : 服务器地址. 此处是一个 "域名", 域名会通过 DNS 系统解析成一个具体的 IP 地址. (通过 ping 命令可以看到, v.bitedu.vip 的真实 IP 地址为 118.24.113.28 ),如果省略的话,则是访问当前服务器的地址,如访问博客的服务器,响应内容就是博客主页的HTML,这个HTML又触发一些其他的HTTP请求,这些后续触发的HTTP请求,就可以省略IP,省略IP就相当于使用和刚才获取的博客HTML一样的IP

端口号: 上面的 URL 中端口号被省略了. 当端口号省略的时候, 浏览器会根据协议类型自动决定使用 哪个端口. 例如 http 协议默认使用 80 端口, https 协议默认使用 443 端口.用来区分应用程序

/personInf/student : 带层次的文件路径。访问服务器上的哪个资源。也可以省略,如果省略,相当于访问的就是服务器的根目录,如https://music.163.com/

userId=10000&classId=100 : 查询字符串 (query string). 本质是一个键值对结构 . 键值对之间使
& 分隔 . 键和值之间使用 = 分隔。查询字符串以问号开始。也可以省略。 / ? : 等这样的字符 , 已经被 url 当做特殊意义理解了 . 因此这些字符不能随意出现 . 比如 , 某个参数中需要带有这些特殊字符 , 就必须先对特殊字符进行转义. 转义的规则如下 : 将需要转码的字符转为 16 进制,然后从右到左,取 4 ( 不足 4 位直接处理 ) ,每 2 位做一 位,前面加上 % ,编码成 %XY格式。 urldecode 就是 urlencode 的逆过程; UrlEncode编码/UrlDecode解码 - 站长工具 (chinaz.com)
片段标识 : URL 中省略了片段标识 . 片段标识主要用于页面内跳转 . ( 例如 Vue 官方文档 : https://c
n.vuejs.org/v2/guide/#%E8%B5%B7%E6%AD%A5 , 通过不同的片段标识跳转到文档的不同章节 )

HTTP 协议格式

        Http由4个部分组成,第一个部分为首行,第二个部分为header,第三个部分为空行,第四个部分为正文。以下为HTTP请求:

        首行:由三部分组成,第一个部分为method(方法),第二部分为URL,第三部分为版本号。这三个部分使用空格来分割。如:GET https://blog.csdn.net/nav/game HTTP/1.1

method:

GET请求一般没有正文,POST响应一般有正文。POSTt和GET最主要的区别为,GET将要上传的自定义的数据放到query string,body通常是空的,而POST是把一些自定义的文件放到body里,query string通常是空的。放在query string,用户能直接看到,放在body里,用户没法直接看到。GET请求的优点是可以被缓存,因为GET请求不会对服务器上的资源进行修改,所以多次请求同一个URL时,浏览器可以直接从缓存中获取数据,提高了页面的加载速度。POST请求的优点是可以传递大量数据,而GET请求由于URL长度的限制,只能传递少量数据。

        header:也是键值对结构,每一行是一个键值对,键和值间用冒号分开。1)Host:表示服务器主机的地址和端口,通常情况下Host里的内容与URL里的内容是一致的,但是也有例外,比如如果使用了代理。2)Content-Length :表示 body 中的数据长度,单位为字节,没有body,这个就可以没有,有body,就必须有。解决粘包问题。3)Content-Type :表示请求的 body 中的数据格式.常见选项: application/x-www-form-urlencoded: form 表单提交的数据格式,multipart/form-data: form 表单提交的数据格式( form 标签中加上 enctyped="multipart/form-data" . 通常用于提交图片/文件。application/json: 数据为 json 格式。4)User-Agent (简称 UA) :表示浏览器/操作系统的属性。如操作系统的版本和浏览器的版本。5)Referer :表示这个页面是从哪个页面跳转过来的。如果直接在浏览器中输入URL, 或者直接通过收藏夹访问页面时是没有 Referer 的。6)Cookie :Cookie 中存储了一个字符串, 这个数据可能是客户端(网页)自行通过 JS 写入的, 也可能来自于服务器(服务器在 HTTP 响应的 header 中通过 Set-Cookie 字段给浏览器返回数据)。往往可以通过这个字段实现 "身份标识" 的功能.

         空行:相当于一个分隔符,分割了header和(正文)body,描述了body是从哪里开始。

        body:格式于query string的格式相似,同样也要经过urlencode,是要上传的数据。  

认识 " 状态码 " (status code)
        状态码表示访问一个页面的结果。
1) 200 OK: 这是一个最常见的状态码 , 表示访问成功 .
2) 404 Not Found: 没有找到资源 .
3)403 Forbidden: 表示访问被拒绝 . 有的页面通常需要用户具有一定的权限才能访问 ( 登陆后才能访问 ). 如果用户没有登陆 直接访问 , 就容易见到 403。
4) 405 Method Not Allowed: 前面我们已经学习了 HTTP 中所支持的方法 , GET, POST, PUT, DELETE . 但是对方的服务器不一定都支持所有的方法 ( 或者不允许用户使用一些其他的方法 ).
5) 500 Internal Server Error: 服务器出现内部错误 . 一般是服务器的代码执行过程中遇到了一些特殊情况 ( 服务器异常崩溃 ) 会产生这个 状态码 .
6) 504 Gateway Timeout: 当服务器负载比较大的时候 , 服务器处理单条请求的时候消耗的时间就会很长 , 就可能会导致出现超时的 情况 .
7) 302 Move temporarily: 临时重定向。 在登陆页面中经常会见到 302. 用于实现登陆成功后自动跳转到主页 . 响应报文的 header 部分会包含一个 Location 字段 , 表示要跳转到哪个页面 .
8) 301 Moved Permanently: 永久重定向 . 当浏览器收到这种响应时 , 后续的请求都会被自动改成新的地址 . 301 也是通过 Location 字段来表示要重定向到的新地址 .

认识响应 " 报头 " (header)
        响应报头的基本格式和请求报头的格式基本一致. 类似于 Content - Type , Content - Length 等属性的含义也和请求中的含义一致 .
Content-Type
        响应中的 Content-Type 常见取值有以下几种 :
        1)text/html : body 数据格式是 HTML
        2)text/css : body 数据格式是 CSS
        3)application/javascript : body 数据格式是 JavaScript
        4)application/json : body 数据格式是 JSON

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

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

相关文章

『C++成长记』C++入门——命名空间缺省参数

🔥博客主页:小王又困了 📚系列专栏:C 🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、C的认识 📒1.1什么是C 📒1.2C的发展 二、C关键字 三…

论文阅读之《Kindling the Darkness: A Practical Low-light Image Enhancer》

目录 摘要 介绍 已有方法回顾 普通方法 基于亮度的方法 基于深度学习的方法 基于图像去噪的方法 提出的方法 2.1 Layer Decomposition Net 2.2 Reflectance Restoration Net 2.3 Illumination Adjustment Net 实验结果 总结 Kindling the Darkness: A Practical L…

轮转数组------题解报告

题目:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 题解: 如果直接暴力双循环会时间超限,所以我选择了一个空间复杂度比较高的方法。直接再创建一个数组,然后对应位置替换,最后把值赋给原…

Spring framework Day24:定时任务

前言 在我们的日常生活和工作中,时间管理是一项至关重要的技能。随着各种复杂任务的增加和时间压力的不断增加,如何更好地分配和利用时间成为了一项迫切需要解决的问题。在这样的背景下,定时任务成为了一种非常有效的解决方案。 定时任务&a…

Kubernetes技术与架构-服务

从软件系统架构设计分层的角度看,Kubernetes的Service是基于Pod的上层,业务应用部署在Pod中,使用Service绑定Pod部署的应用,Service可以对外或者对上层提供服务,当Pod集群在系统调度的过程中发生弹性伸缩的时候&#x…

Python中的With ...as... 作用

Python中的with … as …作用: 1、通过with语句可以得到一个上下文管理器 2、执行对象 3、加载__enter__方法 4、加载__exit__方法 5、执行__enter__方法 6、as 可以得到enter的返回值 7、拿到对象执行相关操作 8、执行完了之后调用__exit__方法 9、如果遇到异常&a…

1024程序员节特辑 | ELK+ 用户画像构建个性化推荐引擎,智能实现“千人千面”

专栏集锦,赶紧收藏以备不时之需 Spring Cloud实战专栏:https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏:https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏:https://blog.…

易点易动上线招标管理模块:提升企业高效招标管理的解决方案

在当今竞争激烈的商业环境下,招标管理对于企业的成功至关重要。为了帮助企业实现高效的招标管理,易点易动固定资产管理系统上线了全新的招标管理模块。该模块涵盖了供应商资质审核、采购询价单、重新报价单、招标结果单、招标作废单等功能,为…

10月份stable diffusion animatediff等插件使用指南,又来更新了

插件一直会更新,包含了基本市面上流行的90%插件,好用的插件更是不会错过,往期插件请看往期文章,如果你没有时间一直关注sd更新的进展,请关注我,一个月用几个小时看一下我的文章,最短时间跟进sd。…

【微服务】spring webflux响应式编程使用详解

目录 一、webflux介绍 1.1 什么是webflux 1.2 什么是响应式编程 1.3 webflux特点 二、Java9中响应式编程 2.1 定义事件流源 2.2 实现订阅者 三、Spring Webflux介绍 四、Reactor 介绍 五、Reactor 常用API操作 5.1 Flux 创建流操作API 5.2 Flux响应流的订阅 5.3 Fl…

Mybatis对数据库进行增删查改以及单元测试

这篇写的草率了,是好几天前学到,以后用来自己复习 UserInfo import lombok.Data;Data public class UserInfo {private int id;private String name;private int age;private String email;//LocalDateTime可用于接收 时间}Mapper UserMapper pack…

2023年中国多功能折叠刀产量、销量及市场规模分析[图]

多功能折叠刀是一种集多种功能于一身的刀具,通常包括切割、开瓶、剥皮、锯木等功能,可以通过折叠和展开的方式来实现不同的功能,具有便携、多用途、安全等特点,广泛应用于户外探险、露营、自驾旅行等场景。 多功能折叠刀行业分类…

Simian使用方法

1.下载 链接1:官网下载 链接2:压缩包 2.操作 1.双击exe启动 2.打开控制台,winR 输入cmd 3.输入操作语句 G:\1111\simian-2.5.10\bin\simian-2.5.10.exe -includes"G:\1111\test\*.cpp" -threshold3 > output.txt G:\1111\si…

利用TypeScript 和 jsdom 库实现自动化抓取数据

以下是一个使用 TypeScript 和 jsdom 库的下载器程序,用于下载zhihu的内容。此程序使用了 duoip.cn/get_proxy 这段代码。 import { JSDOM } from jsdom; import { getProxy } from https://www.duoip.cn/get_proxy;const zhihuUrl https://www.zhihu.com;(async (…

璞华科技再次赋能,助力成都市温江区“码”上维权不烦“薪” !

科技赋能护“薪”行动 “码”上维权不烦“薪” 为保障劳动者工资收入的合法权益,提升人社部门智能化咨询服务能力,2023年10月17日,成都市温江区人力资源和社会保障局发布“码上护薪”小程序,助力劳动者“码”上维权不烦”薪”。…

【Machine Learning】01-Supervised learning

01-Supervised learning 1. 机器学习入门1.1 What is Machine Learning?1.2 Supervised learning1.3 Unsupervised learning 2. Supervised learning2.1 单元线性回归模型2.1.1 Linear Regression Model(线性回归模型)2.1.2 Cost Function(代…

学习编程语言需要熟悉库函数吗?

学习编程语言需要熟悉库函数吗? 我想答案肯定是需要的。 但不是盲目的挨个去记,几乎各个语言的库函数都极为丰富,逐个记忆的话是十分劝退的,而且也不可能全部熟悉,到用的时候该忘还是忘。最近很多小伙伴找我,说想要一…

AArch64 TrustZone

概述 本文我们介绍了 TrustZone 技术。通过CPU内置的硬件强制隔离,TrustZone 提供了一种高效的全系统安全设计。 我们介绍了如下功能:将 TrustZone 技术添加到处理器架构中,内存系统对于 TrustZone 的支持以及典型的软件架构。我们还介绍了…

利用MixProxy自动录制生成Pytest案例:轻松实现测试脚本编写!

前言 进行接口自动化时,有时候往往没有接口文档,或者文档更新并不及时,此时,想要获取相关接口,通过抓包是一种快速便捷的手段。抓包获取到接口后,开始写接口用例,此时需要复制请求url、请求参数…

全开源无加密跨境电商购物网站系统源码(无货源模式+多语言+多货币)

在全球化的时代背景下,跨境电商成为了越来越受欢迎的消费方式,而建立一个源码无加密多语言跨境购物网站系统是一个具有挑战性的任务,但完全可行。以下是这个过程的一些主要步骤: 1. 确定需求和功能规划:先确定网站需要…