您的位置:首页 > 理论基础 > 计算机网络

HTTP通信概念

2016-01-09 16:43 351 查看
HTTP协议:超文本传输协议;hyperText transfer protocol

超文本就是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。(比如
不用语言)

超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted
Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。Ted
Nelson组织协调万维网协会(World Wide Web Consortium)和互联网工程工作小组(Internet Engineering
Task Force )共同合作研究,最终发布了一系列的RFC,其中著名的RFC 2616定义了HTTP 1.1。

HTTP协议定义客户端如何从服务器请求数据,以及服务器如何把数据传送给客户端,HTTP协议采用了请求/响应模型
C/S client server。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、原因短语、状态代码、响应头部和响应数据。

HTTP工作过程
下图表明了这种请求/响应模型。

以下是HTTP请求/响应的步骤:
(1)客户端连接到Web服务器
一个HTTP客户端,通常是浏览器(iOS应用),与Web服务器的HTTP端口(默认为80)建立一个连接。例如,http://www.baicu.com
(2)发送HTTP请求
通过连接,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。
(3)服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源复本写到连接中,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
(4)释放连接
Web服务器主动断开连接;客户端被动连接。
(5)客户端浏览器解析数据
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型(Client/Server)。HTTP是基于TCP/IP的短连接,无状态的协议。HTTP假定其下层协议提供可靠的传输。因此也就是其在TCP/IP协议族使用TCP作为其传输层。

TCP/IP中的协议 :
IP协议:(Internet Protocol)计算机与计算机之间的通信协议。在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。

网际协议IP是TCP/IP的心脏,也是网络层中最重要的协议。

IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层---TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。

