406 UDP协议是面向非链接的协议 Keep-Alive

HTTP The Definitive Guidehtml

 
Table 3-1. Common HTTP methods
 
Method
Description
Message body?
 
GET
Get a document from the server.
No
 
HEAD
Get just the headers for a document from the server.
No
 
POST
Send data to the server for processing.
Yes
 
PUT
Store the body of the request on the server.
Yes
 
TRACE
Trace the message through proxy servers to the server.
No
 
OPTIONS
Determine what methods can operate on a server.
No
 
DELETE
Remove a document from the server.
No
 
Not all servers implement all seven of the methods in Table 3-1. Furthermore, because HTTP was designed to be easily extensible, other servers may implement their own request methods in addition to these. These additional methods are called extension methods, because they extend the HTTP specification.
//这些附加方法是对HTTP规范的扩展
 
 
TCP、UDP和HTTP详解 - ~风轻云淡~ - 博客园 https://www.cnblogs.com/gaopeng527/p/5255827.html

http:是用于www浏览的一个协议。
tcp:是机器之间创建链接用的到的一个协议。web

一、TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。
在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。
在传输层中有TCP协议与UDP协议。
在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。
所以,HTTP自己就是一个协议,是从Web服务器传输超文本到本地浏览器的传送协议。 canvas

二、HTTP协议是创建在请求/响应模型上的。首先由客户创建一条与服务器的TCP连接,并发送一个请求到服务器,请求中包含请求方法、URI、协议版本以及相关的MIME样式的消息。服务器响应一个状态行,包含消息的协议版本、一个成功和失败码以及相关的MIME式样的消息。
HTTP/1.0为每一次HTTP的请求/响应创建一条新的TCP连接,所以一个包含HTML内容和图片的页面将须要创建屡次的短时间的TCP连接。一次TCP连接的创建将须要3次握手。
另外,为了得到适当的传输速度,则须要TCP花费额外的回路连接时间(RTT)。每一次连接的创建须要这种常常性的开销,而其并不带有实际有用的数据,只是保证连接的可靠性,所以HTTP/1.1提出了可持续连接的实现方法。HTTP/1.1将只创建一次TCP的连接而重复地使用它传输一系列的请求/响应 消息,所以减小了连接创建的次数和常常性的连接开销。浏览器

三、结论:虽然HTTP自己是一个协议,但其最终仍是基于TCP的。不过,目前,有人正在研究基于TCP+UDP混合的HTTP协议。缓存

具体介绍安全

IP (网际协议)服务器

在网络通讯中,网络组件的寻址对信息的路由选择和传输来讲是至关关键的。相同网络中的两台机器间的消息传输有各自的技术协定。LAN 是经过提供6字节的惟一标识符(“MAC”地址)在机器间发送消息的。SNA 网络中的每台机器都有一个逻辑单元及与其相应的网络地址。DECNET、AppleTalk 和 Novell IPX 均有一个用来分配编号到各个本地网和工做站的配置。cookie


HTTP是超文本传输协议,是客户端浏览器或其余程序与Web服务器之间的应用层通讯协议。在Internet上的Web服务器上存放的都是超文本信息, 客户机须要经过HTTP协议传输所要访问的超文本信息。HTTP包含命令和传输信息,不只可用于Web访问,也能够用于其余因特网/内联网应用系统之间的通讯,从而实现各种应用资源超媒体访问的集成网络

TCP (传输控制协议)并发

经过序列化应答和必要时重发数据包,TCP 为应用程序提供了可靠的传输流和虚拟链接服务。TCP 主要提供数据流转送,可靠传输,有效流控制,全双工操做和多路传输技术。可查阅 TCP 部分获取更多详细资料。

至于HTTP协议,它是TCP协议族中的一种。使用TCP80端口


HTTP是应用层协议,TCP是传输层协议!

数据包在网络传输过程当中,HTTP被封装在TCP包内!!

 

1. TCP/UDP


面向链接的TCP

“面向链接”就是在正式通讯前必需要与对方创建起链接。好比你给别人打电话,必须等线路接通了、对方拿起话筒才能相互通话。

 

