首页 > 其他分享 >HTTP协议

HTTP协议

时间:2023-07-07 09:56:10浏览次数:44  
标签:协议 HTTP http 请求 服务器 客户端

HTTP协议

【1】http协议基础

http协议,我们分三部分学习:

  1. 协议基础(基本概念、协议特点、协议格式、相关工具使用)
  2. django框架的时候,学习http协议的web服务器
  3. Linux阶段的时候,学习http协议的剩余内容(http服务器的搭建、http服务器提供的网络服务、http协议相关配置、https协议使用)

【2】基本概念

  • HTTP协议(HyperText Transfer Protocol,超文本传输协议)
    • 由蒂姆·伯纳斯-李于1989年为了推广互联网技术而推出的一种无状态网络应用协议
  • HTTP协议构建于TCP/IP协议族之上
    • 属于应用层协议
  • 主要用于传输与超文本相关的资源文件
    • 如HTML网页,css,js,图片,视频,音频等。

1

  • 现行的HTTP协议基于数据是否加密,主要分两种。

img

  • 直接构建于TCP协议之上
    • 没有进行加密传输数据的是HTTP协议
    • 默认通信端口是80端口
    • 常用端口有:3000,5000,8000,8080等。
  • 而构建于TLS或SSL协议之上
    • 对数据使用SSL加壳加密传输数据的是HTTPS协议
    • 默认通信端口是443端口
    • 常用端口8443。
注意:在本地电脑上双击html网页也可以通过浏览器来查看HTML网页信息,但是这种方式是采用file协议来访问的。
file协议叫本地文件浏览器协议,顾名思义,是只能访问本地电脑中的路径文件,用户无法通过file协议访问另一台电脑中的文件。

除了http或https协议可以提供html等资源的浏览服务以外,还有ws或wss也可以用于在浏览器中提供网页服务,但是ws或wss一般用于web网络即时通信比较多。
  • http协议具有无状态、无事务、所有请求必有所回应的特点。

    • 所谓的无状态是指http协议默认情况下,服务端不识别客户端的。
    • 在客户端多次发起请求到同一个服务器,服务端接收到客户端的请求在处理完成以后就会主动断开。
    • 所以对于客户端的每一次请求,对于服务端来说,都是一次新的客户端请求。
    • 也就是说,服务端无法区分多次请求的客户端是否同一个客户端
  • http协议是基于客户端请求,服务端响应模型来实现的。

    • 所以一般而言对于http协议通信的双方来说,发起请求的一方只能是客户端,而响应数据的一方只能是服务端。

【3】请求响应模型

  • HTTP协议永远都是客户端发起请求,服务器回送响应。

2

(1)请求报文格式

  • 对于客户端的http请求格式一般分三部分组成
    • 分别是请求行、请求头、请求体(部分请求方法不具有请求体)。

3

  • 一般如下:
请求方法  请求路径  http协议版本                   <---- http响应的一行内容,也叫请求行
请求头选项1: 选项值
请求头选项2: 选项值
....
请求头选项n: 选项值

请求体(可以有多行,前后必有空行)


  • 我们可以借助telnet工具对远程的web服务器发起http或https请求。
  • telnet默认是关闭的。所以需要手动打开。

image-20220701093704966

  • 例如,发起http请求访问,基本的http请求格式如下:
GET  /get  HTTP/1.1
Host: httpbin.org
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36

(2)发送GET请求

telnet httpbin.org 80

GET  /get  HTTP/1.1
Host: httpbin.org
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36


  • 请求效果如下:

4

(3)发送POST请求

  • 发送POST请求,并发送json数据格式。
POST /post HTTP/1.1
Host: httpbin.org
Content-Type: application/json
Content-Length: 44

{"name": "xiaoming", "age": 16,"pwd": "123"}
  • 也可以通过安装测试工具,如postmanApifox,来查看并学习http协议的请求与响应格式。

image-20220701101136715

(4)响应报文格式

  • 上面看到的内容实际上就是远程http服务器通过http通信返回的响应报文。格式如下:
协议版本 响应状态码 响应文本提示                               <-----  http响应的第一行内容,响应行
响应头选项1: 选项值
响应头选项2: 选项值
....
响应头选项n: 选项值

响应体(服务端返回的正文信息,前后必有空行)

【3】协议报文详解

  • 前面我们提到,http协议是应用层协议,是基于tcp协议。
  • 在前面的网络编程曾经学习过tcp协议的通信是可靠安全的
    • 所以实际上来说,因为http协议是基于TCP协议来传输数据的,所以http协议就具有了有所请求必有所回应的特点,也因此我们可以说,http协议一次通信的最基本的流程都是具有请求报文与响应报文的。
  • 请求报文与响应报文就组成http协议的通信内容(HTTP报文)。
    • 不管是请求报文还是响应报文在上面的发送请求与查看服务器响应报文
    • 我们都可以看到,实际上HTTP报文就是一段连续的多行的文本

(1)HTTP请求流程

5

(2)请求报文

  • 请求报文(HTTP Rquest)主要通过客户端发送用于表达对服务器资源的操作。
  • 基本格式:
请求方法  请求路径  http协议版本                   <---- http响应的一行内容,也叫请求行
请求头选项1: 选项值
请求头选项:2 选项值
....
请求头选项n: 选项值

请求体(可以有多行,前后必有空行)

请求行

  • 请求行(HTTP Request Line)
    • 表示请求报文的首行
  • 主要三部分组成,使用单个空格隔开,分别是:
    • 请求方法
    • 请求路径
    • HTTP协议版本。

请求方法

  • HTTP请求方法(HTTP Request Method)
  • 表示客户端希望对服务器指定资源进行哪一种类型的操作
  • 存在多种HTTP请求方法表达增删查改。
  • 常见请求方法如下:
请求方法 描述 报文中是否包含请求体
GET 表示客户端希望从服务器中获取下载资源信息 Flase
POST 表示客户端希望上传文件或通过请求在服务器创建资源信息。 True
PUT 表示客户端希望修改或更新服务器资源(表示修改全部资源信息,例如数据表的一整个记录) True
PATCH 表示客户端希望修改或更新服务器资源(表示修改部分资源信息,例如数据表的一个记录里面某个属性值) True
DELETE 表示客户端希望删除或废弃服务器资源 Flase
OPTION 表示客户端希望获取服务器所支持的请求方法列表 Flase
HEAD 表示客户端希望获取服务器支持的跨域地址列表 Flase

请求路径

  • 表示远程web服务器的一个可访问资源。
  • 一般就是代表的就是一个服务器的具体文件或数据表中的记录信息,或一个服务端里面的函数或方法。
/     表示根路径
/1.html   表示web服务器中web根目录下的1.html文件
/login    表示web服务器中的一个login方法或者login函数

http协议版本

  • 表示客户端目前使用的HTTP协议版本,并期望服务端也采用同样版本的协议与客户端进行通信。

  • http协议发送至今已经到了HTTP2.0版本,目前主流的使用版本有:HTTP/1.0 、HTTP/1.1。

请求头

  • HTTP请求头(Request Head)
    • 主要对客户端请求操作进行限制条件与补充说明。
  • 常见的标准HTTP请求头如下:
选项 描述
Host 指定客户端请求的服务器的域名和端口号。 www.baidu.com
Content-Type 告诉服务器,客户端请求携带的请求体数据的媒体类型信息(MIME类型)
User-Agent 告知服务器HTTP 客户端网络代理程序的版本信息,一般就是浏览器的版本信息。
Authorization 告知服务器客户端的Web认证信息。
Content-Length HTTP报文中请求体的大小,以字节为单位。
Referer 告诉服务器该网页是从哪个页面链接过来。也就是上一页页面的地址。
Accept 指定客户端能够接收并理解的媒体类型类型(MIME类型),用于表达希望服务端的返回资源格式。
Accept-Encoding 指定浏览器可以支持的web服务器返回内容压缩编码类型。 gzip, deflate, br
Pragma 指定服务端控制缓存行为。http/1.0以前的字段。 Pragme: no-cache
Cache-Control 指定服务端控制缓存行为。http/1.1以后的字段。 Cache-Control: no-cache
Upgrade 向服务器请求在当前http协议的基础上升级采用新的某种传输协议以便服务器进行转换 常用于http协议升级到ws协议。
Connection 指定本次http通信结束以后,是否关闭TCP网络连接。如果设置持久连接,则可以在一次会话中,可以使用同一个TCP连接,进行多次的HTTP通信,提高效率。 持久连接,Connection: keep-alive
非持久连接,Connection: close

注意:在http通信过程中,请求头也是可以自定义的,但是不能出现多字节编码字符,例如中文等。

