HTTP协议理解

来源:互联网 发布:单片机如何烧程序 编辑:程序博客网 时间:2024/06/07 12:05

HTTP协议简介

HTTP协议即超文本传输协议(Hyper Text Transfer Protocol)。它用于浏览器从Internet服务器获取超文本的传送协议。它已经是互联网上应用最为广泛的一种协议,平常上网浏览网页都离开不了它。

HTTP基于TCP/IP通信协议来传输数据,这些数据包括HTML , 图片以及其它格式数据等)。

HTTP凌驾于TCP/IP之上,是一个专注于应用层来制定相关数据传送标准(格式)的面向对象的协议。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展,目前最为广泛使用的为HTTP/1.1版本。

HTTP协议基于客户端-服务端的架构。通常浏览器作为HTTP客户端通过URL向HTTP服务端发送请求;服务器根据接收到的请求后,向客户端发送响应信息。

特点

1、支持客户/服务器模式,支持基本认证和安全认证。
2、简单快速:客户端只需向服务端传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
3、灵活:HTTP允许传输任意类型的数据对象。传输的类型由Content-Type加以标记。
4、HTTP 0.9和1.0使用非持续连接:限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接。HTTP 1.1使用持续连接:不必为每个web对象创建一个新的连接,一个连接可以传送多个对象,采用这种方式可以节省传输时间。
5、无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大

请求响应流程

1)首先客户端面与服务器需要建立连接。
2)建立连接后,客户端面发送一个请求给服务器,格式为:请求方式+统一资源标识符(URL)+协议版本号+请求报头+请求消息体。
3)服务器接到请求后,给予相应的响应信息,其格式为:状态行+协议版本号+响应报头+响应消息体
4)客户端通常是浏览器解析返回的响应把结果展示出来,然后断开连接。

三次握手

上面已经说过HTTP是基于TCP传输层协议,TCP是一个端到端的面向连接的协议,可以理解为进程之间的通信。所以在HTTP真正开始传输数据之前,首先要建立好TCP连接,而TCP的连接需要“三次握手”。如下图所示:
这里写图片描述
注:HTTP在传输完成后并不需要断开TCP连接。在HTTP1.1中(通过Connection: keep-alive设置)这是默认行为。

请求

请求信息格式如下:

  • 请求行:例如GET /index.html HTTP/1.1,表示请求index.html这个文件
  • 请求头:例如Accept-Language: en
  • 空行
  • 可选的消息体:请求行和标题必须以作为结尾(也就是,回车然后换行)。空行内必须只有而无其他空格。在HTTP/1.1协议中,所有的请求头,除post外,都是可选的。

三个部分分别是:请求行、消息报头、请求正文。

响应

响应格式如下:
HTTP-Version 空格 Status-Code 空格 Reason-Phrase CRLF
HTTP- Version表示HTTP版本,例如为HTTP/1.1。Status- Code是结果代码,用三个数字表示。Reason-Phrase是个简单的文本描述,解释Status-Code的具体原因。Status-Code用于机器自动识别,Reason-Phrase用于人工理解。Status-Code的第一个数字代表响应类别,可能取5个不同的值。后两个数字没有分类作用。Status-Code的第一个数字代表响应的类别,后续两位描述在该类响应下发生的具体状况。

三个部分分别是:状态行、消息报头、响应正文。

状态码分类

1** 信息,服务器收到请求,需要请求者继续执行操作
2** 成功,操作被成功接收并处理
3** 重定向,需要进一步的操作以完成请求
4** 客户端错误,请求包含语法错误或无法完成请求
5** 服务器错误,服务器在处理请求的过程中发生了错误

请求方法

请求行中首先需要声明的就是请求方法。
HTTP/1.1协议中共定义了八种方法(有时也叫“动作”)来表明Request-URI指定的资源的不同操作方式:
OPTIONS - 返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送’*’的请求来测试服务器的功能性。
HEAD- 向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。该方法常用于测试超链接的有效性,是否可以访问,以及最近是否更新。
GET - 向特定的资源发出请求。
POST - 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
PUT - 向指定资源位置上传其最新内容。
DELETE - 请求服务器删除Request-URI所标识的资源。
TRACE- 回显服务器收到的请求,主要用于测试或诊断。
CONNECT - HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
PATCH - 用来将局部修改应用于某一资源,添加于规范RFC5789。
方法名称是区分大小写的。当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Method Not Allowed);当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented)。
HTTP服务器至少应该实现GET和HEAD方法,其他方法都是可选的。此外,除了上述方法,特定的HTTP服务器还能够扩展自定义的方法。

GET与POST区别

1、GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中。
2、GET提交的数据大小有限制,最多只能有1024字节(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制。
3、GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。
4、GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码。

以上已经写了不少HTTP协议的方面,相信大家读后能有所了解!

原创粉丝点击