TCP(Transmission Control Protocol,传输控制协议)是基于链接的协议,也就是说,在正式收发数据前,必须和对方创建可靠的链接。一个TCP链接必需要通过三次“对话”才能创建起来,其中的过程很是复杂,咱们这里只作简单、形象的介绍,你只要作到可以理解这个过程便可。

 

咱们来看看这三次对话的简单过程:

1. 主机A向主机B发出链接请求数据包:“我想给你发数据,能够吗?”,这是第一次对话;

2. 主机B向主机A发送赞成链接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工做)的数据包:“能够,你何时发?”,这是第二次对话;

3. 主机A再发出一个数据包确认主机B的要求同步:“我如今就发,你接着吧!”,这是第三次对话。

 

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

TCP协议能为应用程序提供可靠的通讯链接,使一台计算机发出的字节流无差错地发往网络上的其余计算机,对可靠性要求高的数据通讯系统每每使用TCP协议传输数据。


咱们来作一个实验,用计算机A(安装Windows 2000 Server操做系统)从“网上邻居”上的一台计算机B拷贝大小为8,644,608字节的文件,经过状态栏右下角网卡的发送和接收指标就会发现:虽然是 数据流是由计算机B流向计算机A,可是计算机A仍发送了3,456个数据包,如图2所示。这些数据包是怎样产生的呢?由于文件传输时使用了TCP/IP协 议,更确切地说是使用了面向链接的TCP协议,计算机A接收数据包的时候,要向计算机B回发数据包,因此也产生了一些通讯量。


若是事先用网络监视器监视网络流量,就会发现由此产生的数据流量是9,478,819字节,比文件大小多出10.96%(如图3所示),缘由不只在于数据包和帧自己占用了一些空间,并且也在于TCP协议面向链接的特性致使了一些额外的通讯量的产生。


面向非链接的UDP协议

“面向非链接”就是在正式通讯前没必要与对方先创建链接,无论对方状态就直接发送。这与如今风行的手机短信很是类似:你在发短信的时候,只须要输入对方手机号就OK了。

UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非链接的协议,它不与对方创建链接,而是直接就把数据包发送过去!


UDP 适用于一次只传送少许数据、对可靠性要求不高的应用环境。好比,咱们常用“ping”命令来测试两台主机之间TCP/IP通讯是否正常,其实 “ping”命令的原理就是向对方主机发送UDP数据包,而后对方主机确认收到数据包,若是数据包是否到达的消息及时反馈回来,那么网络就是通的。例如, 在默认状态下,一次“ping”操做发送4个数据包。你们能够看到,发送的数据包数量是4包,收到的也是4包(由于对方主机收到后会发回一 个确认收到的数据包)。这充分说明了UDP协议是面向非链接的协议,没有创建链接的过程。正由于UDP协议没有链接的过程,因此它的通讯效果高;但也正由于如此,它的可靠性不如TCP协议高。QQ就使用UDP发消息,所以有时会出现收不到消息的状况。

                              附表:tcp协议和udp协议的差异

  TCP UDP
是否链接 面向链接 面向非链接
传输可靠性 可靠 不可靠
应用场合 传输大量的数据,对可靠性要求较高的场合 传送少许数据、对可靠性要求不高的场景
速度

 

TCP协议和UDP协议各有所长、各有所短,适用于不一样要求的通讯环境

 

 

通讯协议——Http、TCP、UDP - 孤星缀月 - 博客园 http://www.cnblogs.com/xhwy/archive/2012/03/03/2378293.html

 

 都是通讯协议,也就是通讯时所遵照的规则,只有双方按照这个规则“说话”,对方才能理解或为之服务。

TCP   HTTP   UDP三者的关系:

TCP/IP是个协议组,可分为四个层次:网络接口层、网络层、传输层和应用层。
在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。
在传输层中有TCP协议与UDP协议。
在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。
所以,HTTP自己就是一个协议,是从Web服务器传输超文本到本地浏览器的传送协议。
socket: 
这是为了实现以上的通讯过程而创建成来的通讯管道,其真实的表明是客户端和服务器端的一个通讯进程,双方进程经过socket进行通讯,而通讯的规则采用指定的协议。socket只是一种链接模式,不是协议,tcp,udp,简单的说(虽然不许确)是两个最基本的协议,不少其它协议都是基于这两个协议如,http就是基于tcp的,.用socket能够建立tcp链接,也能够建立udp链接,这意味着,用socket能够建立任何协议的链接,由于其它协议都是基于此的。

