TCP/IP协议—HTTP

TCP/IP协议—HTTP

  • HTTP协议
    • HTTP通讯特点
    • HTTP通讯流程
  • HTTP请求报文
    • 请求方法
  • HTTP应答报文
    • 状态码

HTTP协议

超文本传输协议(Hypertext Transfer Protocol,HTTP)是一种请求-响应的协议,用户可以通过HTTP向服务器上传、下载数据。HTTP基于TCP协议,是web应用中最主要的应用层协议,比如浏览器上网就是使用HTTP协议。通讯端口默认为80。

超文本安全传输协议(Hypertext Transfer Protocol Secure,HTTPS)是加入安全加密的HTTP通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS的安全基础是SSL/TLS。通讯端口默认为443。

HTTP协议源文档

HTTP通讯特点

  • 可靠传输:HTTP基于TCP,需要先连接再传输数据,因此也集成了TCP可靠传输的特性。
  • 立即响应:HTTP是无状态的协议,即不存储业务处理状态,每个请求都是互相独立、毫无关联的,协议不要求客户端或服务器记录请求相关的信息。
  • 单向请求:HTTP基于客户端-服务器模式,HTTP只能从客户端向服务器发起请求,服务器不能主动向客户端发起请求。
  • 灵活传输:HTTP可以传输任意类型的数据。

HTTP通讯流程

  1. 客户端发起HTTP请求,与服务器建立TCP连接。
  2. 客户端向服务器发送HTTP报文。
  3. 服务器收到HTTP报文后进行业务处理,然后返回结果。

HTTPS会在建立连接时加入身份认证的流程,且在数据传输的过程中使用证书对数据进行加密。

HTTP请求报文

在这里插入图片描述

HTTP报文主要分为三部分:请求行、请求头部、请求数据。
需要注意的是,HTTP报文的每一行都需要换行符,请求头部与请求数据之间还需要一个空行。

  • 请求行:包含请求方法,URL,协议版本。其中协议版本目前广泛使用的还是HTTP/1.1。
  • 请求头部:使用键值对的数据格式(key: value),用于声明请求的属性参数。
  • 请求数据:具体的请求数据。发送不同的数据会有不同的格式。
  1. 文本数据,以访问OpenAI ChatGPT的请求为例
POST /v1/chat/completions HTTP/1.1   //post请求,具体访问URL为/v1/chat/completions,HTTP/1.1 协议
Host: api.openai.com                 //访问的服务器域名
Authorization: sk-xxxxxxxxxxxxxxxx   //服务器需要的认证头部
Content-Type: application/json       //请求数据的数据类型
Content-Length: 179                  //请求数据数据长度{                                   //请求数据"model":"gpt-3.5-turbo","max_tokens":1000,"temperature":0.8,"messages": [{"role": "user","content": "讲个小故事"}]
}
  1. 文件数据,以访问OpenAI transcriptions的请求为例
POST /v1/audio/transcriptions HTTP/1.1  //post请求,具体访问URL为/v1/chat/completions,HTTP/1.1 
Host: api.openai.com                    //访问的服务器域名
Authorization: sk-xxxxxxx               //服务器需要的认证头部
Content-Length: 360                     //请求数据数据长度
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW  //请求数据的数据类型,包括数据分隔符------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file"; filename="/C:/Users/zou/Desktop/16k.wav" //传输的数据信息描述
Content-Type: audio/wav              //传输的数据类型。与数据要个一个空行(音频文件数据)
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name=modle  //传输的数据信息描述。与数据要个一个空行whisper-1
------WebKitFormBoundary7MA4YWxkTrZu0gW--   //最后的分隔符多了 -- 表示数据结尾

请求方法

请求方法作用
GET此方法用于请求指定资源的表示形式。GET请求通常用于数据检索,例如请求网页内容。GET请求的参数通常附加在URL后面。
POST此方法用于向指定资源提交数据以创建或更新资源。POST请求通常包含在请求体中的数据,适用于提交表单或上传文件。
HEAD与GET方法相似,但HEAD不返回响应体,仅返回状态行和标题部分。HEAD方法主要用于获取响应的元数据。
PUT此方法用于将数据发送到服务器以创建或更新资源。PUT方法用上传的内容替换目标资源中的所有当前内容。
DELETE此方法用于请求服务器删除指定的资源。DELETE请求会导致服务器删除URI指定的目标资源的所有当前内容。
OPTIONS此方法用于获取当前URL支持的方法列表。OPTIONS请求返回服务器支持的方法列表,对于查看API端点的可用操作非常有用。
TRACE此方法用于回显服务器收到的请求,主要用于测试或诊断网络路径上的问题。