常见的MIME格式
类型 描述 别名
text/html HTML网页
application/json json文本 text/json
text/plain 纯文本,普通文本
text/xml xml文档
application/javascript js脚本 text/javascript
text/css css样式
image/png png格式图片
image/jpeg jpg格式图片
image/gif gif格式图片
application/x-gzip gzip格式压缩包
application/msword doc文档
application/vnd.openxmlformats-officedocument.wordprocessingml.document docx文档
application/vnd.ms-excel xls文档
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx文档
application/pdf pdf文档
audio/mpeg mp3音频
video/mp4 mp4视频

(3)响应报文

  • HTTP响应报文(HTTP Response)
    • 是服务端在接收理解、处理并返回客户端操作的结果。
    • 主要有三部分组成:
      • 响应行,响应头与响应体。
  • 注意:针对部分请求方法(delete、OPTION、HEAD)的返回结果有时候是没有响应体的。

6

协议版本 响应状态码 响应文本提示                               <-----  http响应的第一行内容,响应行
响应头选项1: 选项值
响应头选项2: 选项值
....
响应头选项n: 选项值

响应体(服务端返回的正文信息,前后必有空行)

响应行

  • HTTP响应行(HTTP Request Line),是HTTP响应报文的首行
  • 由三部分组成,使用单个空格隔开:
    • HTTP协议版本
    • 响应状态码
    • 响应信息。

HTTP协议版本

  • 响应报文的HTTP协议版本,与客户端的协议版本保持一致。
  • 例如:HTTP/1.0,HTTP/1.1。

响应状态码

  • 状态码(Status Code)
    • 用于表达本次服务端在接收客户端请求之后的操作结果的成功或失败结果,由三位整数组成。
状态码类型 描述
1xx 告诉客户端,本次请求,服务端还在持续处理中,并没有结束
2xx 告诉客户端,本次请求,服务端已经接收并成功受理了。
3xx 告诉客户端,服务端位置发生改变,希望客户端重定向访问跳转新的服务器地址进行请求
4xx 告诉客户端,本次请求有误,服务器无法处理。
5xx 告诉客户端,本次请求服务端在处理过程中服务端出错了。
常见的HTTP状态码
状态码 响应信息 描述
101 Switching Protocols 服务器已经理解了客户端的请求,并将通过Upgrade消息头通知客户端采用升级协议来完成请求。
200 OK 请求已成功,请求所希望的响应头或数据体将随此响应返回。出现此状态码是表示正常状态。常用于GET,PUT或PATCH
201 Created 请求已成功,请求的资源已经创建成功或更新完成,常用于POST,PUT或PATCH
204 No Content 请求已成功,但是没有任何内容返回。常用于DEELTE
301 Moved Permanently 永久重定向,表示当前客户端请求的资源地址已经永久发生改变。
302 Move Temporarily 临时重定向,表示当前客户端请求的资源地址还存在,但是访问客户端达不到访问资源的条件,所以暂时无法访问。
304 Not Modified 表示本次客户端请求的资源,并非来自服务端,而是本地缓存。如果web项目有做了客户端缓存,一般静态文件都会出现304
305 Use Proxy 被请求的资源必须通过指定的代理才能被访问。
307 Temporary Redirect 请求的资源临时从不同的URI 响应请求。
400 Bad Request 本次请求,报文语义有误或请求参数有误,当前请求无法被服务器理解。
401 Unauthorized 本次请求,需要需要用户验证,但用户并没有提供认证。
403 Forbidden 服务器已经理解请求,但是拒绝执行它。一般是因为没有权限导致的。
404 Not Found 请求失败,请求所希望得到的资源未被在服务器上发现,请求路径不存在。
405 Method Not Allowed 请求行中指定的请求方法不能被用于请求相应的资源。使用了错误的请求方法。
500 Internal Server Error 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。就是服务端的代码报错了。
502 Bad Gateway 网关宕机,作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。一般就是大量访问请求导致服务器瘫痪或宕机了。
503 Service Unavailable 网关过载,由于临时的服务器维护或者过载,服务器当前无法处理请求。
504 Gateway Timeout 网关超时,作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器或者辅助服务器(例如DNS)收到响应。
507 Insufficient Storage 服务器无法存储完成请求所必须的内容。

响应头

  • HTTP响应头(Response Head),主要是服务器返回的内容进行补充说明,并提供下一次请求的一些辅助信息。
