当前位置: 首页 > news >正文

HTTP基础知识

关键字:

一问一答

用于和服务器交互

什么是HTTP

HTTP是个应用层协议,是HTTP客户端和HTTP服务器之间的交互数据格式。所以这里有个实例:在浏览网页的时候,浏览器会向服务器发送一个HTTP请求,告诉服务器我想访问什么..然后服务器会根据请求计算出HTTP响应(一般不止一个)让浏览器接收,里面包括了CSS、JS、HTML等信息。

通过浏览器的开发者工具Network栏可以监视到相关的http信息。

HTTP协议格式

通过抓包工具获取一个http数据包可以看到HTTP请求为:

POST https://weibo.com/ajax/feed/reportTipsAd HTTP/1.1

Host: weibo.com

Connection: keep-alive

Content-Length: 75

server-version: v2023.01.13.2

sec-ch-ua: "Not?A_Brand";v="8", "Chromium";v="108", "Microsoft Edge";v="108"

DNT: 1

X-XSRF-TOKEN: ke6hGT9aa3M23Vs_oSOJtuhC

traceparent: 00-d4b51744c9ffb7f50fc79b3483b66bd6-2f7c1a70cebae691-00

sec-ch-ua-mobile: ?0

client-version: v2.37.31

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.76

Content-Type: application/json;charset=UTF-8

