http打印Word文件下载.docx
- 文档编号:19965653
- 上传时间:2023-01-12
- 格式:DOCX
- 页数:26
- 大小:268.35KB
http打印Word文件下载.docx
《http打印Word文件下载.docx》由会员分享,可在线阅读,更多相关《http打印Word文件下载.docx(26页珍藏版)》请在冰豆网上搜索。
客户端(192.168.2.33)发出一个图片HTTP请求;
9)No15:
服务器(220.181.50.118)发送状态响应码200OK
……
HTTP的几个重要概念
连接:
Connection
此header的含义是当client和server通信时对于长链接如何进行处理。
“Keep-Alive”持久连接,如果client使用http1.1协议,但又不希望使用长链接,则需要在header中指明connection的值为close,不论request还是response的header中包含了值为close的connection,都表明当前正在使用的tcp链接在当天请求处理完毕后会被断掉。
以后client再进行新的请求时就必须创建新的tcp链接了。
消息:
Message
HTTP通讯的基本单位,包括一个结构化的八元组序列并通过连接传输。
请求:
Request
一个从客户端到服务器的请求信息包括应用于资源的方法、资源的标识符和协议的版本号。
响应:
Response
一个从服务器返回的信息包括HTTP协议的版本号、请求的状态(例如“成功”或“没找到”)和文档的MIME类型。
资源:
Resource
由URI标识的网络数据对象或服务。
实体:
Entity
数据资源或来自服务资源的回映的一种特殊表示方法,它可能被包围在一个请求或响应信息中。
一个实体包括实体头信息和实体的本身内容。
客户机:
Client
一个为发送请求目的而建立连接的应用程序。
用户代理:
UserAgent
初始化一个请求的客户机。
它们是浏览器、编辑器或其它用户工具。
服务器:
Server
一个接受连接并对请求返回信息的应用程序。
源服务器:
Originserver
是一个给定资源可以在其上驻留或被创建的服务器。
代理:
Proxy
一个中间程序,它可以充当一个服务器,也可以充当一个客户机,为其它客户机建立请求。
请求是通过可能的翻译在内部或经过传递到其它的服务器中。
一个代理在发送请求信息之前,必须解释并且如果可能重写它。
代理经常作为通过防火墙的客户机端的门户,代理还可以作为一个帮助应用来通过协议处理没有被用户代理完成的请求。
网关:
Gateway
一个作为其它服务器中间媒介的服务器。
与代理不同的是,网关接受请求就好象对被请求的资源来说它就是源服务器;
发出请求的客户机并没有意识到它在同网关打交道。
网关经常作为通过防火墙的服务器端的门户,网关还可以作为一个协议翻译器以便存取那些存储在非HTTP系统中的资源。
通道:
Tunnel
是作为两个连接中继的中介程序。
一旦激活,通道便被认为不属于HTTP通讯,尽管通道可能是被一个HTTP请求初始化的。
当被中继的连接两端关闭时,通道便消失。
当一个门户(Portal)必须存在或中介(Intermediary)不能解释中继的通讯时通道被经常使用。
缓存:
Cache
反应信息的局域存储。
HTTP/1.0和HTTP/1.1的比较
(1)建立连接方面
HTTP/1.0每次请求都需要建立新的TCP连接,连接不能复用。
HTTP/1.1新的请求可以在上次请求建立的TCP连接之上发送,连接可以复用。
优点是减少重复进行TCP三次握手的开销,提高效率。
注意:
在同一个TCP连接中,新的请求需要等上次请求收到响应后,才能发送。
(2)Host域
HTTP1.1在Request消息头里头多了一个Host域,HTTP1.0则没有这个域。
Host:
www.w3.org
可能HTTP1.0的时候认为,建立TCP连接的时候已经指定了IP地址,这个IP地址上只有一个host。
(3)日期时间戳
接收方向
无论是HTTP1.0还是HTTP1.1,都要能解析下面三种date/timestamp:
Sun,
06
Nov
1994
08:
49:
37
GMT
;
RFC
822,
updated
by
1123
Sunday,
06-Nov-94
850,
obsoleted
1036
Sun
6
ANSI
C'
s
asctime()
format
发送方向
HTTP1.0要求不能生成第三种asctime格式的date/timestamp;
HTTP1.1则要求只生成RFC1123(第一种)格式的date/timestamp。
(4)状态响应码
状态响应码100(Continue)状态代码的使用,允许客户端在发request消息body之前先用requestheader试探一下server,看server要不要接收requestbody,再决定要不要发requestbody。
客户端在Request头部中包含
Expect:
100-continue
Server看到之后呢如果回100(Continue)这个状态代码,客户端就继续发requestbody。
这个是HTTP1.1才有的。
另外在HTTP/1.1中还增加了101、203、205等等性状态响应码
(5)请求方式
HTTP1.1增加了OPTIONS,PUT,DELETE,TRACE,CONNECT这些Request方法.
Method
="
OPTIONS"
;
Section9.2
|"
GET"
Section9.3
HEAD"
Section9.4
POST"
Section9.5
PUT"
Section9.6
DELETE"
Section9.7
TRACE"
Section9.8
CONNECT"
Section9.9
|extension-method
extension-method=token
Http协议定义了很多与服务器交互的方法,最基本的有4种,分别是GET、POST、PUT、DELETE。
HTTP中的GET、POST、PUT、DELETE就对应着对这个资源的查、改、增、删4个操作,我们最常见的就是GET和POST了。
GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。
HTTP头信息解读
HTTP的头域包括通用头、请求头、响应头和实体头四个部分。
每个头域由一个域名,冒号(:
)和域值三部分组成。
通用头部是客户端和服务器都可以使用的头部,可以在客户端、服务器和其他应用程序之间提供一些非常有用的通用功能,如Date头部。
请求头部是请求报文特有的,它们为服务器提供了一些额外信息,比如客户端希望接收什么类型的数据,如Accept头部。
响应头部便于客户端提供信息,比如,客服端在与哪种类型的服务器进行交互,如Server头部。
实体头部指的是用于应对实体主体部分的头部,比如,可以用实体头部来说明实体主体部分的数据类型,如Content-Type头部。
HTTP消息分为请求消息和响应消息两类。
HTTP请求消息
请求消息=请求行(通用信息|请求头|实体头)CRLF[实体内容]
请求行=方法 请求URI HTTP版本号 CRLF
GETHTTP/1.0//请求行
HTTP请求消息的结构,包括:
·
一个请求行;
若干消息头;
实体内容;
消息头和实体内容是可选的,消息头和实体内容之间要用空行隔开。
而且只有通过post、put、delete方式提交请求时,才可以有实体内容,get方式提交时不能有实体内容。
方法=GET|HEAD|POST|扩展方法
URL=协议名称+宿主名+目录与文件名
请求行中的方法描述指定资源中应该执行的动作,常用的方法有GET、HEAD和POST。
HTTP的请求方法包括如下几种:
GET,POST,HEAD,PUT,DELETE,OPTIONS,TRACE,CONNECT
GET—浏览器要求从服务器处获得信息。
HEAD—HEAD和GET很相似,只不过HEAD不接受HTTP响应的内容部分。
当你发送了一个HEAD请求,那就意味着你只对HTTP头部感兴趣,而不是文档本身。
这个方法可以让浏览器判断页面是否被修改过,从而控制缓存。
也可判断所请求的文档是否存在。
例如,假如你的网站上有很多链接,那么你就可以简单的给他们分别发送HEAD请求来判断是否存在死链,这比使用GET要快很多。
POST—从客户机向服务器传送数据,在要求服务器和CGI做进一步处理时会用到POST方法。
POST主要用于发送HTML文本中FORM的内容,让CGI程序处理。
PUT—浏览器要求将消息中所包含的消息实体写入服务器。
OPTIONS—返回服务器针对特定资源所支持的HTTP请求方法。
也可以利用向Web服务器发送'
*'
的请求来测试服务器的功能性。
DELETE—请求服务器删除Request-URI所标识的资源。
TRACE—回显服务器收到的请求,主要用于测试或诊断。
CONNECT—HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
一个请求的例子为:
GETHTTP/1.0
头信息又称为元信息,即信息的信息,利用元信息可以实现有条件的请求或应答。
请求头——告诉服务器怎样解释本次请求,主要包括用户可以接受的数据类型、压缩方法和语言等。
实体头——实体信息类型、长度、压缩方法、最后一次修改时间、数据有效期等。
实体——请求或应答对象本身。
常用的请求方式是GET和POST.
Get是向服务器发索取数据的一种请求;
而Post是向服务器提交数据的一种请求,要提交的数据位于信息头后面的实体中。
GET与POST方法有以下区别:
(1)在客户端,Get方式在通过URL提交数据,数据在URL中可以看到;
POST方式,数据放置在HTMLHEADER内提交。
(2)GET方式提交的数据最多只能有1024字节,而POST则没有此限制。
(3)安全性问题。
正如在
(1)中提到,使用Get的时候,参数会显示在地址栏上,而Post不会。
所以,如果这些数据是中文数据而且是非敏感数据,那么使用get;
如果用户输入的数据不是中文字符而且包含敏感数据,那么还是使用post为好。
(4)
安全的和幂等的。
所谓安全的意味着该操作用于获取信息而非修改信息。
幂等的意味着对同一URL的多个请求应该返回同样的结果。
GET请求一般不应产生副作用。
从根本上讲,其目标是当用户打开一个链接时,她可以确信从自身的角度来看没有改变资源。
比如,新闻站点的头版不断更新。
虽然第二次请求会返回不同的一批新闻,该操作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。
反之亦然。
POST请求就不那么轻松了。
POST表示可能改变服务器上的资源的请求。
仍然以新闻站点为例,读者对文章的注解应该通过POST请求实现,因为在注解提交之后站点已经不同了(比方说文章下面出现一条注解)。
GET/tutorials/other/top-20-mysql-best-practices/HTTP/1.1
User-Agent:
Mozilla/5.0(Windows;
U;
WindowsNT6.1;
en-US;
rv:
1.9.1.5)Gecko/20091102Firefox/3.5.5(.NETCLR3.5.30729)
Accept:
text/html,application/xhtml+xml,application/xml;
q=0.9,*/*;
q=0.8
Accept-Language:
en-us,en;
q=0.5
Accept-Encoding:
gzip,deflate
Accept-Charset:
ISO-8859-1,utf-8;
q=0.7,*;
q=0.7
Keep-Alive:
300
Connection:
keep-alive
Cookie:
PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120
Pragma:
no-cache
Cache-Control:
HTTP最常见的请求头如下:
l
Accept:
浏览器可接受的MIME类型;
Accept-Charset:
浏览器可接受的字符集;
Accept-Encoding:
浏览器能够进行解码的数据编码方式,比如gzip。
Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面,可以减少80%文件大小。
可以减少5到10倍的下载时间;
在PHP中可以使用$_SERVER["
HTTP_ACCEPT_ENCODING"
]获取该信息
Accept-Language:
浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到;
它通过逗号分割来携带多国语言,以通过这个信息来重定向用户的浏览器。
if(substr($_SERVER['
HTTP_ACCEPT_LANGUAGE'
],0,2)=='
fr'
){
header('
Location:
'
);
}
Authorization:
当一个页面需要授权,浏览器就会弹出一个登陆窗口,输入正确的帐号后,浏览器会发送一个HTTP请求,但此时会包含这样一个头部:
Authorization:
BasicbXl1c2VyOm15cGFzcw==
包含在头部的这部分信息是base64encoded。
例如,base64_decode(‘bXl1c2VyOm15cGFzcw==’)会被转化为‘myuser:
mypass’。
在PHP中,这个值可以用$_SERVER['
PHP_AUTH_USER'
]和$_SERVER['
PHP_AUTH_PW'
]获得。
Connection:
表示是否需要持久连接。
如果Servlet看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP1.1(HTTP1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。
要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:
先把内容写入ByteArrayOutputStream,然后在正式写出内容之前计算它的大小;
Content-Length:
表示请求消息正文的长度;
Cookie:
他会发送你浏览器中存储的Cookie信息给服务器。
PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120;
foo=bar
它是用分号分割的一组名值对。
Cookie也可以包含sessionid。
在PHP中,单一的Cookie可以访问$_COOKIE数组获得。
你可以直接用$_SESSION数组获取session变量。
如果你需要sessionid,那么你可以使用session_id()函数代替cookie。
echo$_COOKIE['
foo'
];
//output:
bar
PHPSESSID'
r2t5uvjq435r4q7ib3vtdjq120
session_start();
echosession_id();
From:
请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它;
Host:
初始URL中的主机和端口;
在PHP中,可以通过$_SERVER['
HTTP_HOST'
]或$_SERVER['
SERVER_NAME'
]来查看。
If-Modified-Since:
如果一个页面已经在你的浏览器中被缓存,那么你下次浏览时浏览器将会检测文档是否被修改过,那么它就会发送这样的头部If-Modified-Since:
Sat,28Nov200906:
38:
19GMT
如果自从这个时间以来未被修改过,那么服务器将会返回“304NotModified”,而且不会再返回内容。
浏览器将自动去缓存中读取内容。
在PHP中,可以用$_SERVER['
HTTP_IF_MODIFIED_SINCE'
]来检测。
Pragma:
指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝;
Referer:
头部将会包含referringurl信息,在PHP中,可以通过$_SERVER['
HTTP_REFERER'
]获取该值。
if(isset($_SERVER['
])){
$url_info=parse_url($_SERVER['
]);
//isthesurfercomingfromGoogle?
if($url_info['
host'
]=='
'
parse_str($url_info['
query'
],$vars);
echo"
YousearchedonGoogleforthiskeyword:
"
.$vars['
q'
User-Agent:
浏览器类型。
这个头部可以携带如下几条信息:
浏览器名和版本号,操作系统名和版本号,默认语言。
这就是某些网站用来收集访客信息的一般手段。
例如,你可以判断访客是否在使用手机访问你的网站,然后决定是否将他们引导至一个在低分辨率下表现良好的移动网站。
在PHP中,可以通过$_SERVER['
HTTP_USER_AGENT'
]来获取User-Agent
if(strstr($_SERVER['
],'
MSIE6'
)){
PleasestopusingIE6!
"
UA-Pixels,UA-Color,UA-OS,UA-CPU:
由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU类型。
php构造http请求
if(empty($_REQUEST['
email'
]))
{
$fp=fsockopen("
80,$errno,$errstr,30);
if(!
$fp){
$errstr($errno)
/n"
}else{
$out="
POST/index.phpHTTP/1.1/r/n"
$out.="
Mozilla/5.0(X11;
Linuxi686;
en-GB;
1.9.2.15)Gecko/20110303Ubuntu/10.04(lucid)Firefox/3.6.15/r/n"
q=0.8/r/n"
en-gb,en;
q=0.5/r/n"
gzip,deflate/r/n"
Content-Type:
application/x-www-form-urlencoded/r/n"
Content-Length:
80/r/n"
Close/r/n/r/n"
email=youname%&
password=you
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- http 打印