略说http协议(一:http历史及http基础)
来源:互联网 发布:sql注入 or 1 1 编辑:程序博客网 时间:2024/05/29 18:02
本文章是读《图解http》之后的记录,文章的内容在此书中都可找到
历史
HTTP于1990年诞生,此时的HTTP尚未作为正式的标准建立,这时的HTTP被称为HTTP/0.9.HTTP作为标准被公布是在1996年,其被正式命名为HTTP/1.0。而后1997年公布的HTTP/1.1是目前主流的HTTP协议版本。HTTP至今没有怎么更新,显著用的最多的是是HTTP/1.1.
理解TCP/IP
什么是TCP/IP
我们的网络是运行在TCP/IP协议族的,而HTTP协议是其内部的一个子集,TCP/IP是互联网相关的各类协议族的总称,包括了众多内容,其中包括TCP,IP,DNS,UDP,ICMP等等。
TCP/IP的分层管理
TCP/IP协议族按层次分为四个层次,分别是应用层,传输层,网络层,和数据链路层。下面分别介绍
应用层
应用层决定了想用户提供应用服务时通信的活动,次层中有FTP(文件传输协议),和DNS(域名系统),HTTP等。
传输层
传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。
网络层(网络互连层)
网络层用来处理在网络上流动的数据包,数据包是数据传输的最小数据单位,该层规定了通过怎么样的路径到达对方计算机,并将数据包传送给对方。
链路层(数据链路层,网络接口层)
用来处理连接网络的硬件部分,包括控制操作系统、硬件的设备驱动,NIC(网卡),及光纤等物理设备。
TCP/IP通信传输流
图片来源TCP/IP 通信传输流,侵删。
在进行网络通信时,会通过分层顺序与对方进行通信,发送端从应用层往下走,接受层从应用层往上走。
我们模拟一下数据传输的过程,首先作为发送端的客户端在应用层发出一个想看到某个Web页面的HTTP请求。然后传输层把从应用层处收到的数据进行分割,并在各个报文上打上标记序号及端口号转发给网络层。在网络层,增加作为通信目的地的MAC地址后转发给链路层,这样发送端的工作就完成了。接受端的服务器在链路层接受到数据,按序往上层发送,一直到应用层。当传输到应用层,才算真正接受到有客户端发送过来的HTTP请求。
再传输过程中,发送端在进过每层时都必定会打上一个该层所属的首部信息,而接收端在层与层传输数据时,每经过一层时就会把对用的首部去掉。
一个简单的HTTP协议
从我们生活中的经验也可以知道,要建立一个连接,通常是客户端发送请求,而后服务器端响应请求。下面我们看一个实例。
下面陈列一个请求报文和响应报文。
请求报文
POST /form/entry HTTP/1.1Host:google.comConnection:keep-aliveContent-Type:appliaction/x-www-form-urlencodedContent-Length:16name=ueno&age=37
- 这里的POST是指方法,/form/entry是URL HTTP/1.1是http版本号
- Host,Connection,Content-Tpye,Content-Length部分是请求首部字段
- name部分则是内容实体
响应报文
HTTP/1.1 200 OKDate:Thurs,28 Jul 2016 18.06.00 GMTContent-Length:264Content-Type:text/html<html>...
- HTTP/1.1 是协议版本,200为状态码,ok是状态码的原因短语
- Date,Content-Length,Content-Tpye是响应首部字段
- \… 部分则是响应报文主体
通过上面的两个报文可以看出请求报文是由请求方法,请求URL,协议版本,可选的请求首部字段和实际内容组成,而响应报文则有协议版本,状态码,解释状态码的原因短语,可选的响应首部字段以及实体主体构成。尔后很大的篇幅都会用来讲解报文的构成。
HTTP是不保存状态的协议
http是不保留状态的协议,即无状态协议。也就是说http协议自身不对请求和响应之间的通信状态进行保存,在http这个级别,协议对于发送过的请求或响应都不做持久化处理。当有新的请求发送时,就会有对应的新响应产生。协议本省不对之前一切的请求和响应报文进行保存。这样子是为了处理大量事务,确保了协议的可伸缩性,所以才设计的这么简单。
但是无状态也会带来一些弊端,做过网页开发的人应该都知道cookie,cookie就是为了弥补协议的无状态化而出现的,可以参考细说cookie
HTTP方法
前面的请求报文有一个部分是“GET”,这就是http的方法,一般开发者比较熟悉的应该是GET和POST这两个。下面就挨个讲解。
- GET:用来请求访问已被URL识别的资源。
- POST:用来传输实体的主体。
- PUT:用来传输文件。
- HEAD:和GET方法一样,只不过不返回实体报文。
- DELETE:用来指定删除文件,与PUT方法相反。
- OPTION:用来查询针对请求URL指定的资源支持的方法。
- TRACE:让web服务器端将之前的请求通信还回给客户端的方法。
- CONNECT:要求的与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。
再来说说GET和POST方法的比较:
GET特点:
- 请求可被缓存
- 请求保留在浏览器历史记录中
- 请求不应在处理敏感数据时使用
- 请求有长度限制
- 请求只应当用于取回数据
POST的特点:
- 请求不会被缓存
- 请求不会保留在浏览器历史记录中
- 不能被收藏为书签
- 请求对数据长度没有要求
总的来说,当传递的数据不敏感并且比较小是才可以使用GET方法,GET方法会在链接中使用明文传递信息,可以被别人看到。
建立持久连接
在http协议的初始版本中,每进行一次HTTP通信就会断开一次TCP连接,但是现如今一共同个页面中经常包含很多图片,会多次请求资源,如果每次请求时都会有TCP的建立与断开的话就会增加通信录的开销,所以可以选择建立持久连接。持久连接后,只要没有一方明确提出断开连接,那么连接就会一直保持。在HTTP/1.1中,连接是默认持久连接的。
持久连接建立后就可以使用管线化来发送数据,管线化即指多个消息的发送并行进行,互不干扰,这样就不需要一个一个的等待响应了。
结语
这是http的基础部分,下一次将会记录http报文部分。
- 略说http协议(一:http历史及http基础)
- 略说HTTP协议(三:首部字段简介及通用首部字段)
- HTTP协议基础(一)
- HTTP协议研究一(基础协议及请求)
- HTTP协议基础(一)
- 略说HTTP协议(二:报文格式和状态码)
- Http 协议历史
- HTTP 协议发展历史
- HTTP协议历史演变及设计思路
- SpringMVC之http协议基础(一)
- HTTP协议(一)
- http协议(一)
- HTTP协议(一)
- HTTP协议(一)
- HTTP协议(一)
- HTTP协议(一)
- Http协议(一)
- HTTP协议基础(HTTP 1.1)
- FZU 1852 Impossible Mission II
- ASP中限制用户没有登录就不能进入其他页面
- Java中的位运算符与逻辑运算符的区别(&和&&,|和||)
- android异常收集-关于fragment导入包出错的问题
- 基本图算法之图的搜索
- 略说http协议(一:http历史及http基础)
- linux系统编程
- TCP/IP三次握手与四次挥手过程状态详解
- C++外部文件读取相关操作
- 小议浮动
- 博客开通
- python装饰器
- android连接天天模拟器方法
- 排名Top 16的Java实用类库