http协议称为.docx
《http协议称为.docx》由会员分享,可在线阅读,更多相关《http协议称为.docx(9页珍藏版)》请在冰点文库上搜索。
http协议称为
竭诚为您提供优质文档/双击可除
http协议称为____.
篇一:
http协议
http协议
重要性:
无论是以后用webserverice,还是用rest做大型架构,都离不开对http协议的认识.
甚至可以简化的说:
webservice=http协议+xml
Rest=http协议+json
各种api,也一般是用http+xml/json来实现的.
往小说:
做采集,小偷站,也需要对http协议有所了解,
以及ajax,对http协议有了解之后,学习ajax是非常容易理解的.
什么是协议:
答:
计算机中的协议和现实中的协议是一样的,一式双份/多份.
双方/多方都遵从共同的一个规范,这个规范就可以称为协议.
计算机只所以能全世界互通,协议是功不可没,如果没有协议,计算机各说各话,根本谁都听不懂谁.
ftp,http,stmp,pop,tcp/ip协议.....
http协议的工作流程
当你打开一个页面时,发生了什么
0:
原始状态:
客户端和服务器之间,没有关系.
什么叫连接:
连接就是网络上的虚拟电路.
问:
浏览器能发送http协议,http协议一定要浏览器来发送吗
答:
不是,http既然是一种协议,那么只要满足这种协议,什么工具都可以发.
http请求信息和响应信息的格式
请求:
(1)请求行
(2)请求头信息
(3)请求主体信息(可以没有)
(4)头信息结束后和主体信息之间要空一行请求行又分3部分
请求方法请求路径所用的协议
请求方法:
getpostputdeletetRace,options所用的协议:
目前一般是http/1.1,0.9,1.0已经基本不用.
篇二:
http协议
使用httpwebRequest抓取网页内容,但首次请求总是莫名奇妙的阻塞在Request.getResponse();上,不过一旦这次请求成功,后续的操作就很快了(如果是针对同一对象)。
【解决方案】
在配置文件中(.config)中添加配置节:
1.
2.
3.
4.
5.
6.
7. 8.enabled="false"
9.usedefaultcredentials="false">
10.
11.
12.
13.
14.
15.
16.【问题所在】
4.0中的默认代理是开启的,而我并没有设置!
故只有等待超时后才会绕过代理,
这就阻塞了.
此处getResponse超过的原因是,当前存在太多数目的alive的http连接(大于10个),所以再次提交同样的http的request,再去getResponse,就会超时死掉。
解决办法就是,把defaultconnectionlimit设置为一个比较大一点的数值,此数值保证大于你当前已经存在的alive的http连接数即可。
18.对于getResponse或getRequeststream超时死掉的原因,可能是:
19.1.defaultconnectionlimit是默认的2,而当前的http的connection用完了,导致
后续的getResponse或getRequeststream超时死掉
20.==>>默认系统只支持同时存在2个http的connection
21.==>>使用httpwebRequest之后如果没有close,则会占用1个http的connection,
所以如果超过2次使用httpwebRequest而没有close,那么就用完系统的http的connection,之后再去使用httpwebRequest,getResponse就会死掉
3.cache-control头域
cache-control指定请求和响应遵循的缓存机制。
在请求消息或响应消息中设置
cache-control并不会修改另一个消息处理过程中的缓存处理过程。
请求时的缓存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。
各个消息中的指令含义如下:
public指示响应可被任何缓存区缓存。
private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。
这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。
no-cache指示请求或响应消息不能缓存
no-store用于防止重要的信息被无意的发布。
在请求消息中发送将使得请求和响应消息都不使用缓存。
max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
max-stale指示客户机可以接收超出超时期间的响应消息。
如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。
综述:
cache-control指定请求和响应遵循的缓存机制。
在请求消息或响应消息中设置cache-control并不会修改另一个消息处理过程中的缓存处理过程。
请求时的缓存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。
网页的缓存通过http消息头中的“cache-control”来控制,常见的取值有private、no-cache、max-age、must-revalidate等,默认为private。
其作用根据不同的重新浏览方式分为以下几种情况:
(1)打开新窗口如果指定cache-control的值为private、no-cache、must-revalidate,那么打开新窗口访问时都会重新访问服务器。
而如果指定了max-age值,那么在此值内的时间里就不会重新访问服务器,例如:
cache-control:
max-age=5表示当访问此网页后的5秒内再次访问不会去服务器。
(2)在地址栏回车如果值为private或must-revalidate(和网上说的不一样),则只有第一次访问时会访问服务器,以后就不再访问。
如果值为no-cache,那么每次都会访问。
如果值为max-age,则在过期之前不会重复访问。
(3)按后退按扭如果值为private、must-revalidate、max-age,则不会重访问,而如果为no-cache,则每次都重复访问。
(4)按刷新按扭无论为何值,都会重复访问当指定cache-control值为“no-cache”时,访问此页面不会在internet临时文章夹留下页面备份。
另外,通过指定“expires”值也会影响到缓存。
例如,指定expires值为一个早已过去的时间,那么访问此网时若重复在地址栏按回车,那么每次都会重复访问:
expires:
Fri,31dec199916:
00:
00gmt在asp中,可以通过Response对象的expires、expiresabsolute属性控制expires值;通过Response对象的
cachecontrol属性控制cache-control的值,例如:
Response.expiresabsolute=#2000-1-1#指定绝对的过期时间,这个时间用的是服务器当地时间,会被自动转换为gmt时间
Response.expires=20指定相对的过期时间,以分钟为单位,表示从当前时间起过多少分钟过期。
Response.cachecontrol="no-cache"expires值是可以通过在internet临时文件夹中查看临时文件的属性看到的。
expires用来控制缓存的失效日期,
response.setheader(cache-control,no-cache);
response.setheader(cache-control,private);
在http1.1中request和reponseheader中都有可能出现一个connection头字段,此header的含义是当client和server通信时对于长链接如何进行处理。
在http1.1中,client和server都是默认对方支持长链接的,如果client使用http1.1协议,但又不希望使用长链接,则需要在header中指明connection的值为close;如果server方也不想支持长链接,则在response中也需要明确说明connection的值为close.
不论request还是response的header中包含了值为close的connection,都表明当前正在使用的tcp链接在请求处理完毕后会被断掉。
以后client再进行新的请求时就必须创建新的tcp链接了。
httpconnection的close设置允许客户端或服务器中任何一方关闭底层的连接双方都会要求在处理请求后关闭它们的tcp连接。
2.如何在程序中设置:
可以在过滤器中加入:
response.setheader("connection","close");
pragma头域
pragma头域用来包含实现特定的指令,最常用的是pragma:
no-cache。
在http/1.1
协议中,它的含义和cache-control:
no-cache相同。
date头域
date头域表示消息发送的时间,时间的描述格式由rfc822定义。
例如,date:
mon,31dec20xx04:
25:
57gmt。
date描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。
transfer-encoding:
chunked表示输出的内容长度不能确定,普通的静态页面、图片之类的基本上都用不到这个。
但动态页面就有可能会用到,但我也注意到大部分asp,php,动态页面输出的时候大部分还是使用content-length,没有使用transfer-encoding:
chunked。
不过如果结合:
content-encoding:
gzip使用的时候,transfer-encoding:
chunked还是比较有用的。
记得以前实现:
content-encoding:
gzip输出时,先把整个压缩后的数据写到一个很大的字节数组里(如bytearrayoutputstream),然后得到数组大小->content-length。
如果结合transfer-encoding:
chunked使用,就不必申请一个很大的字节数组了,可以一块一块的输出,更科学,占用资源更少。
这在http协议中也是个常见的字段,用于http传送过程的分块技术,原因是http服务器响应的报文长度经常是不可预测的,使用content-length的实体搜捕并不是总是管用。
分块技术的意思是说,实体被分成许多的块,也就是应用层的数据,tcp在传送的过程中,不对它们做任何的解释,而是把应用层产生数据全部理解成二进制流,然后按照mss的长度切成一分一分的,一股脑塞到tcp协议栈里面去,而具体这些二进制的数据如何做解释,需要应用层来完成,所以在这之前,一快整体应用层的数据需要等它分成的所有tcpsegment到达对方,重新组装后,应用程序才使用自己的解码方法还原它们。
http1.1采用了持久的连接,也就是一次tcp的连接不马上释放,允许许多的请求跟响应在一个tcp的连接上发送,所以客户机与服务器需要某种方式来标示一个报文在哪里结束和在下一个报文在哪里开始。
简单的方法是使用呢content-length,但这只有当报文长度可以预先判断的时候才起作用,而对于动态的内容或者在发送数据前不能判定长度的情况下,可以使用分块的方法来传送编码。
web服务器有时生成httpResponse无法在header就确定消息大小的,这时一般来说服务器将不会提供content-length的头信息,而采用chunked编码动态的提供body内容的长度。
进行chunked编码传输的httpResponse会在消息头部设置:
transfer-encoding:
chunked
表示contentbody将用chunked编码传输内容。
chunked编码使用若干个chunk串连而成,由一个标明长度为0的chunk标示结束。
每个chunk分为头部和正文两部分,头部内容指定下一段正文的字符总数(十六进制的数字)和数量单位(一般不写),正文部分就是指定长度的实际内容,两部分之间用回车换行(cRlF)隔开。
在最后一个长度为0的chunk中的内容是称为footer的内容,是一些附加的header信息(通常可以直接忽略)。
http-equiv属性
1、
和用以说明主页制作所使用的文字以及语言;
又如英文是iso-8859-1字符集,还有big5、utf-8、shift-jis、euc、koi8-2等字符集;
2、定时让网页在指定的时间n内,跳转到页面http:
//yourlink;
3、可以用于设定网页的到期时间,一旦过期则必须到服务器上重新调用。
需要注意的是必须使用gmt时间格式;
4、是用于设定禁止浏览器从本地机的缓存中调阅页面内容,设定后一旦离开网页就无法从cache中再调出;
5、cookie设定,如果网页过期,存盘的cookie将被删除。
需要注意的也是必须使用gmt时间格式;
篇三:
http协议
一、tcp/ip协议介绍
在介绍http协议之前,先简单说一下tcp/ip协议的相关内容。
tcp/ip协议是分层的,从底层至应用层分别为:
物理层、链路层、网络层、传输层和应用层,如下图所示:
从应用层至物理层,数据是一层层封装,封装的方式一般都是在原有数据的前面加一个数据控制头,数据封装格式如下:
其中,对于tcp传输协议,客户端在于服务器建立连接前需要经过tcp三层握手,过程如下:
二、
http协议
2.1简介
超文本传输协议(hypertexttransferprotocol,简称http)是应用层协议,自1990年起,http就已经被应用于www全球信息服务系统。
http是一种请求/响应式的协议。
一个客户机与服务器建立连接后,发送一个请求给服务器;服务器接到请求后,给予相应的响应信息。
http的第一版本http/0.9是一种简单的用于网络间原始数据传输的协议;
http/1.0由RFc1945定义,在原http/0.9的基础上,有了进一步的改进,允许消息以类mime信息格式存在,包括请求/响应范式中的已传输数据和修饰符等方面的信息;
http/1.1(RFc2616)的要求更加严格以确保服务的可靠性,增强了在http/1.0没有充分考虑到分层代理服务器、高速缓冲存储器、持久连接需求或虚拟主机等方面的效能;安全增强版的http(
即s-http或https),则是http协议与安全套接口层(ssl)的结合,使http的协议数据在传输过程中更加安全。
2.2协议结构
http协议格式也比较简单,格式如下:
2.3http协议举例
下面是一个http请求及响应的例子:
2.4请求头格式
a)通用头(general-header):
cache-control:
客户端希望服务端如何缓存自己的请求数据,如"cache-control:
no-cache","cache-control:
max-age=0";
connection:
客户端是否希望与服务端之间保持长连接,如"connection:
close",
"connection:
keep-alive";
date:
只有当请求方法为post或put方法时客户端才可能会有些字段;
pragma:
包含了客户端一些特殊请求信息,如"pragma:
no-cache"客户端希望代理或应用服务器不应缓存与该请求相关的结果数据;
Via:
一般用在代理网关向应用服务器发送的请求头中,表明该来自客户端的请求经过了网关代理,
格式为:
"Via:
请求协议版本网关标识[其它信息]",
如:
"Via:
1.1webcache_250_:
80(squid)"
b)请求头(request-header):
accept:
表明客户同端可接受的请求回应的媒体类型范围列表。
星号“*”用于按范围将类型分组,用“*/*”指示可接受全部类型;用“type/*”指示可接受type类型的所有子类型,如“accept:
image/gif,image/jpeg,*/*”;
accept-charset:
客户端所能识别的字符集编码格式,格式:
“accept-charset:
字符集1[:
权重],字符集2[:
权重]”,如:
“accept-charset:
iso-8859-5,unicode-1-1;q=0.8”;
accept-language:
客户端所能识别的语言,格式:
“accept-language:
语言1[:
权重],语言2[:
权重]”,如:
”accept-language:
zh,en;q=0.7”;
host:
客户请求的主机域名或主机ip,格式:
“host:
域名或ip[:
端口号]”,如:
“host:
:
80“,请求行中若有http/1.1则必须有该请求头;
user-agent:
表明用户所使用的浏览器标识,主要用于统计的目的;
Referer:
指明该请求是从哪个关联连接而来;
accept-encoding:
客户端所能识别的编码压缩格式,如:
“accept-encoding:
gzip,deflate”;if-modified-since:
该字段与客户端缓存相关,客户端所访问的uRl自该指定日期以来在服务端是否被修改过,如果修改过则服务端返回新的修改后的信息,如果未修改过则服务器返回304表明此请求所指uRl未曾修改过,如:
“if-modified-since:
Fri,2sep20xx19:
37:
36gmt”;
if-none-match:
该字段与客户端缓存相关,客户端发送uRl请求的同时发送该字段及标识,如果服务端的标识与客户端的标识一致,则返回304表明此uRl未修改过,如果不一致则服务端返回完整的数据信息,如:
“if-none-match:
0f0a893aad8c61:
253,
0f0a893aad8c61:
252,0f0a893aad8c61:
251”;
cookie:
为扩展字段,存储于客户端,向同一域名的服务端发送属于该域的cookie,如:
“cookie:
mailusername=whouse”;
c)实体头(entity-header):
(此类头存在时要求有数据体)
content-encoding:
客户端所能识别的编码压缩格式,如:
“content-encoding:
gzip,deflate”;