HTTP协议的那些事

HTTP协议

简介

超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。

概述

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

基于 请求——响应 模式

**无状态保存。**HTTP是一种不保存状态,即无状态(stateless)协议。HTTP协议 自身不对请求和响应之间的通信状态进行保存。也就是说在HTTP这个 级别,协议对于发送过的请求或响应都不做持久化处理。

HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。通过使用网页浏览器、网络爬虫或者其它的工具,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80)。我们称这个客户端为用户代理程序(user agent)。应答的服务器上存储着一些资源,比如HTML文件和图像。我们称这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个“中间层”,比如代理服务器、网关或者隧道(tunnel)。
HTTP可以在任何互联网协议上,或其他网络上实现。

工作原理

HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。

HTTP 请求/响应的步骤:

1、客户端连接到Web服务器。

  • 一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。

2、发送HTTP请求。

  • 通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。
    3、服务器接收请求并返回HTTP响应。
  • Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
    4、释放连接TCP连接。
  • 若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求。
    5、客户端浏览器解析HTML内容。
  • 客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

举例:在浏览器地址栏键入URL,按下回车之后会经历以下流程:

1、浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
2、解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;
3、浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
4、服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
5、释放 TCP连接;
6、浏览器将该 html 文本并显示内容;

请求方法

在这里插入图片描述

HTTP/1.1协议中共定义了八种方法(也叫“动作”)来以不同方式操作指定的资源:

  • GET

向指定的资源发出“显示”请求。使用get方法应该只用在读取数据,而不应当被用于产生“副作用”的操作中,例如在web application中。其中一个原因是GET可能会被网络蜘蛛等随意访问。

当点击网页上的链接或者同过在浏览器的地址栏输入网址来浏览网页的,使用的都是GET方式。

GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456.。

  • HEAD

与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。

常用于测试超链接的有效性,是否可以访问,以及最近是否更新。所以当我们只需要查看某个页面的状态的时候,使用HEAD是非常高效的。

  • POST

向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。

POST方法是把提交的数据放在HTTP包的Body中.

  • PUT

向指定资源位置上传其最新内容。

  • DELETE

请求服务器删除Request-URI所标识的资源。

  • TRACE

回显服务器收到的请求,主要用于测试或诊断。

  • OPTIONS

这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用’*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。

  • CONNECT

HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。

关于HTTP请求GET和POST的区别

1、提交形式:

  • GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456。
  • POST方法是把提交的数据放在HTTP包的Body中。

2、传输数据的大小:
HTTP协议本身没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。 而在实际开发中存在的限制主要有:

  • GET:特定浏览器和服务器对URL长度有限制,例如IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。
    因此对于GET提交时,传输数据就会受到URL长度的限制。
  • POST:由于不是通过URL传值,理论上数据不受限。但实际各个WEB服务器会规定对post提交数据大小进行限制,Apache、IIS6都有各自的配置。

3、安全性:
POST的安全性要比GET的安全性高,具有真正的Security的含义。而且通过GET提交数据,用户名和密码将明文出现在URL上,因为登录页面有可能被浏览器缓存,其他用户浏览历史纪录就可以拿到账号和密码了。

状态码

所有HTTP响应的第一行都是状态行,依次是当前HTTP版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。

状态代码的第一个数字代表当前响应的类型:

  • 1xx消息——请求已被服务器接收,继续处理
  • 2xx成功——请求已成功被服务器接收、理解、并接受
  • 3xx重定向——需要后续操作才能完成这一请求
  • 4xx请求错误——请求含有词法错误或者无法被执行
  • 5xx服务器错误——服务器在处理某个正确请求时发生错误

在这里插入图片描述
常用状态码:

状态码描述
200 OK成功返回状态,对应,GET,PUT,PATCH,DELETE。
201 created成功创建
302 Found重定向,新的URL会在response中的Location中返回,浏览器将会使用新的URL发出新的Request。例如在IE中输入http://www.google.com. HTTP服务器会返回304, IE取到Response中Location header的新URL, 又重新发送了一 个 Request。
304 Not Modified代表上次的文档已经被缓存了, 还可以继续使用。
400 bad request请求格式错误。
401 unauthorized未授权。
403 forbidden鉴权成功,但是该用户没有权限。
404 not found请求的资源不存在。
405 method not allowed该http方法不被允许。
410 gone这个url对应的资源现在不可用。
415 unsupported media type请求类型错误。
422 unprocessable entity校验错误时用。
429 too many request请求过多。
500 Internal Server Error服务器发生了不可预期的错误。
503 Server Unavailable服务器当前不能处理客户端的请求,一段时间后可能恢复正常。

请求格式

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

响应格式

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

Session和Cookie

  • Session