Accept: application/json, text/plain, */*

X-Requested-With: XMLHttpRequest

sec-ch-ua-platform: "Windows"

Origin: https://weibo.com

Sec-Fetch-Site: same-origin

Sec-Fetch-Mode: cors

Sec-Fetch-Dest: empty

Referer: https://weibo.com/u/3235322060/home?topnav=1&wvr=6

Accept-Encoding: gzip, deflate, br

Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6

Cookie: SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9W5w1ynisFsDgViNmPqUd4E55JpX5KMhUgL.FoeEe0-0eoz7So52dJLoI7ySqPxXwgp4I5tt; SINAGLOBAL=786663887818.4773.1668729189177; SSOLoginState=1673408840; XSRF-TOKEN=ke6hGT9aa3M23Vs_oSOJtuhC; _s_tentry=weibo.com; Apache=2034831546041.4402.1673442465212; ULV=1673442465311:6:3:1:2034831546041.4402.1673442465212:1672998500749; ALF=1676380519; SCF=Aj2UkZGnUix87JONpJqrZn0Toq8qM6i-dM6IiBr3QcprB49616dFYaZWx80jufhYLiYYqPv7Dnup3VUhqzu61lI.; SUB=_2A25Ox4w6DeRhGeVM6FcS8izMzTyIHXVttPryrDV8PUNbmtANLVbakW9NTKbpK3VFtYovwqJ53RHKTm_SN9PuqC2p; WBPSESS=j5bVwsPyplgKhEqeOaEJABifqr1gMuMEvdcTvKzYEYF9Crylrt-5KEjYodjmTRGFlaHxj5VvZYmvuO4s6glrEgwpYR-DwzSLTLDMoJbJppv65uZ2vwW3BFOVGvOJhVKLt2iYbrQNfhFGyLcOY2ZAig==

{"posid":"pos60e2a7e96ddb1","adid":"ad_63c28d711f227","page":"home","pv":1}

包含:

  1. 首行: [方法] + [url] + [版本]

  1. Header: 请求的属性(每组属性之间使用\n分隔) / 冒号分割的键值对(遇到空行表示Header部分结束)

  1. Body: 空行部分内容都是Body, Body允许使用空字符串. 假如Body存在则Header中会有一个Content-Length属性来标识Body的长度

HTTP响应为:

HTTP/1.1 200 OK

Content-Type: application/json; charset=utf-8

Content-Length: 33

Connection: keep-alive

Server: Weibo API Gateway

Date: Sun, 15 Jan 2023 13:15:23 GMT

Vary: Origin

Access-Control-Allow-Origin: https://s.weibo.com

Access-Control-Allow-Credentials: true

X-Log-Uid: 3235322060

x-frame-options: SAMEORIGIN

x-xss-protection: 1; mode=block

x-content-type-options: nosniff

x-download-options: noopen

x-readtime: 18

PROC_NODE: mapi-weibopro-node-bypass-698985b8f6-tg2ll

SSL_NODE: mweibo-sslv6-003.dbl.intra.weibo.cn

LB: 111.13.225.93

X-Wag-Info: bWFwaV9m

{"code":100000,"msg":"ok","ok":1}

包含:

  1. 首行: [版本号] + [状态码] + [状态码解释]

  1. Header: 和请求的规则一样

  1. Body: 和请求的规则一样, 但是通常而言请求的Body不会很长的, 而假如服务器返回了一个htnl页面, 那么html的内容就是在body中.

空行的作用

  1. HTTP协议没有规定有多少个键值对, 所以空行就自然作为一个"报头结束标记"了

  1. HTTP(3.0版本之前)都是依赖TCP的, 没有空行就会发生粘包问题(TCP字节流嘛, 没有长度限制, 所以需要一定的标识符来声明什么时候才读取完一段数据).

HTTP中的内容

URL

Uniform Resource Locator, 唯一资源定位符, 用于找到网络上的资源, 还有一个概念叫URI, 叫唯一资源标识符, 用于区分网络上的资源, 这两者很相似, 平时不会做显示区分.

URL的格式通常为: [协议方案名] + [认证信息] + [服务器地址] + [服务器端口号] + [带层次的文件路径] + [查询字符串] + [片段标识符]

如:

https://www.bilibili.com/?spm_id_from=333.999.b_696e7465726e6174696f6e616c486561646572.1

  1. 协议方案名: 如http \ https \ jdbc:mysql

  • 可省略,省略后默认是http://

  1. 认证信息: 以前可能会有user:pass这样的账号密码信息在URL中明文传输, 现在好像基本已经没有了

  • 可省略

  1. 服务器地址: 服务器地址的形式应该为IP地址, 例子中的www.bilibili.com是一个域名, 通过DNS系统解析后可以看到其具体的IP地址

  • 可省略,假如是HTML页面的话,省略后表示服务器的ip/域名和当前html所属的相同

  1. 服务器端口号: 关联到服务器的进程端口.

  • 可省略,http默认端口号是80, https默认是443

  1. 带层次的文件路径: 通过文件路径来查找信息

  • 可省略,省略后相当于/.,有些服务器会在发现路径的时候自动访问/index.html(主目录,默认打开的画面)

  1. 查询字符串: 就是一个键值对结构, 键值之间通过=连接, 键值对之间通过&分隔2

  • 可省略

  • 通过程序员自约定的键值对形式来告诉服务器我们需要什么样的信息

  1. 片段标识符: 通常用来标记浏览到网页的哪个片段, 下次访问的时候可以直接定位

通过cmd的ping命令可以查看域名的IP地址

p.s. 因为/?:这样的字符在HTTP的格式中已经被占用,假如报文中还有这样的字符出现就需要通过URL encode转译成 [%] + [两位16进制] 的形式(中文等同理)。如“我”就是%E6%88%91

方法Method

方法如上图

HTTP中的方法和Java中的方法概念不同,这里的方法更像是一个标识符,用的最多的就是GET和POST。

GET

GET是表示请求,用于获取服务器中的资源。如在浏览器中输入一个URL时,浏览器就会发送一个方法为GET的HTTP请求到服务器中;HTML中的link、href、img、script都会触发GET(点击后触发,然后从服务器中获取相关资源)

POST

POST和GET貌似没有本质的区别,区别可能是在应用场景上吧,在用户提交输入的数据给服务器(如登录页面)时候多有POST。通过HTML中的form标签、JS的ajax也可以构造POST请求。

GET和POST的区别

  1. 应用场景区别:GET多用于获取数据,POST多用于提交数据(不绝对)

  1. 内容区别:GET的Body通常为空,数据信息通过query string查询字符串传递;POST的Body通常不为空,数据信息通过Body传送,而query string为空。(POST的Body中可以直接传输二进制数据,query string虽然无法直接传输二进制数据,但是可以针对二进制数进行url encode)

  1. 特性区别:GET通常是幂等的(标准建议实现成幂等的),POST反之。这个特性也宣告GET可以被缓存,而POST不行。(幂等即多次请求会得到相同的结果)

报头Header

HTTP中首行后的都是键值对,所以Header其实是很多对键值对的集合。常见键值对如:

  1. Host: 表示服务器主机的地址和端口

  1. Content-Length: 表示body中数据的长度(应该是字节为单位?)

  1. Content-Type: 表示body中数据的格式, 如:

  1. application/x-www-form-urlencoded: form表单提交的数据格式

  1. multipart/form-data: form表单提交的数据格式(通常用于提交图片/文件)

  1. application/body数据格式: 如application/json \ application/pdf 分别表示body的数据格式为json和pdf

  1. text/body的数据格式: 如text/html \ text/css 分别表示body数据格式是HTML和CSS

  1. User-Agent: 表示浏览器 / 操作系统的属性

  1. Referer: 表示这个页面从那个页面跳转过来(关联广告计费)

  1. Cookie: 存储字符串用于实现"身份标识"功能, 可能来自于网页自行通过JS写入, 也可能又服务器发来的HTTP响应中的Set-Cookie返回给浏览器进行设置的(Cookie一个应用场景是保持登录状态)

Content-Type

用于定义网页编码类型和网络文件类型,决定了浏览器以何种方式解析文件。编码就通常为UTF-8字符集,文件类型主要掌握一下三类:

  1. 常见的媒体格式类型:[text/] + [文件类型],如text/plain、text/html;[image/] + [图像类型],如image/gif、image/png、image/jpeg等

  1. application开头的媒体格式类型:[application/] + [文件类型],如application/pdf、application/json、application/msword等

  1. 上传文件时使用的类型:multipart/form-data

更多的话其实有个对照表,需要的话就上网查吧

d

正文Body

Body的内容与Header的Content-Type密切相关

如当Content-Type为application/x-www-form-urlencoded时,内容就是query-string般的键值对:

当Content-Type为application/json时,内容就是json格式

HTTP请求

form构造

form是HTML中一个常用的标签, 可用来向服务器发送GET或者POST请求.

其中action对应context path/后的url内容

ajax构造

HTTP响应

状态码Status Code

  1. 2系 (成功状态码)

  1. 200 OK: 表示访问成功

  1. 3系 (重定向状态码)

  1. 301 Moved Permanently: 永久重定向. 当服务器收到这种响应后, 后续的请求都会被自动改成新的地址.(通过Location字段重定向)

  1. 302 Move Temporarily: 要求客户端临时重定向. 比如登录页面中登录成功后, 自动跳转页面就是一次临时重定向.

  1. 4系 (客户端错误状态码)

  1. 403 Forbidden: 表示访问被拒绝. 在没有访问权限的时候就会出现403, 比如没有登录直接尝试访问.

  1. 404 Not Found: 表示没有找到资源. 在浏览器输入URL就是为了访问服务器的某个资源, 当这个资源不存在时候就会出现404.

  1. 405 Method Not Allowed: 表示方法不支持. 服务器不一定支持所有的方法, 或者不允许用户使用某些方法.

  1. 5系 (服务器错误状态码)

  1. 500 Internal Server Error: 服务器出现内部错误. 通常在服务器崩溃时候才会出现.

  1. 504 Gateway Timeout: 服务器响应超时. 服务器负载过大导致计算响应耗时过长会出现.

注意!HTTP虽然有状态码,但这不是说HTTP是有状态的。HTTP是无状态的。

HTTP

相关文章:

HTTP基础知识

关键字:一问一答用于和服务器交互什么是HTTPHTTP是个应用层协议,是HTTP客户端和HTTP服务器之间的交互数据格式。所以这里有个实例:在浏览网页的时候,浏览器会向服务器发送一个HTTP请求,告诉服务器我想访问什么..然后服…...

Delphi 10.4.2使用传统代码提示方案(auto complete)(转)

Delphi 10.4重点是实现了LSP,但现在最新的10.4.2还是不成熟,无法满足日常需要,不过没关系,可以设置为原有的方案,如下图:具体操作:Tools->Options->Editor->language->Code Insight…...

存储类别、链接与内存管理(三)

1、malloc函数详解 &#xff08;1&#xff09;函数声明 #include <stdlib.h> void* malloc(size_t size);malloc可以申请一定数量的空闲内存&#xff0c;这样的内存是匿名的&#xff0c;也就是malloc不会为其赋名&#xff0c;但是确实返回动态分配内存块的首元素地址&a…...

Java:Linux(CentOS)安装、配置及相关命令

目录一、VMware安装二、CentOS安装1、安装过程2、加载ISO2.1 桌面的设置三、VI/VIM编辑器1、一般模式2、编辑模式3、命令模式4、模式间转换四、网络配置和系统管理操作1、配置子网IP和网关2、配置虚拟机ip地址2.1 ifconfig 查询ip地址2.2 修改IP地址3、配置主机名3.1 hostname …...

Linux 操作系统原理 — 多任务优先级调度策略

目录 文章目录 目录多任务优先级调度策略User Process 调度策略配置调整 User Process 的优先级调整非实时进程的优先级调整实时进程优先级调整 User Process 的调度算法多任务优先级调度策略 在 Linux Kernel 中,Kernel Thread 作为唯一的调度实体,Kernel Scheduler(调度程…...

链表学习之找到两个链表相交的第一个节点

链表解题技巧 额外的数据结构&#xff08;哈希表&#xff09;&#xff1b;快慢指针&#xff1b;虚拟头节点&#xff1b; 找到两个链表相交的第一个节点 给定两个链表&#xff0c;这两个链表可能有环&#xff0c;可能无环。判断这两个链表是否相交&#xff0c;相交则返回第一…...

【Kubernetes】【十一】Pod详解 Pod的生命周期

Pod生命周期 我们一般将pod对象从创建至终的这段时间范围称为pod的生命周期&#xff0c;它主要包含下面的过程&#xff1a; pod创建过程 运行初始化容器&#xff08;init container&#xff09;过程 运行主容器&#xff08;main container&#xff09; 容器启动后钩子&#…...

Connext DDS录制服务 Recording Service(1)

1 序言 1.1 简介 RTI记录服务包括以下工具: •记录服务,一种RTI Connext DDS应用程序,用于记录主题和发现数据。记录服务记录数据更新以及时间戳,因此您可以查看或回放系统中随时间发生的数据更新。默认情况下,记录的数据存储在SQLite文件中。录制服务还具有一个API,用于…...

vTESTstudio - VT System CAPL Functions - VT2004(续2)

不要沮丧&#xff0c;不必惊慌&#xff0c;做努力爬的蜗牛或坚持飞的笨鸟&#xff0c;我们试着长大&#xff0c;一路跌跌撞撞&#xff0c;哪怕遍体鳞伤。vtsSetPWMVoltageLow - 设置PWM输出上的低电压功能&#xff1a;指定数字输出信号&#xff08;尤其是PWM信号&#xff09;输…...

每天一个linux命令---awk

awk命令 1. 简介 awk是一种处理文本文件的语言&#xff0c;是一个强大的文本分析工具&#xff0c;grep、sed、awk并称为shell中文本处理的三剑客。 AWK 是一种处理文本文件的语言&#xff0c;是一个强大的文本分析工具。 之所以叫 AWK 是因为其取了三位创始人 Alfred Aho&am…...

Open3D 点云旋转之轴角式(Python版本)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 三维空间中表示旋转的方法有很多种,轴角式是其中非常经典的一种表示方式。虽然欧拉角表示旋转的方法很是常用,但欧拉角存在着万向锁这个问题,因此轴角式旋转在旋转使用中更为合适。其原理也很是明了,如下所述:…...

Error: Timeout trying to fetch resolutions from npm

文章目录问题描述【最终解决】我搜索到的解决方案npmjs 该依赖各版本列表及对应的被下载次数github issue 说降级到0.0.3就可以正常运行了SOF 也说降级别到0.0.3问题描述 在项目里用到了 "preinstall": "npx npm-force-resolutions"配置&#xff0c;在一台…...

Python基础3

目录 1. 函数多返回值 2. 函数多种传参方式 3. 匿名函数 3.1 函数作为参数传递 3.2 lambda匿名函数 4. 文件的读取操作 4.1 open&#xff08;&#xff09;打开函数 4.2 读操作方法 4.3 文件的写入 4.4 文件的追加 5. 异常的捕获方法 5.1 捕获常规异常 5.2 捕获指定…...

高可用集群(HAC)

1、高可用集群keepalive说明 高可用定义&#xff1a; 目的&#xff1a;尽可能的提高服务的可用性 99%、99.9%、99.99%、99.999% 实现原理&#xff1a;心跳检测服务&#xff1a; 有状态&#xff1a; MySQL 无状态&#xff1a; apacheLVS Keepalive原理 案例环境专为 LVS和…...

python基于django微信小程序的适老化老人健康预警小程序

随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代, 适老化老人健康预警微信小程序就是信息时代变革中的产物之一。 任何系统都要遵…...

基于微信小程序图书馆管理系统

开发工具&#xff1a;IDEA、微信小程序服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8项目构建&#xff1a;maven数据库&#xff1a;mysql5.7前端技术&#xff1a;vue、uniapp服务端技术&#xff1a;springbootmybatis-plus本系统分微信小程序和管理后台两部分&#xff0c;项…...

将镭神C32激光雷达的PointXYZ数据转化为PointXYZIR格式 - 附代码

之前遇到过“镭神32线激光雷达ROS下运行fromRosMsg()报错 Failed to find match for field “intensity“ 问题”&#xff0c; 当时确定了是镭神C32雷达缺少相应字段&#xff0c;并记录博客【学习记录】镭神32线激光雷达ROS下运行fromRosMsg()报错 Failed to find match for fi…...

高级前端一面面试题集锦

详细说明 Event loop 众所周知 JS 是门非阻塞单线程语言&#xff0c;因为在最初 JS 就是为了和浏览器交互而诞生的。如果 JS 是门多线程的语言话&#xff0c;我们在多个线程中处理 DOM 就可能会发生问题&#xff08;一个线程中新加节点&#xff0c;另一个线程中删除节点&#…...

Java基础 -- List集合

Java基础 -- List集合1. Introduction1.1 好处1.2 常用泛型2. 交集&#xff0c;差集等2.1 自身的方法2.2 1.8jdk stream 新特性2.3 Apache的CollectionUtils工具类&#xff08;推荐&#xff09;3. 限定泛型范围4. Awakening1. Introduction 1.1 好处 代码复用&#xff0c;多种…...

【Linux】网络编程 - Socket套接字/基于UDP的网络通信

目录 一.套接字 1.什么是套接字/Socket套接字 2.套接字的分类 3.Socket套接字的常见API 二.网络字节序 1.什么是网络字节序 2.网络字节序和主机字节序的转换接口 三.IP地址形式上的转换 四.客户端的套接字不由程序员bind 1.为什么客户端套接字不能由程序员bind 2.OS…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...