下面咱们主要来看一下和咱们互联网生活密切相关的协议:HTTP

什么是Http协议

   HTTP全称是HyperText Transfer Protocal,即:超文本传输协议,从1990年开始就在WWW上普遍应用,是现今在WWW上应用最多的协议,    Http是应用层协议,当你上网浏览网页的时候,浏览器和Web服务器之间就会经过HTTP在Internet上进行数据的发送和接收。Http是一个基于请求/响应模式的、无状态的协议。即咱们一般所说的Request/Response。

URL

URL(Uniform Resource Locator) 地址用于描述一个网络上的资源,  基本格式以下

schema://host[:port#]/path/.../[?query-string][#anchor]

scheme               指定低层使用的协议(例如:http, https, ftp)

host                   HTTP服务器的IP地址或者域名

port#                 HTTP服务器的默认端口是80,这种状况下端口号能够省略。若是使用了别的端口,必须指明,例如 http://www.cnblogs.com:8080/

path                   访问资源的路径

query-string       发送给http服务器的数据

anchor-             锚

 

URL 的一个例子

http://www.mywebsite.com/sj/test/test.aspx?name=sviergn&x=true#stuff

Schema:                 http
host:                   www.mywebsite.com
path:                   /sj/test/test.aspx
Query String:           name=sviergn&x=true
Anchor:                 stuff

 

HTTPRequest/Response

先看Request 消息的结构,   Request 消息分为3部分

第一部分叫Request line,

 第二部分叫Request header,

第三部分是body. header和body之间有个空行,

 结构以下图

 

第一行中的Method表示请求方法,好比"POST","GET",  Path-to-resoure表示请求的资源, Http/version-number 表示HTTP协议的版本号

当使用的是"GET" 方法的时候, body是为空的

好比咱们打开博客园首页的request 以下

GET http://www.cnblogs.com/ HTTP/1.1
Host: www.cnblogs.com

抽象的东西,难以理解,老感受是虚的, 所谓眼见为实, 实际见到的东西,咱们才能理解和记忆。 咱们今天用Fiddler,实际的看看Request和Response.

下面咱们打开Fiddler 捕捉一个博客园登陆的Request 而后分析下它的结构, 在Inspectors tab下以Raw的方式能够看到完整的Request的消息,  

 以下图

Accept

做用: 浏览器端能够接受的媒体类型,

例如:  Accept: text/html  表明浏览器能够接受服务器回发的类型为 text/html  也就是咱们常说的html文档,

若是服务器没法返回text/html类型的数据,服务器应该返回一个406错误(non acceptable)

通配符 * 表明任意类型