Session是可以存储针对于某一个用户的浏览器以及通过其当前窗口打开的任何窗口具有针对性的用户信息存储机制。
通常大家认为,只要关闭浏览器,session就消失,其实这是错误的理解。对session来说也是一样的,除非程序通知服务器删除一个session,否则服务器会一直保留。由于关闭浏览器不会导致session被删除,迫使服务器为seesion设置了一个失效时间,当距离客户端上一次使用session的时间超过这个失效时间时,服务器就可以认为客户端已经停止了活动,才会把session删除以节省存储空间.

  • (1)第一次访问某个web站点资源时,客户端提交没有带SessionID的请求(请求报文头没有Cookie头域信息)。
    而web服务器会检查是否有SessionID过来,没有则创建SessionID,并根据web程序自身定义在请求哪个资源时添加属于当前会话的信息(也可为空),这个信息列表以SessionID作为标识。然后将SessionID返回给客户端(通过响应报文头的Set-Cookie头域)。
  • (2 )客户端再次访问同个web站点时,提交带有SessionID的请求(通过Cookie头域存储SessionID)。由服务端判断session是否失效,如果未失效,可查询属于当前会话的信息列表。如果失效,则创建新的session(产生新的SessionID),而原先的session(包含session带的信息列表)则丢失,无法访问。
  • Cookie

保存SessionID的方式可以采用Cookie,这样在交互过程中浏览器可以自动的按照规则把这个SessionID发回给服务器。Cookie的命名方式类似于SessionID。有时Cookie被人为的禁止,所以出现了其他机制以便在Cookie被禁止时仍然能够把SessionID传递回服务器。这种技术叫做URL重写,就是把SessionID直接附加在URL路径的后面,附加方式也有两种,一种是作为URL路径的附加信息,表现形式为http://www.wantsoft.com/index.asp;jsessionid= ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764 。
另一种是作为查询字符串附加在URL后面,表现形式为http://www.wantsoft.com/index?js … 99zWpBng!-145788764 。

参考文章地址:
HTTP协议超级详解
常见网络协议

### 回答1: 嵌入式网络的发展从最初的以太网、TCP/IP 协议到目前较为流行的 lwIP 协议,让嵌入式设备的网络通信得到了更好的支持。LwIP 是 Lightweight Internet Protocol 的缩写,它的设计目标是在有限的 RAM 和 ROM 环境下实现 TCP/IP 通信,能够很好地满足嵌入式设备的要求。 LwIP 协议的深度剖析包括了其结构和原理的讲解,其中重点包括网络协议栈的实现和控制器驱动等。控制器驱动的实现主要是通过对 LwIP 标准 API 的实现来进行,如 socket、netif 和 TCP 等,同时还包括与网卡底层硬件的接口。 LwIP 协议的实战演练主要是通过实际的开发案例来展示,内容包括 TCP、UDP、DNS、DHCP、HTTP 等各种常用协议的实现和应用。在实战演练中,除了涉及到软件设计和开发之外,还需要考虑如何更好地与硬件进行通信。因此,在演示过程中,需要充分了解硬件规格和控制器的特点,以便更好地进行协议的实现和测试。 总之,通过对 LwIP 协议的深度剖析和实战演练,嵌入式设备的网络通信能够得到更好的支持和实现,这对于嵌入式系统的开发和应用来说具有重要的意义。 ### 回答2: 嵌入式网络是指以嵌入式系统为基础,利用各种网络技术使其可以联网互联,并进行数据交换、传输和处理的一种应用形态。其中,lwip协议作为嵌入式网络的基础协议之一,具有简单、轻量、快速的特点,被广泛应用于各种嵌入式系统中。 lwip协议深度剖析与实战演练需要重点关注lwip的体系结构、协议栈、数据结构、API函数等方面的内容。其中,lwip的协议栈主要分为数据链路层、网络层、传输层和应用层,需要了解各层之间的关系和实现原理。同时,lwip还采用了一系列数据结构,如缓冲区、队列、链表等,需要深入理解其用途和实现方法。 在实战演练中,需要通过具体的案例和实验来体验lwip协议在实际应用中的优势和问题。例如,可以以Web服务器的方式来实现网络应用,并通过Http协议进行访问和交互,从而深入了解lwip协议在网络应用方面的应用。 总之,深入理解lwip协议的原理和实现方法,并通过实战演练来提高对lwip在嵌入式网络中的应用能力,对于嵌入式系统的网络应用开发和实现具有重要的意义和价值。 ### 回答3: 嵌入式网络是嵌入式系统的一部分,它充当系统的通信媒介。lwip协议则是一种轻量级的网络协议栈,在嵌入式系统中占据重要地位。本文将对lwip协议进行深入剖析,介绍其实现原理和实践应用。 lwip协议栈的实现非常精简,仅包含了TCP/IP协议栈的核心部分。在内存消耗和CPU负载方面,它相当节省资源。因此,lwip被广泛应用在各种嵌入式系统中,包括工业自动化、智能家居、车载系统,等等。 lwip的实现基于件驱动的机制,采用了轻量级的线程模型。它使用了一系列的回调函数,以处理不同的网络件。我们可以通过修改这些回调函数来实现对lwip的个性化定制。 lwip协议在实践应用中有诸多的优势。首先,它具有高可靠性,能够保证传输数据的正确性和稳定性。其次,lwip的实现非常灵活,适应了不同嵌入式系统的需求。此外,使用lwip也能够提高系统的网络性能,实现更高效的数据传输和更快的响应速度。 总之,lwip协议作为一种轻量级的网络协议栈,在嵌入式网络开发中扮演着重要的角色。通过深度剖析及实践应用,开发者不仅能够深入了解其原理和工作方式,还可以灵活应用在不同的嵌入式系统中,提高系统的性能和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值