首页 > 其他分享 >http协议

http协议

时间:2024-02-16 10:13:55浏览次数:21  
标签:协议 HTTP 请求 服务器 http 客户端

 

简介

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于万维网(WWW : World Wide Web )服务器与本地浏览器之间传输超文本的传送协议。

HTTP是应用层的协议之一,它是一种简单、灵活的通信协议,客户端(浏览器)通过URL地址基于http协议访问服务器,服务器收到请求后基于http协议将响应的内容返回给客户端。

 

http协议特性

(1) 基于TCP/IP协议

HTTP协议是基于TCP/IP协议之上的应用层协议。

HTTP是通过 Socket 来使用 TCP 的,Socket 做为套接层 API,它本身不是协议,只规定了 API。


(2) 基于请求(request)-响应(response)模式

HTTP协议规定,请求从客户端发出,最后服务器端处理请求并返回,就是说,有请求,就要有应答。另外,服务端在接收到请求之后才会发送响应。


(3) 无状态保存

HTTP是一种不保存状态,即无状态(stateless)协议。

HTTP协议自身不对请求和响应之间的通信状态进行保存。协议本身并不保留之前每次的请求或响应报文的信息。这是为了更快地处理大量事务,确保协议的可伸缩性,而特意把HTTP协议设计成 如此简单的。

为了弥补这个缺陷,后续引进了cookie、session、token等相关技术手段(业务相关)。

(4) 短连接

HTTP1.0默认使用的是短连接(有的资料也说是无连接的协议)。浏览器和服务器每进行一次HTTP通信,就建立一次tcp连接,通信结束就断开tcp连接;

HTTP/1.1起,默认使用长连接。要使用长连接,客户端和服务器的HTTP首部的Connection都要设置为keep-alive才能支持长连接。HTTP长连接,指的是复用TCP连接。多个HTTP请求可以复用同一个TCP连接(一个http请求在完成时,标注是keep-alive的,底层的tcp连接不需要断开,可以供多个http连接使用),这就节省了TCP连接建立和断开的消耗;

HTTP/2.0,多路复用。

 

http请求协议与响应协议

http协议包含(两个部分):

  http request:由浏览器发送数据到服务器需要遵循的请求协议,http请求包含三个部分:request line、 request header、 request body;已经由浏览器或者其它客户端工具帮我们封装好了

  http response:服务器发送数据到浏览器需要遵循的请求协议,http响应包含三个部分:response line、 response header、 response body。

 

演示代码

server.py

import socket

# 创建TCP Socket对象;括号中的实参是默认值,可以简写为:sock = socket.socket()
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定IP地址和端口号
host = '127.0.0.1'
port = 8089
sock.bind((host, port))

# 开始监听连接
sock.listen(5)
print('等待客户端连接...')

while True:
    # 接受客户端连接并返回新的Socket对象
    conn, addr = sock.accept()  # 阻塞等待客户端连接

    # print('与客户端', addr[0], '建立了连接!')

    # 接收客户端发送的请求数据,接收最多4096字节大小的请求数据,然后将其转换成UTF-8编码格式的字符串
    data = conn.recv(4096)
    # data = conn.recv(4096).decode("utf-8")
    print('接收到的请求数据为:', data)

    # 服务端返回数据
    conn.send('HTTP/1.1 200 ok\r\nserver:qzcsbj\r\ncontent-type:application/json\r\n\r\n{"code":0,"message":"success","data":{"id":"1","name":"韧"}}'.encode("utf-8"))

    print('返回数据给客户端完成')

    # 关闭当前客户端连接
    conn.close()

 

HTTP请求协议

用jmeter发送请求

 

server端打印内容

 

接收到的请求信息decode后打印

 

HTTP请求协议:request line、 request header、 request body

请求首行、请求头、请求体

POST /v2/user/findByName?name=ren HTTP/1.1
Connection: keep-alive
Content-Type: application/json
Content-Length: 4
Host: 127.0.0.1:8089
User-Agent: Apache-HttpClient/4.5.7 (Java/1.8.0_211)
空行
id=1

 

 

HTTP响应协议

用浏览器发送请求

 

 

 

HTTP响应协议:response line、 response header、 response body

响应首行、响应头、响应体