例如  Accept: */*  表明浏览器能够处理全部类型,(通常浏览器发给服务器都是发这个)

Referer:

做用: 提供了Request的上下文信息的服务器,告诉服务器我是从哪一个连接过来的,好比从我主页上连接到一个朋友那里,他的服务器就可以从HTTP Referer中统计出天天有多少用户点击我主页上的连接访问他的网站。

例如: Referer:http://translate.google.cn/?hl=zh-cn&tab=wT

Accept-Language

做用: 浏览器申明本身接收的语言。 

语言跟字符集的区别:中文是语言,中文有多种字符集,好比big5,gb2312,gbk等等;

例如: Accept-Language: en-us

Content-Type

做用:

例如:Content-Type: application/x-www-form-urlencoded

 

Accept-Encoding

做用: 浏览器申明本身接收的编码方法,一般指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate),(注意:这不是只字符编码);

例如: Accept-Encoding: gzip, deflate

User-Agent

做用:告诉HTTP服务器, 客户端使用的操做系统和浏览器的名称和版本.

咱们上网登录论坛的时候,每每会看到一些欢迎信息,其中列出了你的操做系统的名称和版本,你所使用的浏览器的名称和版本,这每每让不少人感到很神奇,实际上,服务器应用程序就是从User-Agent这个请求报头域中获取到这些信息User-Agent请求报头域容许客户端将它的操做系统、浏览器和其它属性告诉服务器。

例如: User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; CIBA; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; InfoPath.2; .NET4.0E)

Connection

例如: Connection: keep-alive   当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP链接不会关闭,若是客户端再次访问这个服务器上的网页,会继续使用这一条已经创建的链接

例如:  Connection: close  表明一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP链接会关闭, 当客户端再次发送Request,须要从新创建TCP链接。

Content-Length

做用:发送给HTTP服务器数据的长度。

例如: Content-Length: 38

Host(发送请求时,该报头域是必需的)

做用: 请求报头域主要用于指定被请求资源的Internet主机和端口号,它一般从HTTP URL中提取出来的

例如: 咱们在浏览器中输入:http://www.guet.edu.cn/index.html

浏览器发送的请求消息中,就会包含Host请求报头域,以下:

Host:http://www.guet.edu.cn

此处使用缺省端口号80,若指定了端口号,则变成:Host:指定端口号

Pragma

做用: 防止页面被缓存, 在HTTP/1.1版本中,它和Cache-Control:no-cache做用如出一辙

Pargma只有一个用法, 例如: Pragma: no-cache

Cookie:

做用: 最重要的header, 将cookie的值发送给HTTP 服务器

Accept-Charset

做用:浏览器申明本身接收的字符集,这就是本文前面介绍的各类字符集和字符编码,如gb2312,utf-8(一般咱们说Charset包括了相应的字符编码方案);

 

 

 

咱们再看Response消息的结构, 和Request消息的结构基本同样。 一样也分为三部分

第一部分叫Response line,

 第二部分叫Response header,

第三部分是body. header和body之间也有个空行, 

 结构以下图

HTTP/version-number表示HTTP协议的版本号,  status-code 和message 请看下节[状态代码]的详细解释.

咱们用Fiddler 捕捉一个博客园首页的Response而后分析下它的结构, 在Inspectors tab下以Raw的方式能够看到完整的Response的消息,   以下图

 

Cache-Control

做用: 这个是很是重要的规则。 这个用来指定Response-Request遵循的缓存机制。各个指令含义以下

Cache-Control:Public   能够被任何缓存所缓存()

Cache-Control:Private     内容只缓存到私有缓存中

Cache-Control:no-cache  全部内容都不会被缓存

还有其余的一些用法, 我没搞懂其中的意思, 请你们参考其余的资料

Content-Type

做用:WEB服务器告诉浏览器本身响应的对象的类型和字符集,

例如:

Content-Type: text/html; charset=utf-8

Content-Type:text/html;charset=GB2312

Content-Type: image/jpeg

Expires

做用: 浏览器会在指定过时时间内使用本地缓存

例如: Expires: Tue, 08 Feb 2022 11:35:14 GMT

Last-Modified:

做用: 用于指示资源的最后修改日期和时间。(实例请看上节的If-Modified-Since的实例)

例如: Last-Modified: Wed, 21 Dec 2011 09:09:10 GMT

Server:

做用:指明HTTP服务器的软件信息

例如:Server: Microsoft-IIS/7.5

X-AspNet-Version:

做用:若是网站是用ASP.NET开发的,这个header用来表示ASP.NET的版本

例如: X-AspNet-Version: 4.0.30319

X-Powered-By:

做用:表示网站是用什么技术开发的

例如: X-Powered-By: ASP.NET

Connection

例如: Connection: keep-alive   当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP链接不会关闭,若是客户端再次访问这个服务器上的网页,会继续使用这一条已经创建的链接

例如:  Connection: close  表明一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP链接会关闭, 当客户端再次发送Request,须要从新创建TCP链接。

Content-Length

指明实体正文的长度,以字节方式存储的十进制数字来表示。在数据下行的过程当中,Content-Length的方式要预先在服务器中缓存全部数据,而后全部数据再一古脑儿地发给客户端。

例如: Content-Length: 19847

 Date

做用:  生成消息的具体时间和日期

例如: Date: Sat, 11 Feb 2012 11:35:14 GMT 

HTTP协议之GetPost

Http协议定义了不少与服务器交互的方法,最基本的有4种,分别是GET,POST,PUT,DELETE. 一个URL地址用于描述一个网络上的资源,而HTTP中的GET, POST, PUT, DELETE就对应着对这个资源的查,改,增,删4个操做。 咱们最多见的就是GET和POST了。GET通常用于获取/查询资源信息,而POST通常用于更新资源信息.

咱们看看GET和POST的区别

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

2. GET提交的数据大小有限制(由于浏览器对URL的长度有限制),而POST方法提交的数据没有限制.

3. GET方式须要使用Request.QueryString来取得变量的值,而POST方式经过Request.Form来获取变量的值,也就是说Get是经过地址栏来传值,而Post是经过提交表单来传值。

4. GET方式提交数据,会带来安全问题,好比一个登陆页面,经过GET方式提交数据时,用户名和密码将出如今URL上,若是页面能够被缓存或者其余人能够访问这台机器,就能够从历史记录得到该用户的帐号和密码.

 

UDP_百度百科 https://baike.baidu.com/item/UDP/571511?fr=aladdin

 

UDP和TCP协议的主要区别是二者在如何实现信息的可靠传递方面不一样。

 

TCP协议中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在接收到该确认消息以后才继续传送其它信息,不然将一直等待直到收到确认信息为止。与TCP不一样,UDP协议并不提供数据传送的保证机制。若是在从发送方到接收方的传递过程当中出现数据报的丢失,协议自己并不能作出任何检测或提示。所以,一般人们把UDP协议称为不可靠的传输协议

 

 

应用协议 端口号
DNS 53
TFTP 69
SNMP 161
 
既然UDP是一种不可靠的 网络协议,那么还有什么使用价值或必要呢?其实否则,在有些状况下UDP协议可能会变得很是有用。由于UDP具备TCP所可望不可即的速度优点。虽然TCP协议中植入了各类安全保障功能,可是在实际执行的过程当中会占用大量的 系统开销,无疑使速度受到严重的影响。反观UDP因为排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大下降了执行时间,使速度获得了保证。
关于UDP协议的最先规范是 RFC768,1980年发布。尽管时间已经很长,可是UDP协议仍然继续在主流应用中发挥着做用。包括视频 电话会议系统在内的许多应用都证实了UDP协议的存在价值。由于相对于可靠性来讲,这些应用更加注重实际性能,因此为了得到更好的使用效果(例如,更高的画面帧刷新速率)每每能够牺牲必定的可靠性(例如,画面质量)。这就是UDP和TCP两种协议的权衡之处。根据不一样的环境和特色,两种传输协议都将在从此的网络世界中发挥更加剧要的做用。

 

 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Keep-Alive

Keep-Alive 是一个通用消息头,容许消息发送者暗示链接的状态,还能够用来设置超时时长和最大请求数。

须要将 The Connection 首部的值设置为  "keep-alive" 这个首部才有意义。同时须要注意的是,在HTTP/2 协议中, ConnectionKeep-Alive  是被忽略的;在其中采用其余机制来进行链接管理。

Header type General header
Forbidden header name no

 

parameters
一系列用逗号隔开的参数,每个参数由一个标识符和一个值构成,并使用等号 ( '=') 隔开。下述标识符是可用的:
  • timeout:指定了一个空闲链接须要保持打开状态的最小时长(以秒为单位)。须要注意的是,若是没有在传输层设置 keep-alive TCP message 的话,大于 TCP 层面的超时设置会被忽略。
  • max:在链接关闭以前,在此链接能够发送的请求的最大值。在非管道链接中,除了 0 之外,这个值是被忽略的,由于须要在紧跟着的响应中发送新一次的请求。HTTP 管道链接则能够用它来限制管道的使用。

示例

含有 Keep-Alive 首部的响应示例:

HTTP/1.1 200 OK
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
Date: Thu, 11 Aug 2016 15:23:13 GMT
Keep-Alive: timeout=5, max=1000
Last-Modified: Mon, 25 Jul 2016 04:32:39 GMT
Server: Apache

(body)
相关文章
相关标签/搜索