TCP协议:TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能。(用户数据报协议(UDP)是同一层内[1] 另一个重要的传输协议。在因特网协议族(Internet
protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。

如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向‘上’传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。

TCP将它的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。

面向连接的服务(例如Telnet、FTP、rlogin、X Windows和SMTP)需要高度的可靠性,所以它们使用了TCP。

UDP协议:UDP(
是User Datagram Protocol的简称,
中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联
是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。

UDP协议全称是用户数据报协议[1] ,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!

UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。比如,我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。

UDP协议是面向非连接的协议,没有建立连接的过程。正因为UDP协议没有连接的过程,所以它的通信效果高;但也正因为如此,它的可靠性不如TCP协议高。QQ就使用UDP发消息,因此有时会出现收不到消息的情况。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。

与所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于IP(网际协议)协议的顶层。根据OSI(开放系统互连)参考模型,UDPTCP都属于传输层协议。UDP协议的主要作用是将网络数据流量压缩成数据包的形式。一个典型的数据包就是一个二进制数据的传输单位。每一个数据包的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。

OSI参考模型:
OSI(Open System Interconnect),即开放式系统互联。
体系结构标准定义了网络互连的七层框架(物理层数据链路层网络层传输层会话层表示层应用层),即ISO开放系统互连参考模型。在这一框架下进一步详细规定了每一层的功能,以实现开放系统环境中的互连性、互操作性和应用的可移植性。[1]

TCP和 UDP
TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”(三次握手)才能建立起来,其中的过程非常复杂,我们这里只做简单、形象的介绍,你只要做到能够理解这个过程即可。

我们来看看这三次对话的简单过程:
主机A向主机B发出连接请求数据包:我想给你发数据,可以吗?,这是第一次对话;
主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:可以,你什么时候发?,这是第二次对话;
主机A再发出一个数据包确认主机B的要求同步:我现在就发,你接着吧!,这是第三次对话。

三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。

四次握手断开连接:
1 当主机A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求
2 主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1
3 由B
端再提出反方向的关闭请求,将FIN置1
4 主机A对主机B的请求进行确认,将ACK置1,双方向的关闭结束.

tcp协议和udp协议的差别
TCP UDP
是否连接: 面向连接
面向非连接
传输可靠性: 可靠
不可靠
应用场合 :传输大量数据
少量数据
速度: 慢


HTTP使用TCP:
HTTP是一个客户端服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。通过使用Web浏览器网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求。
HTTP使用TCP而不是UDP的原因在于(打开)一个网页必须传送很多数据,而TCP协议提供传输控制,按顺序组织数据,和错误纠正。

为什麽HTTP请求的端口号为80:

例如一台服务器为什么可以同时是Web服务器,也可以是FTP服务器,还可以是邮件服务器等等呢?其中一个很重要的原因是各种服务采用不同的端口分别提供不同的服务,比如:通常TCP/IP协议规定Web采用80号端口,FTP采用21号端口等,而smtp邮件服务器是采用25号端口。这样,通过不同端口,计算机就可以与外界进行互不干扰的通信。

HTTP请求方式
请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。常用GET
POST


请求⽅方法(所有⽅方法全为⼤大写)有多种,各个⽅方法的解释如下:

GET 请求获取Request-URI所标识的资源

POST 在Request-URI所标识的资源后附加新的数据

HEAD 请求获取由Request-URI所标识的资源的响应消息报头

PUT 请求服务器存储⼀一个资源,并⽤用Request-URI作为其标识

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

TRACE 请求服务器回送收到的请求信息,主要⽤用于测试或诊断

CONNECT 保留将来使⽤用

OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求

GET请求:
GET方法要求服务器将URL定位的资源放在响应报文的数据部分,回送给客户端。使用GET方法时,请求参数和对应的值附加在URL后面,利用一个问号(“?”)代表URL的结尾与请求参数的开始,以?分割URL和传输数据,多个参数用&连接。另外,由于不同的浏览器对地址的字符限制也有所不同,一般最多只能识别1024个字符,所以如果需要传送大量数据的时候,也不适合使用GET方式。

POST请求:
对于上面提到的不适合使用GET方式的情况,可以考虑使用POST方式,因为使用POST方法可以允许客户端给服务器提供信息较多。POST方法将请求参数封装在HTTP请求数据中,以名称/值的形式出现,可以传输大量数据,这样POST方式对传送的数据大小没有限制(理论上),而且也不会显示在URL中。

关于HTTP请求GET和POST的区别

1.传输数据
GET提交,请求的数据会附在URL之后(就是把数据放置在HTTP协议头<request-line>中),以?分割URL和传输数据,多个参数用&连接;例如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0
%E5%A5%BD。如果数据是英文字母/数字,原样发送,如果是其他类型的则需要编码后发送

POST提交:把提交的数据放置在HTTP包的包体<request-body>中。GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会显示出数据

2.传输数据的大小:
首先声明,HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。
而在实际开发中存在的限制主要有:
GET:特定服务器对URL长度有限制,例如IE对URL长度的限制是2048字节。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统以及服务器的支持。
因此对于GET提交时,传输数据就会受到URL长度的限制。

POST:由于不是通过URL传值,理论上数据不受限。但实际各个WEB服务器会规定对post提交数据大小进行限制,Apache、IIS6都有各自的配置。

3.安全性:
POST的安全性要比GET的安全性高。比如:通过GET提交数据,用户名和密码将明文出现在URL上,因为(1)登录页面有可能被浏览器缓存,
(2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了。

请求报文:
大致分为:请求头 请求行
请求体
具体分为:请求行 -
通用信息头 -
请求头 -
实体头 -
报文主体

请求报文:

GET / HTTP/1.1 //请求方式
和 请求协议
以及 协议版本

Host
www.baidu.com //请求的主机地址 。请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。

Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 //客户端可识别的类型列表

BD_CK_SAM=1; BD_HOME=0; BD_UPN=143254; BDSVRTM=109;
BAIDUID=FEB40C79DB2B810CF2B3E7E0BBC42206:FG=1;
BDRCVFR[5Bri_i5nG73]=mk3SLVN4HKm;
Cookie BIDUPSID=C012D68E2DA2F8D074CFEED629584326;
1872_13932_16949_10633_17050;
H_PS_PSSID=16485_16717_1434_16990_17155_12824
_14429_12868_16937_17001_17003_17073_15576_1;
PSTM=1434458755

User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/600.7.12
(KHTML, like Gecko) Version/8.0.7 Safari/600.7.12 //支持的浏览器(客户端)类型

Accept-Language zh-cn //浏览器支持的语言:中文和简体中文

Accept-Encoding gzip, deflate //浏览器可以解码的编码方式(压缩方式)

Connection keep-alive //客户端和服务器的连接方式。长连接keep_alive(HTTP/1.1)和短连接
close(HTTP/1.0)

<blank line>
//最后一个请求头之后是一个空行。发送回车符和换行符,通知服务器以下不再有请求头

GET方式的请求一般不包含”请求内容”部分,请求数据以地址的形式表现在请求行。

应答报文格式如下:

大致分为:响应行 响应头
响应数据
具体分为:状态行 -
通用信息头 -
响应头 -
实体头 -
报文主体

响应报文:
HTTP/1.1 302 Moved Temporarily //报文协议及版本 状态码及版本

Date Tue, 15 Sep 2015 00:56:40 GMT//时间和日期

Content-Type text/html//数据类型

Content-Length 215//内容长度

Connection Keep-Alive//长连接

Location https://www.baidu.com/
Server BWS/1.1 //服务器类型

X-UA-Compatible
IE=Edge,chrome=1//浏览器兼容模式

Set-Cookie BD_LAST_QID=11002620294295990696; path=/; Max-Age=1
通用状态码:
HTTP的响应状态码由5段组成:

1xx 消息,一般是告诉客户端,请求已经收到了,正在处理,别急...
2xx 处理成功,一般表示:请求收悉、我明白你要的、请求已受理、已经处理完成等信息.
3xx 重定向到其它地方。它让客户端再发起一个请求以完成整个处理。
4xx 处理发生错误,责任在客户端,如客户端的请求一个不存在的资源,客户端未被授权,禁止访问等。
5xx 处理发生错误,责任在服务端,如服务端抛出异常,路由出错,HTTP版本不支持等。

常见状态代码、状态描述的说明如下。

200 OK:客户端请求成功。
400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
403 Forbidden:服务器收到请求,但是拒绝提供服务。
404 Not Found:请求资源不存在,举个例子:输入了错误的URL。
500 Internal Server Error:服务器发生不可预期的错误。
503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常,举个例子:HTTP/1.1 200 OK(CRLF)。

XML:Extensible Markup Language
可扩展标记语言(原因是标签是可以自定义的),标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言
它与AccessOracle和SQL
Server等数据库不同,数据库提供了更强有力的数据存储和分析能力,例如:数据索引、排序、查找、相关一致性等,它仅仅是存储数据。事实上它与其他数据表现形式最大的不同是:它极其简单,这是一个看上去有点琐细的优点,但正是这点使它与众不同。

它和超文本标记语言语法区别:
1,超文本标记语言(HTML)的标记不是所有的都需要成对出现,(XML)它则要求所有的标记必须成对出现;
2,HTML标记不区分大小写,xml它则大小敏感,即区分大小写。
3,HTML:不可(预定义)自定义标签,标签全是预定义的,XML:标签是可以自定义的

json

JSON(JavaScript Object Notation)
是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#Java、JavaScript、PerlPython等)。这些特性使JSON成为理想的数据交换语言。
易于人阅读和编写,同时也易于机器解析和生成(网络传输速率)。

{“Users”:{“User”:[{“name”: “李四”,“password”: “123456”}, {“name”: “李2四”, “password”:
123456}]}}

{}代表是(对象)字典;
[ ]代表是数组
JSON 名称/值对
JSON 数据的书写格式是:名称/值对。
名称/值对组合中的名称写在前面(在双引号中),值对写在后面(同样在双引号中),中间用冒号隔开:
1
"firstName":"John"
这很容易理解,等价于这条 JavaScript
语句:
1
firstName="John"
JSON 值
JSON 值可以是:

数字(整数或浮点数)
字符串(在双引号中)
逻辑值(true 或 false)
数组(在方括号中)
对象(在花括号中)
null

json与xml
更小 更快
更易解析

JavaScript一种直译脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。
JavaScript是一种属于网络的脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。通常JavaScript脚本是通过嵌入在HTML中来实现自身的功能的。[3]

是一种解释性脚本语言(代码不进行预编译)。[4]
主要用来向HTML标准通用标记语言下的一个应用)页面添加交互行为。[4]
可以直接嵌入HTML页面,但写成单独的js文件有利于结构和行为的分离。[4]
跨平台特性,在绝大多数浏览器的支持下,可以在多种平台下运行(如WindowsLinux、Mac、Android、iOS等)。

Javascript脚本语言同其他语言一样,有它自身的基本数据类型,表达式和算术运算符及程序的基本程序框架。Javascript提供了四种基本的数据类型和两种特殊数据类型用来处理数据和文字。而变量提供存放信息的地方,表达式则可以完成较复杂的信息处理。[5]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: