HTTP协议详解
来源:互联网 发布:python入门 编辑:程序博客网 时间:2024/05/16 04:56
一、HTTP协议简介
HTTP协议,即超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是互联网上应用最为广泛的一种网络协议。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。通过HTTP或者HTTPS协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。HTTP是一个客户端和服务器端请求和应答的标准。
HTTP的大致工作流程如下图所示:
二、HTTP协议的报文结构
HTTP有两类报文:
(1)请求报文——从客户端向服务器发送请求报文
(2)响应报文——从服务器到客户的应答。
如下图所示,请求报文和响应报文都是由三个部分组成,两种报文的区别主要就是开始行不同。
1、开始行
请求报文的开始行叫做请求行,主要有三个内容:方法、请求资源的URL以及HTPP协议的版本。
响应报文的开始行叫做状态行,主要有三个内容:HTTP协议的版本、状态码以及解释状态码的简要短语。
2、首部行
首部行用来说明浏览器、服务器或报文主体的一些信息,可以有多行。
3、实体主体
在请求报文中一般都不使用这个字段;在响应报文中,实体主体用来包含响应内容,但响应报文中也有可能没有这个字段。
三、HTTP协议的请求方法
HTTP/1.1协议中共定义了八种方法(也叫“动作”)来以不同方式操作指定的资源:
(1)OPTIONS:
这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用'*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。
(2)HEAD:
(3)GET与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。
(4)POST:向指定的资源发出“显示”请求。使用GET方法应该只用在读取数据,而不应当被用于产生“副作用”的操作中,例如在Web Application中。其中一个原因是GET可能会被网络蜘蛛等随意访问。
向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。
(5)PUT:
向指定资源位置上传其最新内容。
(6)DELETE:
请求服务器删除Request-URI所标识的资源。
(7)TRACE:
回显服务器收到的请求,主要用于测试或诊断。
(8)CONNECT:
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。
四、HTTP协议的状态码
状态代码的第一个数字代表当前响应的类型:
1xx消息——请求已被服务器接收,继续处理
2xx成功——请求已成功被服务器接收、理解、并接受
3xx重定向——需要后续操作才能完成这一请求
4xx请求错误——请求含有词法错误或者无法被执行
5xx服务器错误——服务器在处理某个正确请求时发生错误
五、HTTP1.1和HTTP1.0的区别
HTTP1.0请求一个万维网文档所需时间如下图所示:
HTTP1.0每请求一次文档,就需要有两倍的RTT开销。另外,每一次请求都需要重新建立TCP连接,增加万维网服务器的负担。在HTTP1.0中,每对Request/Response都使用一个新的连接。
HTTP 1.1则支持持续连接(Persistent Connection), 并且默认使用持续连接。所谓持续连接,就是万维网服务器在发送响应之后的一段时间内保持这条TCP连接,使同一个客户和该服务器可以继续在这条连接上传送HTTP报文。
HTTP1.1工作方式分为两种:非流水线方式和流水线方式。非流水线方式在发送完一个请求之后需要收到响应才能继续发送另外的请求。而流水线方式在同一个TCP的连接中可以传送多个HTTP请求和响应.,多个请求和响应可以重叠,多个请求和响应可以同时进行。
HTTP1.0和HTTP1.1主要区别如下:
(1)同一个TCP的连接中可以传送多个HTTP请求和响应,多个请求和响应可以重叠,多个请求和响应可以同时进行。
(2)更加多的请求头和响应头(比如HTTP1.0没有host的字段)。Connection请求头的值为Keep-Alive时,客户端通知服务器返回本次请求结果后保持连接;Connection请求头的值为close时,客户端通知服务器返回本次请求结果后关闭连接。HTTP 1.1还提供了与身份认证、状态管理和Cache缓存等机制相关的请求头和响应头。
六、HTTP怎么处理长连接
HTTP1.1使用首部的Connection: Keep-alive来保持长连接,通过Keep-alive:20来时设置长连接时间,如下图所示:
参考文献:
1、HTTP协议解析 http://blog.csdn.net/daniel_ustc/article/details/17955005
2、HTTP协议简介
http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386832653051fd44e44e4f9e4ed08f3e5a5ab550358d000
3、HTTP详解(3)-http1.0 和http1.1 区别 http://blog.csdn.net/hguisu/article/details/8608888
4、HTTP 1.1与HTTP 1.0的比较 http://blog.csdn.net/elifefly/article/details/3964766
5、HTTP的长连接和短连接 http://www.cnblogs.com/cswuyg/p/3653263.html
- 【http】http协议详解
- 网络协议-HTTP协议详解
- HTTP协议-http事务详解
- HTTP协议详解----HTTP消息
- Http协议详解
- HTTP协议详解
- HTTP协议头详解
- HTTP协议头详解
- HTTP协议详解
- HTTP协议详解
- http协议详解
- HTTP协议详解
- HTTP协议详解
- HTTP协议详解
- HTTP协议详解
- HTTP协议详解
- HTTP协议详解
- HTTP协议详解
- visual studio生成自己的动态静态链接库
- 配置iis支持.json格式的文件
- 用户界面(人机界面)
- UVA 10192 - Vacation(最长公共子序列)
- [Getting and Cleaning data] Week 1
- HTTP协议详解
- 我们在路上
- [VBA]读取文件常用的方法(ADODB.recordSet|ADODB.stream)(大文件读取&指定encode)
- SVN版本控制(三)--权限管理
- JSP的一些笔记
- 人工智能除了下围棋还能干啥?
- python_dict字典常用函数小结
- CSS学习笔记(二):选择器
- 第二次c++上机实验