http协议传输数据Word格式.docx
- 文档编号:6124216
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:13
- 大小:21.89KB
http协议传输数据Word格式.docx
《http协议传输数据Word格式.docx》由会员分享,可在线阅读,更多相关《http协议传输数据Word格式.docx(13页珍藏版)》请在冰点文库上搜索。
以至于后来有了session之类的玩意。
实战准备工作:
在监视网络方面,windows平台上有一款叫做sniffer的优秀软件,这也是很多“黑客”经常使用的嗅探工具。
在
研究http协议时,推荐大家使用一款
叫作httpwatch的工具。
(遗憾的是,该工具是收费的。
该咋办就咋办,你懂的)。
安装完成后,可以在ie浏览
器的tools中直接打开(目前也支持firefox)。
如图所示:
点击Record,就可以开始监视并记录http消息了。
stop、clear等等按钮的功能,这里就不一一介绍了。
拿实例
来说话,下面就是我记录访问main.aspx页面的时候记录的,能够清晰的看到http报文消息的详细信息,如图:
学习http协议,主要需要了解http的请求和响应(当然,还有get、post等请求方式,状态码、uRi、mime等)
首先看看http请求消息(就是浏览器丢给服务器的):
一个http请求代表客户端浏览器向服务器发送的数据。
一个完整的http请求消息,包含一个请求行,若干个消
息头(请求头),换行,实体内容
请求行:
描述客户端的请求方式、请求资源的名称、http协议的版本号。
例如:
get/book/jaVa.htmlhttp/1.1
请求头(消息头)包含(客户机请求的服务器主机名,客户机的环境信息等):
accept:
用于告诉服务器,客户机支持的数据类型(例如:
accept:
text/html,image/*)
accept-charset:
用于告诉服务器,客户机采用的编码格式
accept-encoding:
用于告诉服务器,客户机支持的数据压缩格式
accept-language:
客户机语言环境
host:
客户机通过这个服务器,想访问的主机名
if-modified-since:
客户机通过这个头告诉服务器,资源的缓存时间
Referer:
客户机通过这个头告诉服务器,它(客户端)是从哪个资源来访问服务器的(防盗链)
user-agent:
客户机通过这个头告诉服务器,客户机的软件环境(操作系统,浏览器版本等)
cookie:
客户机通过这个头,将coockie信息带给服务器
connection:
告诉服务器,请求完成后,是否保持连接
date:
告诉服务器,当前请求的时间
(换行)
实体内容:
就是指浏览器端通过http协议发送给服务器的实体数据。
name=dylancontext.Response.writeFile("
aa.jpg"
);
transfer-encoding:
告诉浏览器,传送数据的编码格式
etag:
缓存相关的头(可以做到实时更新)
expries:
告诉浏览器回送的资源缓存多长时间。
如果是-1或者0,表示不缓存
cache-control:
控制浏览器不要缓存数据no-cache
pragma:
响应完成后,是否断开连接。
close/keep-alive
告诉浏览器,服务器响应时间
理解了以上的http请求消息和响应消息,相信你对于http协议已经理解得足够深刻了。
关于http协议的更多具体
细节,可以参照httpRFc文档。
大致步骤就是:
浏览器先向服务器发送请求,服务器接收到请求后,做相应的处理,然后封装好响应报文,再
回送给浏览器。
浏览器拿到响应报文后,再通过浏览器引擎去渲染网页,解析dom树,javascript引擎解析并执行脚本操作,揑件去干揑件该干的事儿...关于浏览器渲染、解析的原理,可以参考
说白了,所谓web的本质,无非是:
请求/处理/响应,任何的web服务器,任何的服务端编程语言,都没法脱离这个本质。
而浏览器端解析html、图片等静态内容,呈现给用户,脚本引擎执行脚本代码,完成脚本代码要做的事儿(例如dom操作,css属性更改,发送ajax请求等等)。
笔者浅浅的认为,其实浏览器就是一种特殊的client,而b/s架构也是一种特殊的c/s架构。
这里值得一提的是,不同的web服务器和编程语言,又是如何接收用户http请求。
如何处理,如何响应的呢?
笔者拿熟悉的为例,通过反编译工具查看源代码(微软这家伙实在封装的太好了)从底层迚行了剖析,如图:
1.mime类型被定义在content-typeheader中,这个你要看看http协议,不管是java还是.net都一样,是传输协议支持的。
这样浏览器就可以用相应的程序去解析。
比如ie可以在接收到doc文档后自动用word打(http协议传输数据)开。
一般就是application/xxx
常见的mime类型(通用型):
超文本标记语言文本.htmltext/html
xml文档.xmltext/xml
xhtml文档.xhtmlapplication/xhtml+xml
普通文本.txttext/plain
RtF文本.rtfapplication/rtf
pdF文档.pdfapplication/pdf
microsoftword文件.wordapplication/msword
png图像.pngimage/png
giF图形.gifimage/gif
jpeg图形.jpeg,.jpgimage/jpeg
au声音文件.auaudio/basic
midi音乐文件
mid,.midiaudio/midi,audio/x-midi
Realaudio音乐文件.ra,.ramaudio/x-pn-realaudiompeg文件.mpg,.mpegvideo/mpegaVi文件.avivideo/x-msvideogzip文件.gzapplication/x-gziptaR文件.tarapplication/x-tar任意的二进制数据application/octet-stream
篇二:
http协议数据传输
1
usingsystem;
usingsystem.collections.generic;
usingsystem.text;
;
.sockets;
usingsystem.collections;
usingsystem.io;
usingsystem.text.Regularexpressions;
usingRe=system.text.Regularexpressions.Regex;
usingsystem.security.cryptography.x509certificates;
/***************************************************************************************************************************************************
**文件名:
httpproc.cs
**创建人:
hedaode
**日期:
20xx.09.01
**描述:
实现http协议中的get、post请求
**使用:
httpproc.webclientclient=newhttpproc.webclient();
client.encoding=system.text.encoding.default;
//默认编码方式,根据需要设置其他类型get请求
messagebox.show(client.Resphtml);
//获取返回的网页源代码
下载文件
提交表单,此处是登录XX的示例
上传文件"
folder=myfolder//提交含文本域和文件域的表单
*****************************************************************************************************************************************************/
namespacehttpproc
{
///
///上传事件委托
///
publicdelegatevoidwebclientuploadevent(objectsender,httpproc.uploadeventargse);
///下载事件委托
publicdelegatevoidwebclientdownloadevent(objectsender,httpproc.downloadeventargse);
///上传事件参数
publicstructuploadeventargs
///上传数据总大小
publiclongtotalbytes;
///已发数据大小
publiclongbytessent;
///发送进度(0-1)
publicdoublesendprogress;
///发送速度bytes/s
publicdoublesendspeed;
}
///下载事件参数
publicstructdownloadeventargs
///下载数据总大小
///已接收数据大小
publiclongbytesReceived;
///接收数据进度(0-1)
publicdoubleReceiveprogress;
///当前缓冲区数据
publicbyte[]receivedbuffer;
///接收速度bytes/s
publicdoublereceivespeed;
///实现向web服务器发送和接收数据
publicclasswebclient
privatewebheadercollectionrequestheaders,responseheaders;
privatetcpclientclientsocket;
privatememorystreampoststream;
privateencodingencoding=encoding.default;
privateconststringboundaRy="
--hedaode--"
;
privateconstintsend_buFFeR_size=10245;
privateconstintReceiVe_buFFeR_size=10245;
privatestringcookie="
"
privatestringresphtml="
privatestringstrRequestheaders="
privatestringstrResponseheaders="
privateintstatuscode=0;
privatebooliscanceled=false;
publiceventwebclientuploadeventuploadprogresschanged;
publiceventwebclientdownloadeventdownloadprogresschanged;
///初始化webclient类
publicwebclient()
responseheaders=newwebheadercollection();
requestheaders=newwebheadercollection();
///读取指定uRl的文本
/// 请求的地址
///服务器响应文本
publicstringopenRead(stringuRl)
requestheaders.add("
connection"
"
close"
sendRequestdata(uRl,"
get"
returngethtml();
//解决证书过期无法访问的问题
classcertpolicy:
icertificatepolicy
publicboolcheckValidationResult(servicepointsrvpt,x509certificatecert,webRequestreq,intcertprb)
{returntrue;
}
///采用https协议访问网络
/// url地址
/// 发送的数据
publicstringopenReadwithhttps(stringuRl,stringstrpostdata)
servicepointmanager.certificatepolicy=newcertpolicy();
httpwebRequestrequest=(httpwebRequest)webRequest.create(uRl);
request.cookiecontainer=newcookiecontainer();
request.method="
post"
request.accept="
*/*"
request.contenttype="
application/x-www-form-urlencoded"
byte[]buffer=this.encoding.getbytes(strpostdata);
request.contentlength=buffer.length;
request.getRequeststream().write(buffer,0,buffer.length);
httpwebResponseresponse=(httpwebResponse)request.getResponse();
streamReaderreader=newstreamReader(response.getResponsestream(),encoding);
this.resphtml=reader.Readtoend();
foreach(.cookieckinresponse.cookies)
this.cookie+=ck.name+"
="
+ck.Value+"
reader.close();
returnresphtml;
/// 向服务器发送的文本数据
publicstringopenRead(stringuRl,stringpostdata)
byte[]sendbytes=encoding.getbytes(postdata);
poststream=newmemorystream();
poststream.write(sendbytes,0,sendbytes.length);
content-length"
poststream.length.tostring());
content-type"
requestheaders.add("
///读取指定uRl的流
/// 向服务器发送的数据
///服务器响应流
publicstreamgetstream(stringuRl,stringpostdata)
memorystreamms=newmemorystream();
savenetworkstream(ms);
篇三:
http协议简介及其工作原理
http协议简介及其工作原理
1.http的概述
超文本传输协议(http)是万维网应用层的协议,是通过两个程序实现:
一个是
客户端程序(一般称为浏览器),另一个是服务器(常称web服务器)。
这两个通常运行在不同的主机上通过交换http报文来完成网页请求和响应。
并且http定义了报文的结构和客户/服务器之间交换报文的规则。
2.http的工作流程
浏览器可以向web服务器发送请求并显示收到的网页,当用户在浏览器地址栏中输入一个uRl或点击一个超连接时,浏览器就向服务器发出了http请求,该请求被送往由uRl指定的web服务器,web服务器接收到请求后,进行相关文档的检索并以http规定的格式送回所要求的文件或其他相关信息,再由用户计算机上的浏览器负责解释和显示。
在http协议中,由于web服务器在发送用户要求的文档过程中,并不储存任何有关客户端的状态信息。
如果某个客户端在几秒钟内两次要求同一文档,服务器绝对不会认为不合理,因为它根本不记得用户端曾经来访过,因此http不维持客户端状态,故它又被称为无状态协议。
3.http运作过程中的连接
3.1连接过程说明
假设某个网页有10个jpFg图像,总共11个对象存在同一个服务器中,该网页的基本文档形式uRl为:
当采用http/1.0时,web服务过程:
⑴.http的客户端启用了对服务器的tcp连接,该服务器的80
号端口(http的默认端口)用来监听来自网络的网络服务请求。
⑵.http的客户端通过第一步建立的链接套接字发送“请求报文”。
请求报文中包含了文档的路径名(/somedepartment/home.index)。
⑶.http服务器通过第一步建立连接套接字收到了该请求报文,从磁盘或内存中查找
/somedepartment/home.index,将文档封存在http的“相应报文”中,并通过先前建立的套接字将该报文送到客户端。
⑷.http服务器告诉tcp断开连接(tcp在客户端完全收到响应报文之前不会断开tcp
连接)。
⑸.当客户端接受完响应报文,本次tcp连接即告结束。
到达的报文说明所封装的内容是
html基本文件,客户端从响应报文中取出文件,对html文件进行解析,从而发现该文件还要引用另外10个jpeg对象。
⑹.针对所有的jpeg对象,需要重复进行前四个步骤。
上述步骤使用的是非坚持连接的的工作模式,由于服务器在每个对象发送后都要关闭tcp连接。
由于tcp连接传输一个请求报文和一个响应报文,这样上述例子传送一个网页需要11次tcp连接,效率比较低。
由于每个请求的对象建立和维持一个“崭新”的连接,在客户端和服务器端都要为tcp分配缓存并保持tcp变量,这会对同时几百个客户服务端的web服务器造成城中负担。
3.2提高http服务效率的两种方法
⒈从一个客户端同时发送多个tcp连接并列到一个web服务器上,即建立“并行”的tcp连接,目前浏览器可以配置5~10个并行连接,每个连接完成一次http的报文交换,但其没有从根本上解决服务器负担问题。
2.使用持续连接模式,服务器在完成一次http报文交互后继续保持连接,统一客户端和服务器之间后继的请求和响应报文可以在原来的连接进行。
4.http报文格式
4.1送往服务器的请求报文
下面是一个浏览器发往服务器的请求报文样例:
get/test/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- http 协议 传输 数据