HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
W3C
HTTP 工作原理
HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。
Web服务器有:Apache服务器,IIS服务器(Internet Information Services)等。
Web服务器根据接收到的请求后,向客户端发送响应信息。
HTTP默认端口号为80,但是你也可以改为8080或者其他端口。
HTTP三点注意事项:
- HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
- HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
- HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
HTTP 消息结构
客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,下图给出了请求报文的一般格式。
服务器响应消息
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
HTTP 请求方法
HTTP请求方法
根据HTTP标准,HTTP请求可以使用多种请求方法。
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
序号 | 方法 | 描述 |
---|---|---|
1 | GET | 请求指定的页面信息,并返回实体主体。 . |
2 | HEAD | 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 . |
3 | POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 . |
4 | PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 . |
5 | DELETE | 请求服务器删除指定的页面。 . |
6 | CONNECT | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 . |
7 | OPTIONS | 允许客户端查看服务器的性能。 . |
8 | TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
HTTP 响应头信息
HTTP请求头提供了关于请求,响应或者其他的发送实体的信息
应答头 | 说明 |
---|---|
Allow | 服务器支持哪些请求方法(如GET、POST等)。 |
Content-Encoding | 文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压 缩文档能够显著地减少HTML文档的下载时间。Java的GZIPOutputStream可以很方便地进行gzip压缩,但只有Unix上的 Netscape和Windows上的IE 4、IE 5才支持它。因此,Servlet应该通过查看Accept-Encoding头(即request.getHeader("Accept- Encoding"))检查浏览器是否支持gzip,为支持gzip的浏览器返回经gzip压缩的HTML页面,为其他浏览器返回普通页面。 . |
Content-Length | 表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。如果你想要利用持久连接的优势,可以把输出文档写入 ByteArrayOutputStram,完成后查看其大小,然后把该值放入Content-Length头,最后通过 byteArrayStream.writeTo(response.getOutputStream()发送内容。 . |
Content-Type | 表示后面的文档属于什么MIME类型。Servlet默认为text/plain,但通常需要显式地指定为text/html。由于经常要设置Content-Type,因此HttpServletResponse提供了一个专用的方法setContentType。 . |
Date | 当前的GMT时间。你可以用setDateHeader来设置这个头以避免转换时间格式的麻烦。 . |
Expires | 应该在什么时候认为文档已经过期,从而不再缓存它? . |
Last-Modified | 文档的最后改动时间。客户可以通过If-Modified-Since请求头提供一个日期,该请求将被视为一个条件 GET,只有改动时间迟于指定时间的文档才会返回,否则返回一个304(Not Modified)状态。Last-Modified也可用setDateHeader方法来设置。 . |
Location | 表示客户应当到哪里去提取文档。Location通常不是直接设置的,而是通过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302。 . |
Refresh | 表示浏览器应该在多少时间之后刷新文档,以秒计。除了刷新当前文档之外,你还可以通过setHeader("Refresh", "5; URL=http://host/path")让浏览器读取指定的页面。
注 意这种功能通常是通过设置HTML页面HEAD区的<META HTTP-EQUIV="Refresh" CONTENT="5;URL=http://host/path">实现,这是因为,自动刷新或重定向对于那些不能使用CGI或Servlet的 HTML编写者十分重要。但是,对于Servlet来说,直接设置Refresh头更加方便。
注意Refresh的意义是”N秒之后刷 新本页面或访问指定页面”,而不是”每隔N秒刷新本页面或访问指定页面”。因此,连续刷新要求每次都发送一个Refresh头,而发送204状态代码则可 以阻止浏览器继续刷新,不管是使用Refresh头还是<META HTTP-EQUIV=”Refresh” …>。 注意Refresh头不属于HTTP 1.1正式规范的一部分,而是一个扩展,但Netscape和IE都支持它。 |
Server | 服务器名字。Servlet一般不设置这个值,而是由Web服务器自己设置。 . |
Set-Cookie | 设置和页面关联的Cookie。Servlet不应使用response.setHeader(“Set-Cookie”, …),而是应使用HttpServletResponse提供的专用方法addCookie。参见下文有关Cookie设置的讨论。 . |
WWW-Authenticate | 客户应该在Authorization头中提供什么类型的授权信息?在包含401(Unauthorized)状态行的 应答中这个头是必需的。例如,response.setHeader(“WWW-Authenticate”, “BASIC realm=\”executives\””)。 注意Servlet一般不进行这方面的处理,而是让Web服务器的专门机制来控制受密码保护页面的访问(例如.htaccess)。 |
HTTP content-type
Content-Type,内容类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些Asp网页点击的结果却是下载到的一个文件或一张图片的原因。
HTTP content-type 对照表
文件扩展名 | Content-Type(Mime-Type) | 文件扩展名 | Content-Type(Mime-Type) |
---|---|---|---|
.( 二进制流,不知道下载文件类型) | application/octet-stream | .tif | image/tiff |
.001——————————— | application/x-001—————— | .301—– | application/x-301 |
.323——————————— | text/h323—————————– | .906—– | application/x-906 |
.907——————————— | drawing/907————————– | .a11—– | application/x-a11 |
.acp——————————— | audio/x-mei-aac———————- | .ai——– | application/postscript |
.aif——————————– | audio/aiff————————– | .aifc—– | audio/aiff |
.aiff——————————— | audio/aiff————————– | .anv | application/x-anv |
.asa——————————— | text/asa————————– | .asf | video/x-ms-asf |
.asp——————————— | text/asp————————– | .asx | video/x-ms-asf |
.au——————————— | audio/basic————————– | .avi | video/avi |
.awf——————————— | application/vnd.adobe.workflow | .biz | text/xml |
.bmp——————————– | application/x-bmp | .bot | application/x-bot |
.c4t——————————— | application/x-c4t | .c90 | application/x-c90 |
.cal——————————— | application/x-cals | .cat | application/vnd.ms-pki.seccat |
.cdf——————————— | application/x-netcdf | .cdr | application/x-cdr |
.cel——————————— | application/x-cel | .cer | application/x-x509-ca-cert |
.cg4——————————— | application/x-g4 | .cgm | application/x-cgm |
.cit——————————— | application/x-cit———————– | .class | java/ |
.cml——————————— | text/xml————————– | .cmp | application/x-cmp |
.cmx——————————– | application/x-cmx | .cot | application/x-cot |
.crl——————————— | application/pkix-crl | .crt | application/x-x509-ca-cert |
.csi——————————— | application/x-csi | .css | text/css |
.cut——————————— | application/x-cut | .dbf | application/x-dbf |
.dbm——————————– | application/x-dbm | .dbx | application/x-dbx |
.dcd——————————— | text/xml | .dcx | application/x-dcx |
.der——————————— | application/x-x509-ca-cert | .dgn | application/x-dgn |
.dib——————————— | application/x-dib | .dll | application/x-msdownload |
.doc——————————— | application/msword | .dot | application/msword |
.drw——————————— | application/x-drw | .dtd | text/xml |
.dwf——————————— | Model/vnd.dwf | .dwf | application/x-dwf |
.dwg——————————– | application/x-dwg | .dxb | application/x-dxb |
.dxf——————————— | application/x-dxf | .edn | application/vnd.adobe.edn |
.emf——————————— | application/x-emf | .eml | message/rfc822 |
.ent——————————— | text/xml————————– | .epi | application/x-epi |
.eps——————————— | application/x-ps | .eps | application/postscript |
.etd——————————— | application/x-ebx | .exe | application/x-msdownload |
.fax——————————— | image/fax————————– | .fdf | application/vnd.fdf |
.fif——————————— | application/fractals | .fo | text/xml |
.frm——————————— | application/x-frm | .g4 | application/x-g4 |
.gbr——————————— | application/x-gbr | . | application/x- |
.gif——————————— | image/gif————————– | .gl2 | application/x-gl2 |
.gp4——————————— | application/x-gp4 | .hgl | application/x-hgl |
.hmr——————————— | application/x-hmr | .hpg | application/x-hpgl |
.hpl——————————— | application/x-hpl | .hqx | application/mac-binhex40 |
.hrf——————————— | application/x-hrf | .hta | application/hta |
.htc——————————— | text/x-component | .htm | text/html |
.html——————————– | text/html | .htt | text/webviewhtml |
.htx——————————— | text/html | .icb | application/x-icb |
.ico——————————— | image/x-icon | .ico | application/x-ico |
.iff——————————— | application/x-iff | .ig4 | application/x-g4 |
.igs——————————— | application/x-igs | .iii | application/x-iphone |
.img——————————— | application/x-img | .ins | application/x-internet-signup |
.isp——————————— | application/x-internet-signup | .IVF | video/x-ivf |
.java——————————— | java/*————————– | .jfif | image/jpeg |
.jpe——————————— | image/jpeg————————– | .jpe | application/x-jpe |
.jpeg——————————– | image/jpeg————————– | .jpg | image/jpeg |
.jpg——————————— | application/x-jpg | .js | application/x-javascript |
.jsp——————————— | text/html————————– | .la1 | audio/x-liquid-file |
.lar——————————— | application/x-laplayer-reg | .latex | application/x-latex |
.lavs——————————— | audio/x-liquid-secure | .lbm | application/x-lbm |
.lmsff——————————– | audio/x-la-lms | .ls | application/x-javascript |
.ltr——————————— | application/x-ltr | .m1v | video/x-mpeg |
.m2v——————————– | video/x-mpeg————————- | .m3u | audio/mpegurl |
.m4e——————————– | video/mpeg4 | .mac | application/x-mac |
.man——————————– | application/x-troff-man | .math | text/xml |
.mdb——————————– | application/msaccess | .mdb | application/x-mdb |
.mfp——————————— | application/x-shockwave-flash | .mht | message/rfc822 |
.mhtml—————————— | message/rfc822———————- | .mi | application/x-mi |
.mid——————————— | audio/mid————————– | .midi | audio/mid |
.mil——————————— | application/x-mil | .mml | text/xml |
.mnd——————————– | audio/x-musicnet-download | .mns | audio/x-musicnet-stream |
.mocha—————————— | application/x-javascript | .movie | video/x-sgi-movie |
.mp1——————————- | audio/mp1 | .mp2 | audio/mp2 |
.mp2v——————————- | video/mpeg | .mp3 | audio/mp3 |
.mp4——————————– | video/mpeg4 | .mpa | video/x-mpg |
.mpd——————————– | application/vnd.ms-project | .mpe | video/x-mpeg |
.mpeg——————————- | video/mpg————————– | .mpg | video/mpg |
.mpga——————————- | audio/rn-mpeg | .mpp | application/vnd.ms-project |
.mps——————————– | video/x-mpeg————————- | .mpt | application/vnd.ms-project |
.mpv——————————– | video/mpg————————– | .mpv2 | video/mpeg |
.mpw——————————– | application/vnd.ms-project | .mpx | application/vnd.ms-project |
.mtx——————————— | text/xml————————– | .mxp | application/x-mmxp |
.net——————————— | image/pnetvue | .nrf | application/x-nrf |
.nws——————————— | message/rfc822 | .odc | text/x-ms-odc |
.out——————————— | application/x-out | .p10 | application/pkcs10 |
.p12——————————— | application/x-pkcs12 | .p7b | application/x-pkcs7-certificates |
.p7c——————————— | application/pkcs7-mime | .p7m | application/pkcs7-mime |
.p7r——————————— | application/x-pkcs7-certreqresp | .p7s | application/pkcs7-signature |
.pc5——————————— | application/x-pc5 | .pci | application/x-pci |
.pcl——————————— | application/x-pcl | .pcx | application/x-pcx |
.pdf——————————— | application/pdf | application/pdf | |
.pdx——————————— | application/vnd.adobe.pdx | .pfx | application/x-pkcs12 |
.pgl——————————— | application/x-pgl | .pic | application/x-pic |
.pko——————————— | application/vnd.ms-pki.pko | .pl | application/x-perl |
.plg——————————— | text/html————————– | .pls | audio/scpls |
.plt——————————— | application/x-plt | .png | image/png |
.png——————————— | application/x-png | .pot | application/vnd.ms-powerpoint |
.ppa——————————— | application/vnd.ms-powerpoint | .ppm | application/x-ppm |
.pps——————————— | application/vnd.ms-powerpoint | .ppt | application/vnd.ms-powerpoint |
.ppt——————————— | application/x-ppt | .pr | application/x-pr |
.prf——————————— | application/pics-rules | .prn | application/x-prn |
.prt——————————— | application/x-prt | .ps | application/x-ps |
.ps——————————— | application/postscript | .ptn | application/x-ptn |
.pwz——————————— | application/vnd.ms-powerpoint | .r3t | text/vnd.rn-realtext3d |
.ra——————————— | audio/vnd.rn-realaudio | .ram | audio/x-pn-realaudio |
.ras——————————— | application/x-ras | .rat | application/rat-file |
.rdf——————————— | text/xml————————– | .rec | application/vnd.rn-recording |
.red——————————— | application/x-red | .rgb | application/x-rgb |
.rjs——————————— | application/vnd.rn-realsystem-rjs | .rjt | application/vnd.rn-realsystem-rjt |
.rlc——————————— | application/x-rlc———————– | .rle | application/x-rle |
.rm——————————— | application/vnd.rn-realmedia | .rmf | application/vnd.adobe.rmf |
.rmi——————————— | audio/mid————————– | .rmj | application/vnd.rn-realsystem-rmj |
.rmm——————————– | audio/x-pn-realaudio | .rmp | application/vnd.rn-rn_music_package |
.rms——————————— | application/vnd.rn-realmedia-secure | .rmvb | application/vnd.rn-realmedia-vbr |
.rmx——————————— | application/vnd.rn-realsystem-rmx | .rnx | application/vnd.rn-realplayer |
.rp——————————— | image/vnd.rn-realpix | .rpm | audio/x-pn-realaudio-plugin |
.rsml——————————– | application/vnd.rn-rsml | .rt | text/vnd.rn-realtext |
.rtf——————————— | application/msword | .rtf | application/x-rtf |
.rv——————————— | video/vnd.rn-realvideo | .sam | application/x-sam |
.sat——————————— | application/x-sat | .sdp | application/sdp |
.sdw——————————— | application/x-sdw | .sit | application/x-stuffit |
.slb——————————— | application/x-slb | .sld | application/x-sld |
.slk——————————— | drawing/x-slk————————– | .smi | application/smil |
.smil——————————— | application/smil | .smk | application/x-smk |
.snd——————————— | audio/basic————————– | .sol | text/plain |
.sor——————————— | text/plain————————– | .spc | application/x-pkcs7-certificates |
.spl——————————— | application/futuresplash | .spp | text/xml |
.ssm——————————— | application/streamingmedia | .sst | application/vnd.ms-pki.certstore |
.stl——————————— | application/vnd.ms-pki.stl | .stm | text/html |
.sty——————————— | application/x-sty | .svg | text/xml |
.swf——————————— | application/x-shockwave-flash | .tdf | application/x-tdf |
.tg4——————————— | application/x-tg4 | .tga | application/x-tga |
.tif——————————— | image/tiff————————– | .tif | application/x-tif |
.tiff——————————— | image/tiff————————– | .tld | text/xml |
.top——————————— | drawing/x-top | .torrent | application/x-bittorrent |
.tsd——————————— | text/xml————————– | .txt | text/plain |
.uin——————————— | application/x-icq | .uls | text/iuls |
.vcf——————————— | text/x-vcard————————– | .vda | application/x-vda |
.vdx——————————— | application/vnd.visio | .vml | text/xml |
.vpg——————————— | application/x-vpeg005 | .vsd | application/vnd.visio |
.vsd——————————— | application/x-vsd | .vss | application/vnd.visio |
.vst——————————— | application/vnd.visio | .vst | application/x-vst |
.vsw——————————— | application/vnd.visio | .vsx | application/vnd.visio |
.vtx——————————— | application/vnd.visio | .vxml | text/xml |
.wav——————————— | audio/wav————————– | .wax | audio/x-ms-wax |
.wb1——————————– | application/x-wb1 | .wb2 | application/x-wb2 |
.wb3——————————– | application/x-wb3 | .wbmp | image/vnd.wap.wbmp |
.wiz——————————— | application/msword | .wk3 | application/x-wk3 |
.wk4——————————— | application/x-wk4 | .wkq | application/x-wkq |
.wks——————————— | application/x-wks | .wm | video/x-ms-wm |
.wma——————————– | audio/x-ms-wma | .wmd | application/x-ms-wmd |
.wmf——————————– | application/x-wmf | .wml | text/vnd.wap.wml |
.wmv——————————– | video/x-ms-wmv | .wmx | video/x-ms-wmx |
.wmz——————————– | application/x-ms-wmz | .wp6 | application/x-wp6 |
.wpd——————————– | application/x-wpd | .wpg | application/x-wpg |
.wpl——————————— | application/vnd.ms-wpl | .wq1 | application/x-wq1 |
.wr1——————————— | application/x-wr1 | .wri | application/x-wri |
.wrk——————————— | application/x-wrk | .ws | application/x-ws |
.ws2——————————— | application/x-ws | .wsc | text/scriptlet |
.wsdl——————————– | text/xml————————– | .wvx | video/x-ms-wvx |
.xdp——————————— | application/vnd.adobe.xdp | .xdr | text/xml |
.xfd——————————— | application/vnd.adobe.xfd | .xfdf | application/vnd.adobe.xfdf |
.xhtml——————————- | text/html————————– | .xls | application/vnd.ms-excel |
.xls——————————— | application/x-xls | .xlw | application/x-xlw |
.xml——————————— | text/xml————————– | .xpl | audio/scpls |
.xq——————————— | text/xml | .xql | text/xml |
.xquery—————————— | text/xml————————– | .xsd | text/xml |
.xsl——————————— | text/xml————————– | .xslt | text/xml |
.xwd——————————— | application/x-xwd | .x_b | application/x-x_b |
.sis——————————— | application/vnd.symbian.install | .sisx | application/vnd.symbian.install |
.x_t——————————— | application/x-x_t———————- | .ipa | application/vnd.iphone |
.apk——————————— | application/vnd.android.package-archive | .xap | application/x-silverlight-app |