HTTP应答报文

HTTP应答报文与HTTP请求报文格式类似,区别在与请求行。
以百度的应答报文为例

HTTP/1.1 200 OK
Connection: keep-alive
Content-Type: text/html; charset=utf-8
Date: Thu, 18 Apr 2024 02:21:36 GMT
X-Ua-Compatible: IE=Edge,chrome=1
X-Xss-Protection: 1;mode=block
Transfer-Encoding: chunked

请求行中没有请求方式以及URL,但是多了状态码

状态码

在这里插入图片描述
常用的状态码如下

状态码返回消息状态码含义
100Continue表示服务器已经接收到一部分请求,客户可以继续发送
101Switching Protocols用于响应客户端的 Upgrade请求头发送的,指明服务器即将切换的协议
102Processing表示服务器已经接收到请求并且正在处理,但尚未完成处理
200OK请求成功并已正确处理返回
201Create请求成功,并因此创建了一个新的资源。这通常是在 POST 请求,或是某些 PUT 请求之后返回的响应
202OK表示请求已被接受,但处理尚未完成
204No Content表示请求成功处理,但没有返回内容
301Moved Permanently请求资源的 URL 永久移动到了一个不同的URL,在响应中给出了新的 URL
302Found请求资源的 URL 临时移动到了一个不同的URL,在响应中给出了新的 URL
400Bad Request错误请求,服务器无法或不会处理请求
401Unauthorized表示客户端的请求没有身份验证或者验证失败
403Forbidden客户端没有访问内容的权限
404Not Found服务器找不到请求的资源
415Unsupported Media Type服务器不支持请求数据的媒体格式
414URI Too Long客户端请求的 URI 长度超过服务器所接受的长度
429Too Many Requests客户端在给定的时间内发送了太多请求
431Request Header Fields Too Large客户端在给定的时间内发送了太多请求
500Internal Server Error服务器内部错误,当服务器在处理请求时遇到了意外错误或异常情况,无法完成请求
502Bad Gateway表示代理服务器无法正确地转发请求并获得有效的响应

学习笔记,有问题欢迎指出

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

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

相关文章

Java调用WebServices接口

当拿到一个WebServices接口时,首先用接口测试工具调用一下接口,看是否可以正常发送请求和获取返回接口,确保接口是没有问题的,可以用SoapUI工具进行测试。 下面以一个免费的天气预报接口为例,记录整个接口的调用过程。…

初学python记录:力扣2007. 从双倍数组中还原原数组

题目: 一个整数数组 original 可以转变成一个 双倍 数组 changed ,转变方式为将 original 中每个元素 值乘以 2 加入数组中,然后将所有元素 随机打乱 。 给你一个数组 changed ,如果 change 是 双倍 数组,那么请你返…

如何解决PPT中获取加载项是灰色的,无法链接到Power BI的问题?

问题描述: 最近有朋友留言询问:“在尝试之前我发布的如何在PPT中展示Power BI报告的操作步骤的时候,想要在PPT中展示Power BI报告?只需这样做! (qq.com) 碰到在PowerPoint中【获取加载项选项】是灰色,无法链加载Powe…

【数据库】Oracle11g与Oceanbase3.2.3对比

一、数据库体系结构对比 数据库的体系结构是从某一个角度来分析和考察数据库的组成、工作过程与原理,以及数据在数据库中的组织与管理机制。 Oracle11g作为传统关系数据库的代表、Oceanbase作为分布式关系数据库的代表,体系结构上的设计差别很大。 &a…

【NLP】大语言模型基础之Transformer结构

大语言模型基础之Transformer结构 1. Transformer结构总览2. 嵌入表示层2. 注意力层3. 前馈层4. 残差连接与层归一化5. 编码器和解码器结构参考文献 Transformer是一种深度学习模型架构,由Vaswani等人于2017年在论文《Attention is All You Need》中首次提出。它在自…

【练习】二分查找思想

🎥 个人主页:Dikz12🔥个人专栏:算法(Java)📕格言:吾愚多不敏,而愿加学欢迎大家👍点赞✍评论⭐收藏 目录 二分查找算法介绍 1.二分查找 题目描述 讲解 ​编辑 代码实现 2.…

STM32应用开发——BH1750光照传感器详解

STM32应用开发——BH1750光照传感器详解 目录 STM32应用开发——BH1750光照传感器详解前言1 硬件介绍1.1 BH1750简介1.2 硬件接线 2 软件编程2.1 软件原理2.1.1 IIC设备地址2.1.2 IIC读写2.1.3 BH1750指令集2.1.4 BH1750工作流程2.1.5 BH1750测量模式 2.2 测试代码2.3 运行测试…