HTTP/1.1 200 ok
server:qzcsbj
content-type:application/json
空行
{"code":0,"message":"success","data":{"id":"1","name":"韧"}

 

 

另外,下面是浏览器给我们封装的请求协议:

\r\n\r\n表示空行,后面内容,因为get请求没有请求体,参数在路径后面

decode后打印结果

 

补充:response code

  响应代码,又叫状态码。是服务器用来告知客户端,对于请求的处理状态的。响应代码通常是三位长度的数字,一般来说根据首位字母进行的大致分类。

  1xx:通常表示通信连接过程中的交互信息

  2xx:典型的就是200,表示处理成功;200只是表示http协议层面的成功,不一定表示业务成功

  3xx:通常表示重定向

  4xx:客户端错误。400 就是客户端发送的数据有误;403 客户端的权限问题;404 资源未找到。

  5xx:服务器错误

 

其它参考:

1xx(临时响应),并需要请求者继续执行操作的状态代码
100:客户端应当继续提出请求。服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。
101:(切换协议) 客户端要求服务器切换协议,服务器已确认并准备进行切换。
102:由WebDAV(RFC 2518)扩展的状态码,代表处理将被继续执行。


2xx(成功),处理了请求的状态代码
200:正确的请求返回正确的结果,如果不想细分正确的请求结果都可以直接返回200。
201:表示资源被正确的创建。比如说,我们 POST 用户名、密码正确创建了一个用户就可以返回 201。
202:请求是正确的,但是结果正在处理中,这时候客户端可以通过轮询等机制继续请求。
203:请求的代理服务器修改了源服务器返回的 200 中的内容,我们通过代理服务器向服务器 A 请求用户信息,服务器 A 正常响应,但代理服务器命中了缓存并返回了自己的缓存内容,这时候它返回 203 告诉我们这部分信息不一定是最新的,我们可以自行判断并处理。
204:服务器成功处理了请求,但是不需要返回任何实体内容。如果客户端为浏览器,则浏览器不发生跳转,停留当前页面,但是页面中的文档信息更新。
205:服务器成功处理了请求,且没有返回任何内容,与204不同点为,文档信息清空。
206:服务器已成功处理了部分get请求。请求里必须包含Range头信息来只是客户端希望得到的内容范围,并且可能包含if-Range来作为请求条件。
207:由WebDAV(RFC 2518)扩展的状态码,代表之后的消息体将是一个XML消息,并且可能依照之前子请求数量的不同,包含一系列独立的响应代码。


3xx(已重定向),表示要完成请求,需要进一步操作
300:请求成功,但结果有多种选择。
301:请求成功,但是资源被永久转移。比如说,我们下载的东西不在这个地址需要去到新的地址。
302:在其他地址发现了请求数据。
303:使用 GET 来访问新的地址来获取资源。
304:请求的资源并没有被修改过。
305:请求的资源必须从服务器指定的地址得到。
306:在最新的规范中,306状态码已不被使用。
307:请求的资源现在临时从不同的URI 响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。
308:使用原有的地址请求方式来通过新地址获取资源。


4xx(请求错误)
400(错误请求)表示客户端请求的语法错误,服务器无法理解,例如 url 含有非法字符、json 格式有问题。
401(未授权)请求要求身份验证。对于需要登录的网页,服务器可能返回此响应。
402表示保留,将来使用。
403(禁止)表示服务器理解请求客户端的请求,但是拒绝请求。
404(未找到)服务器无法根据客户端的请求找到资源(网页)。
405(方法禁用)禁用请求中指定的方法。
406(不接受)无法使用请求的内容特性响应请求的网页。
407(需要代理授权)此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。
408(请求超时)服务器等候请求时发生超时。
409(冲突)服务器在完成请求时发生冲突。服务器必须在响应中包含有关冲突的信息。
410(已删除)如果请求的资源已永久删除,服务器就会返回此响应。
411(需要有效长度)服务器不接受不含有效内容长度标头字段的请求。
412(未满足前提条件)服务器未满足请求者在请求中设置的其中一个前提条件。
413(请求实体过大)表示响应实在太大。服务器拒绝处理当前请求,请求超过服务器所能处理和允许的最大值。
414(请求的 URI 过长)请求的 URI(通常为网址)过长,服务器无法处理。
415(不支持的媒体类型)请求的格式不受请求页面的支持。
416(请求范围不符合要求)如果页面无法提供请求的范围,则服务器会返回此状态代码。
417(未满足期望值)在请求头 Expect 指定的预期内容无法被服务器满足(力不从心)。
418表示我是一个茶壶。超文本咖啡馆控制协议,但是并没有被实际的 HTTP 服务器实现。
420表示方法失效
422表示不可处理的实体。请求格式正确,但是由于含有语义错误,无法响应。


5xx(服务器错误)
500(服务器内部错误)服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。
501(尚未实施)服务器不具备完成请求的功能。例如,服务器无法识别请求方法时可能会返回此代码。
502(错误网关)服务器作为网关或代理,从上游服务器收到无效响应。
503(服务不可用)服务器目前无法使用(由于超载或停机维护)。通常,这只是暂时状态。
504(网关超时)服务器作为网关或代理,但是没有及时从上游服务器收到请求。
505(HTTP 版本不受支持)服务器不支持请求中所用的 HTTP 版本。

 

补充:URL的构成

URL包含:协议、域名、端口、path(URI)、URL地址参数

URL(uniform resource locator,统一资源定位器)是URI的一种实现,URI是URL的一部分

URI(uniform resource identifier,统一资源标识符)是抽象概念

 

比如:http://www.qzcsbj.com:8089/v2/user/findByName?name=ren

协议是:http

域名是:www.qzcsbj.com,域名解析为ip,通过ip找到接入到网络中的硬件服务器

端口是:8089,通过端口号找到运行在硬件服务器中的软件服务

路径是:/v2/user/findByName

参数是:name=ren

 

标签:协议,HTTP,请求,服务器,http,客户端
From: https://www.cnblogs.com/uncleyong/p/18015084

相关文章

  • 频繁调一个http请求和多个不同http请求性能一样吗
    在讨论频繁调用一个HTTP请求和多个不同HTTP请求的性能时,我们需要考虑几个关键因素,包括网络延迟、服务器处理能力、请求的复杂性以及网络带宽等。在某些情况下,频繁调用一个HTTP请求可能和多个不同HTTP请求具有相似的性能,但在其他情况下,这两种做法可能会产生截然不同的结果。以下是......
  • Tauri http/https混用导致的请求失败的问题
    vite方案因为在项目里是需要使用http请求的,如果进行发布就会发现他的内置协议是https,导致http的请求发不出方案使用插件https://github.com/tauri-apps/plugins-workspace/tree/v1/plugins/localhost注意,我发现会闪退,文档上的例子去掉setup就好了(不知道为啥)路径:src......
  • 01 \| 网络互联的昨天、今天和明天:HTTP 协议的演化
    作者:四火你好,我是四火。HTTP协议是互联网基础中的基础,和很多技术谈具体应用场景不同的是,几乎所有的互联网服务都是它的应用,没有它,互联网的“互联”将无从谈起,因此我们把它作为正式学习的开篇。说到其原理和协议本身,我相信大多数人都能说出个大概来,比如,有哪些常见的方法,常......
  • 02 \| 为HTTP穿上盔甲:HTTPS
    作者:四火完成时间:总结时间:你好,我是四火。在上一讲中,我介绍了互联网最重要的HTTP协议。可是随着互联网的发展,你会发现HTTP越来越无法满足复杂的需求,比如数据加密传输的安全性需求,再比如服务器消息即时推送的交互模式的需求,而这些不适性是由HTTP的基本特性所造成的......
  • 验证:web应用程序要遵循http协议
     说明webserver响应的格式必须要遵循http响应协议,否则浏览器或者其它客户端工具不能解析响应,而http请求协议已经由浏览器或者其它客户端工具帮我们封装好了。这里我们直接通过socket写一个简单的server来演示。 get请求server.pyimportsocketimporttime#创建TCP......
  • 十八、Django之Http
    1、Django请求的生命周期请求响应Http1、发送Http请求请求头(包含Cookie)\r\n\r\n请求体2、服务器请求,根据请求头中的url在路由关系表中进行匹配(从上到下)3、匹配成功后,执行指定的views函数a.Url->函数==>FBVb.Url->类==>CBV4、响应内......
  • 网络游戏协议测试(接口测试)的一些总结
    什么是游戏协议?协议是网络游戏前后端交互的实现方式。游戏中协议的收发过程是怎样的?当我们在进行游戏的时候,我们点击了某个按钮进行某一种游戏行为,这个时候,客户端会按照跟服务器约定好的一些规则,将我们的游戏行为对应的请求和参数通过网络封包发送给服务器,服务端在收到这个......
  • pixel2 Android11 Https 抓包记录
    关键词:pixel2Android11MagiskhttpcanaryHttps最近需要抓HTTPS,手里设备有pixel2,4,6都是高版本。查找了下资料,配置环境,记录下。前置条件1.设备一台已Root,Magisk方案需要物料:1.winadb环境。参见:https://www.cnblogs.com/myred/p/14506909.html2.winopenssl环境。......
  • http和https
    一、HTTP和HTTPS的基本概念1、HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。2、HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加......
  • http协议
    HTTP协议是互联网的基石,被广泛用于互联网中,我们所访问的网页都是通过HTTP协议传输的。不管是直接在浏览器里输入url,还是通过页面点击跳转,还或是通过JS等客户端发送请求,都会将这一请求封装成HTTP协议,发送到web服务器上。web服务器收到HTTP请求,再进行相应的处理,将返回数据封装程HTT......