选项 描述
Content-Type 告知客户端,响应数据的MIME类型
Content-Length 告知客户端,响应数据的字节大小
Content-Encoding 告知客户端,响应数据采用的压缩格式
Server 告知客户端,响应服务器的名字或类型
Date 告知客户端,响应请求的时间
Location 告知客户端,实际要请求的资源地址(用于301或302进行页面跳转)
Cache-Control 告知客户端,响应数据的缓存机制
Refresh 告知客户端,要定时刷新的时间间隔
Connection 告知客户端,本次HTTP通信完成以后是否要保持TCP连接。
Transfer-Encoding 告知客户端,数据是以分块方式响应回来的。
Content-Disposition 告知客户端,以下载方式打数据的,格式:Content-Disposition: attachment;filename=文件名
Expires 告知客户端,响应数据的过期事件,-1表示马上过期,客户端不要缓存当前响应数据。
Retry-After 告知客户端,应该在多久之后再次发送请求。常见于服务端限流,或503中。
Access-Control-Allow-Origin 指定客户端通过哪些域名下的脚本可以访问服务器资源。
Access-Control-Allow-Methods 指定客户端通过哪些HTTP请求方法访问服务端资源。
Access-Control-Allow-Headers 指定客户端请求服务器的报文中,允许包含哪些请求头。

标签:协议,HTTP,http,请求,服务器,客户端
From: https://www.cnblogs.com/dream-ze/p/17533967.html

相关文章

  • STP生成树协议
    STP简介STP概述:    生成树协议STP(SpanningTreeProtocol)将环形网络修剪成为一个无环的树型网络,避免报文在环形网络中的增生和无限循环。    在一个复杂的网络环境中,难免会出现环路。由于冗余备份的需要,网络设计者都倾向于在设备之间部署多条物理链路,其中一条......
  • 阿里区块链开放联盟使用http方式对接
    using(HttpClienthttpClient=newHttpClient()){/*所有的步骤实例都得进行http请求,当前demo中我的请求放在最后,只是一步一步的流程进行开发*/SendEntityentity=newSendEntity();#region步骤一:调用合约接口,将数据上链操作成功实现合约调用的列子(目前注释......
  • 2. HTML 进阶之HTTP请求
    1)请求组成请求由三部分组成请求行请求头请求体可以用telnet程序测试2)请求方式与数据格式get请求示例GET/test2?name=%E5%BC%A0&age=20HTTP/1.1Host:localhost%E5%BC%A0是【张】经过URL编码后的结果post请求示例POST/test2HTTP/1.1Host:localho......
  • java http大文件断点续传上传问题
    ​ 这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数下面直接贴代码吧,一些难懂的我大部分都加上注释了:上传文件实体类:看得出来,实体类中已经有很多我们需要的功能了,还有实用的属性。如MD5秒传的信息。pub......
  • java中http请求-okhttp使用连接池优化
    愿历尽千帆,归来仍是少年原因:避免频繁频繁的开关连接。1.Maven添加依赖<dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>3.10.0</version></dependency>2.OkHttpConfiguration配置类......
  • java http大文件断点续传上传功能
    ​ 我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用。这次项目的需求:支持大文件的上传和续传,要求续传支持所有浏览器,包括ie6,ie7,ie8,ie9,Chrome,Firefox,360安全浏览器,并且刷新浏览器后仍然能够续传,重启浏览器(关闭......
  • 常见抓包工具配置抓取HTTPS
    一、wireshark抓取https1.配置SSLKEYLOGFILE环境变量2.关闭Chrome浏览器后重新打开,确认sslkey.log文件已经添加3.配置wireshark  编辑–首选项–protocols–TLS4.开启wireshark抓包 二、Fiddler抓取https 1.Fiddler配置点击Tools>Options>HTTPS,勾选Decry......
  • C# .NET HttpWebRequest 显示指定SSL TLS 版本
    C#.NETHttpWebRequest显示指定SSLTLS版本 在程序启动时加入这段代码:ServicePointManager.SecurityProtocol=SecurityProtocolType.Ssl3|SecurityProtocolType.Tls|SecurityProtocolType.Tls11|SecurityProtocolType.Tls12; ServicePointManager.SecurityProto......
  • Jmeter学习之六_进行https证书处理的工作
    Jmeter进行https证书处理的工作背景继续学习中,想着能够抓取一下https相关的信息所以计划些一下处理过程但是感觉自己这一块比较薄弱.场景设计这一块应该是专业人去搞,我这边先只是简单学习了解一下.创建证书要使用keytool工具创建证书打开终端或命令提示符,并转......
  • aiohttp模块引出_aiohttp+多任务异步协程实现异步爬虫
    1.为什么要用aiohttp模块引出: 2.异步模块aiohttp对比requests基于同步的区别: 3.需要在response.text()前面添加await进行手动挂起: 4.response.text()前面一定要添加await再次运行程序告警取消: 5.异步爬虫get或post中写入的参数: ......