【剪映专业版】10时间线工具:主轨磁吸、自动吸附、联动、预览轴、全局缩放预览

视频课程:B站有知公开课【剪映电脑版教程】 主轨:有封面标志的轨道才是主轨。 主轨磁吸:开启后,在主轨上移动素材,自动向前磁吸,在其他轨道上移动无此效果;关闭后,不自动向前磁吸&…

6个步骤轻松实现Postman接口压力测试(建议收藏)

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号:互联网杂货铺,回复1 ,免费获取软件测试全套资料,资料在手,涨薪更快 这里讲是postman做接口并发测试,基础用法不做…

这些年背过的面试题--MySQL篇

MySQL一直是面试中的热点问题,也难道了很多的面试者。其实MySQL没那么难,只是大家没有系统化、实战性的过去学习、总结。同时很多开发者在实际的开发过程中也很少去接触一些偏向底层的知识。 本手册,已总结成完整的PDF文档。想获取该文档&am…

opencv的cmake报错

opencv编译报错 CMakeDownloadLog.txt #use_cache "D:/opencv/.cache" #do_unpack "ippicv_2021.8_win_intel64_20230330_general.zip" "71e4f58de939f0348ec7fb58ffb17dbf" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/1…

遇事不决 量子力学?

文章目录 引入量子力学产生的必然性量子力学名称的由来粒子?波?波粒二象性测不准原理 (不确定原理)叠加态原理 量子纠缠态叠加量子纠缠量子纠缠实验 逻辑判断,量子力学到底完善吗观测量子纠缠?那我们宏观世…

快慢指针的应用

快慢指针的原理 快慢指针是利用两个指针移动速度的不一样,实现一些有趣的追击行为。就像上学时求解的那些操场上的追击问题一样。 问题1:判断两个链表是否相交。(链表不存在环结构) 形如: 方法:循环第一…

谷歌开源专业代码模型:对硬件要求低,性能超强!

谷歌发布了面向企业、开发人员的全新代码模型Code Gemma,一共有基础预训练、指令微调和快速推理三个版本。 Code Gemma是基于谷歌在今年2月发布的Gemma模型之上开发而成。其参数很小只有20亿和70亿两种,但使用了超过5000亿tokens的代码、数学、文本等数…

vue2和vue3的v-if与v-for优先级对比

Vue.js 中使用最多的两个指令就是 v-if 和 v-for,因此我们可能会想要同时使用它们。虽然官方不建议这样做,但有时确实是必须的,我们来了解下他们的工作方式: 在 vue 2.x 中,在一个元素上同时使用 v-if 和 v-for 时&am…

【第七届openGauss技术文章征集】 openGauss新版本征文活动来啦!

活动背景 2024年3月30日,openGauss 6.0.0版本正式上线,该版本与之前版本特性功能保持兼容,在内核能力、DataPod三层资源池化架构、DataKit数据全生命周期管理平台、生态兼容性等方面全面增强。(下方【点击原文】即可查看更多【新…

【GPT-4最新研究】GPT-4与科学探索:揭秘语言模型在科学领域的无限可能

各位朋友们,你们知道吗?自然语言处理领域最近取得了巨大的突破!大型语言模型(LLM)的出现,简直就像打开了新世界的大门。它们不仅在语言理解、生成和翻译方面表现出色,还能涉足许多其他领域&…

【绘图案例-屏幕截图 Objective-C语言】

一、屏幕截图 1.接下来,我们来说这个屏幕截图, 1.看一下我们的ppt, 屏幕截图呢,核心代码,也就是一句话, 我们看ppt上说,有时候需要从屏幕上的某一个View啊,截取一个图片出来,然后呢,这个里边儿,它举的一个例子,就是这个东西,捕鱼达人的这个图片,实际上,屏幕截图…

突破界限:LangChain 引领 AI 应用构建的新时代

前言 在上一篇文章中我们对 ChatWithPDF 的方案设计进行了整体的概览,现在细化下整体流程,如下图所示: 针对上面的流程,我们思考🤔一下会面临的问题: 如何读取 PDF 中的内容?(肯定…

一些重新开始面试之后的八股文汇总

一、内存中各项名词说明 1、机器内存概念说明 linux中的free命令可以查看机器的内存使用情况,vmstat命令也可以 其中不容易被理解的是: 内存缓冲/存数(buffer/cached) 1.buffers和cache也是RAM划分出来的一部分地址空间 2.buff…