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 消息结构

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,下图给出了请求报文的一般格式。

服务器响应消息

HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。

HTTP 请求方法

HTTP请求方法

根据HTTP标准,HTTP请求可以使用多种请求方法。

HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

序号方法描述
1GET请求指定的页面信息,并返回实体主体。 .
2HEAD类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 .
3POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 .
4PUT从客户端向服务器传送的数据取代指定的文档的内容。 .
5DELETE请求服务器删除指定的页面。 .
6CONNECTHTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 .
7OPTIONS允许客户端查看服务器的性能。 .
8TRACE回显服务器收到的请求,主要用于测试或诊断。

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 对照表

文件扩展名Content-Type(Mime-Type)文件扩展名Content-Type(Mime-Type)
.( 二进制流,不知道下载文件类型)application/octet-stream.tifimage/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————————–.anvapplication/x-anv
.asa———————————text/asa————————–.asfvideo/x-ms-asf
.asp———————————text/asp————————–.asxvideo/x-ms-asf
.au———————————audio/basic————————–.avivideo/avi
.awf———————————application/vnd.adobe.workflow.biztext/xml
.bmp——————————–application/x-bmp.botapplication/x-bot
.c4t———————————application/x-c4t.c90application/x-c90
.cal———————————application/x-cals.catapplication/vnd.ms-pki.seccat
.cdf———————————application/x-netcdf.cdrapplication/x-cdr
.cel———————————application/x-cel.cerapplication/x-x509-ca-cert
.cg4———————————application/x-g4.cgmapplication/x-cgm
.cit———————————application/x-cit———————–.classjava/
.cml———————————text/xml————————–.cmpapplication/x-cmp
.cmx——————————–application/x-cmx.cotapplication/x-cot
.crl———————————application/pkix-crl.crtapplication/x-x509-ca-cert
.csi———————————application/x-csi.csstext/css
.cut———————————application/x-cut.dbfapplication/x-dbf
.dbm——————————–application/x-dbm.dbxapplication/x-dbx
.dcd———————————text/xml.dcxapplication/x-dcx
.der———————————application/x-x509-ca-cert.dgnapplication/x-dgn
.dib———————————application/x-dib.dllapplication/x-msdownload
.doc———————————application/msword.dotapplication/msword
.drw———————————application/x-drw.dtdtext/xml
.dwf———————————Model/vnd.dwf.dwfapplication/x-dwf
.dwg——————————–application/x-dwg.dxbapplication/x-dxb
.dxf———————————application/x-dxf.ednapplication/vnd.adobe.edn
.emf———————————application/x-emf.emlmessage/rfc822
.ent———————————text/xml————————–.epiapplication/x-epi
.eps———————————application/x-ps.epsapplication/postscript
.etd———————————application/x-ebx.exeapplication/x-msdownload
.fax———————————image/fax————————–.fdfapplication/vnd.fdf
.fif———————————application/fractals.fotext/xml
.frm———————————application/x-frm.g4application/x-g4
.gbr———————————application/x-gbr.application/x-
.gif———————————image/gif————————–.gl2application/x-gl2
.gp4———————————application/x-gp4.hglapplication/x-hgl
.hmr———————————application/x-hmr.hpgapplication/x-hpgl
.hpl———————————application/x-hpl.hqxapplication/mac-binhex40
.hrf———————————application/x-hrf.htaapplication/hta
.htc———————————text/x-component.htmtext/html
.html——————————–text/html.htttext/webviewhtml
.htx———————————text/html.icbapplication/x-icb
.ico———————————image/x-icon.icoapplication/x-ico
.iff———————————application/x-iff.ig4application/x-g4
.igs———————————application/x-igs.iiiapplication/x-iphone
.img———————————application/x-img.insapplication/x-internet-signup
.isp———————————application/x-internet-signup.IVFvideo/x-ivf
.java———————————java/*————————–.jfifimage/jpeg
.jpe———————————image/jpeg————————–.jpeapplication/x-jpe
.jpeg——————————–image/jpeg————————–.jpgimage/jpeg
.jpg———————————application/x-jpg.jsapplication/x-javascript
.jsp———————————text/html————————–.la1audio/x-liquid-file
.lar———————————application/x-laplayer-reg.latexapplication/x-latex
.lavs———————————audio/x-liquid-secure.lbmapplication/x-lbm
.lmsff——————————–audio/x-la-lms.lsapplication/x-javascript
.ltr———————————application/x-ltr.m1vvideo/x-mpeg
.m2v——————————–video/x-mpeg————————-.m3uaudio/mpegurl
.m4e——————————–video/mpeg4.macapplication/x-mac
.man——————————–application/x-troff-man.mathtext/xml
.mdb——————————–application/msaccess.mdbapplication/x-mdb
.mfp———————————application/x-shockwave-flash.mhtmessage/rfc822
.mhtml——————————message/rfc822———————-.miapplication/x-mi
.mid———————————audio/mid————————–.midiaudio/mid
.mil———————————application/x-mil.mmltext/xml
.mnd——————————–audio/x-musicnet-download.mnsaudio/x-musicnet-stream
.mocha——————————application/x-javascript.movievideo/x-sgi-movie
.mp1——————————-audio/mp1.mp2audio/mp2
.mp2v——————————-video/mpeg.mp3audio/mp3
.mp4——————————–video/mpeg4.mpavideo/x-mpg
.mpd——————————–application/vnd.ms-project.mpevideo/x-mpeg
.mpeg——————————-video/mpg————————–.mpgvideo/mpg
.mpga——————————-audio/rn-mpeg.mppapplication/vnd.ms-project
.mps——————————–video/x-mpeg————————-.mptapplication/vnd.ms-project
.mpv——————————–video/mpg————————–.mpv2video/mpeg
.mpw——————————–application/vnd.ms-project.mpxapplication/vnd.ms-project
.mtx———————————text/xml————————–.mxpapplication/x-mmxp
.net———————————image/pnetvue.nrfapplication/x-nrf
.nws———————————message/rfc822.odctext/x-ms-odc
.out———————————application/x-out.p10application/pkcs10
.p12———————————application/x-pkcs12.p7bapplication/x-pkcs7-certificates
.p7c———————————application/pkcs7-mime.p7mapplication/pkcs7-mime
.p7r———————————application/x-pkcs7-certreqresp.p7sapplication/pkcs7-signature
.pc5———————————application/x-pc5.pciapplication/x-pci
.pcl———————————application/x-pcl.pcxapplication/x-pcx
.pdf———————————application/pdf.pdfapplication/pdf
.pdx———————————application/vnd.adobe.pdx.pfxapplication/x-pkcs12
.pgl———————————application/x-pgl.picapplication/x-pic
.pko———————————application/vnd.ms-pki.pko.plapplication/x-perl
.plg———————————text/html————————–.plsaudio/scpls
.plt———————————application/x-plt.pngimage/png
.png———————————application/x-png.potapplication/vnd.ms-powerpoint
.ppa———————————application/vnd.ms-powerpoint.ppmapplication/x-ppm
.pps———————————application/vnd.ms-powerpoint.pptapplication/vnd.ms-powerpoint
.ppt———————————application/x-ppt.prapplication/x-pr
.prf———————————application/pics-rules.prnapplication/x-prn
.prt———————————application/x-prt.psapplication/x-ps
.ps———————————application/postscript.ptnapplication/x-ptn
.pwz———————————application/vnd.ms-powerpoint.r3ttext/vnd.rn-realtext3d
.ra———————————audio/vnd.rn-realaudio.ramaudio/x-pn-realaudio
.ras———————————application/x-ras.ratapplication/rat-file
.rdf———————————text/xml————————–.recapplication/vnd.rn-recording
.red———————————application/x-red.rgbapplication/x-rgb
.rjs———————————application/vnd.rn-realsystem-rjs.rjtapplication/vnd.rn-realsystem-rjt
.rlc———————————application/x-rlc———————–.rleapplication/x-rle
.rm———————————application/vnd.rn-realmedia.rmfapplication/vnd.adobe.rmf
.rmi———————————audio/mid————————–.rmjapplication/vnd.rn-realsystem-rmj
.rmm——————————–audio/x-pn-realaudio.rmpapplication/vnd.rn-rn_music_package
.rms———————————application/vnd.rn-realmedia-secure.rmvbapplication/vnd.rn-realmedia-vbr
.rmx———————————application/vnd.rn-realsystem-rmx.rnxapplication/vnd.rn-realplayer
.rp———————————image/vnd.rn-realpix.rpmaudio/x-pn-realaudio-plugin
.rsml——————————–application/vnd.rn-rsml.rttext/vnd.rn-realtext
.rtf———————————application/msword.rtfapplication/x-rtf
.rv———————————video/vnd.rn-realvideo.samapplication/x-sam
.sat———————————application/x-sat.sdpapplication/sdp
.sdw———————————application/x-sdw.sitapplication/x-stuffit
.slb———————————application/x-slb.sldapplication/x-sld
.slk———————————drawing/x-slk————————–.smiapplication/smil
.smil———————————application/smil.smkapplication/x-smk
.snd———————————audio/basic————————–.soltext/plain
.sor———————————text/plain————————–.spcapplication/x-pkcs7-certificates
.spl———————————application/futuresplash.spptext/xml
.ssm———————————application/streamingmedia.sstapplication/vnd.ms-pki.certstore
.stl———————————application/vnd.ms-pki.stl.stmtext/html
.sty———————————application/x-sty.svgtext/xml
.swf———————————application/x-shockwave-flash.tdfapplication/x-tdf
.tg4———————————application/x-tg4.tgaapplication/x-tga
.tif———————————image/tiff————————–.tifapplication/x-tif
.tiff———————————image/tiff————————–.tldtext/xml
.top———————————drawing/x-top.torrentapplication/x-bittorrent
.tsd———————————text/xml————————–.txttext/plain
.uin———————————application/x-icq.ulstext/iuls
.vcf———————————text/x-vcard————————–.vdaapplication/x-vda
.vdx———————————application/vnd.visio.vmltext/xml
.vpg———————————application/x-vpeg005.vsdapplication/vnd.visio
.vsd———————————application/x-vsd.vssapplication/vnd.visio
.vst———————————application/vnd.visio.vstapplication/x-vst
.vsw———————————application/vnd.visio.vsxapplication/vnd.visio
.vtx———————————application/vnd.visio.vxmltext/xml
.wav———————————audio/wav————————–.waxaudio/x-ms-wax
.wb1——————————–application/x-wb1.wb2application/x-wb2
.wb3——————————–application/x-wb3.wbmpimage/vnd.wap.wbmp
.wiz———————————application/msword.wk3application/x-wk3
.wk4———————————application/x-wk4.wkqapplication/x-wkq
.wks———————————application/x-wks.wmvideo/x-ms-wm
.wma——————————–audio/x-ms-wma.wmdapplication/x-ms-wmd
.wmf——————————–application/x-wmf.wmltext/vnd.wap.wml
.wmv——————————–video/x-ms-wmv.wmxvideo/x-ms-wmx
.wmz——————————–application/x-ms-wmz.wp6application/x-wp6
.wpd——————————–application/x-wpd.wpgapplication/x-wpg
.wpl———————————application/vnd.ms-wpl.wq1application/x-wq1
.wr1———————————application/x-wr1.wriapplication/x-wri
.wrk———————————application/x-wrk.wsapplication/x-ws
.ws2———————————application/x-ws.wsctext/scriptlet
.wsdl——————————–text/xml————————–.wvxvideo/x-ms-wvx
.xdp———————————application/vnd.adobe.xdp.xdrtext/xml
.xfd———————————application/vnd.adobe.xfd.xfdfapplication/vnd.adobe.xfdf
.xhtml——————————-text/html————————–.xlsapplication/vnd.ms-excel
.xls———————————application/x-xls.xlwapplication/x-xlw
.xml———————————text/xml————————–.xplaudio/scpls
.xq———————————text/xml.xqltext/xml
.xquery——————————text/xml————————–.xsdtext/xml
.xsl———————————text/xml————————–.xslttext/xml
.xwd———————————application/x-xwd.x_bapplication/x-x_b
.sis———————————application/vnd.symbian.install.sisxapplication/vnd.symbian.install
.x_t———————————application/x-x_t———————-.ipaapplication/vnd.iphone
.apk———————————application/vnd.android.package-archive.xapapplication/x-silverlight-app