zoukankan      html  css  js  c++  java
  • HTTP协议

    HTTP前言

    为什么要用http协议?

    TCP和UDP是使用广泛的通信协议。

    UDP协议具有不可靠性和不安全性,显然这很难满足web应用的需要。

    TCP协议是基于连接和三次握手的,虽然具有可靠性,但仍有缺陷。普通的C/S架构软件,顶多上千个Client同时连接,而B/S架构的网站,十万人同时在线也是很平常的事儿。如果十万个客户端和服务器一直保持连接状态,那服务器如何满足承载呢?

    这就衍生出了http协议。基于TCP的可靠性连接。通俗点说,就是在请求之后,服务器端立即关闭连接、释放资源。这样既保证了资源可用,也吸取了TCP的可靠性的优点。

    正因为这点,所以大家通常说http协议是“无状态”的,也就是“服务器不知道你客户端干了啥”,其实很大程度上是基于性能考虑的。以至于后来有了session之类的玩意。

    HTTP简介

    HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。

    HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。

    HTTP原理

    HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。

    Web服务器根据接收到的请求后,向客户端发送响应信息。HTTP默认端口号为80,但是你也可以改为8080或者其他端口。

    HTTP三点注意事项:

    • HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
    • HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
    • HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

    以下图表展示了HTTP协议通信流程:

    cgiarch

    CGI(Common Gateway Interface) 是 HTTP 服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。

    绝大多数的 CGI 程序被用来解释处理杰自表单的输入信息,并在服务器产生相应的处理,或将相应的信息反馈给浏览器。CGI 程序使网页具有交互功能。

    HTTP请求方法

    HTTP/1.1定义了八种方法(也叫动作)来以不同的方式操作指定的资源:

    GET

     请求指定的页面信息,并返回实体主体。GET方法应该只用在读取数据,而不应当被用于产生“副作用”的操作中,例如在Web Application中。其中一个原因是GET可能会被网络蜘蛛等随意访问。

    HEAD

    与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。

    POST

    向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。

    PUT

    向指定资源位置上传其最新内容。

    DELETE

    请求服务器删除Request-URI所标识的资源。

    TRACE

    回显服务器收到的请求,主要用于测试或诊断。

    OPTIONS

    这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用'*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。

    CONNECT

    HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。

    注意事项:

    1. 方法名称是区分大小写的。当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Method Not Allowed),当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented)。
    2. HTTP服务器至少应该实现GET和HEAD方法,其他方法都是可选的。当然,所有的方法支持的实现都应当匹配下述的方法各自的语义定义。此外,除了上述方法,特定的HTTP服务器还能够扩展自定义的方法。例如PATCH(由 RFC 5789 指定的方法)用于将局部修改应用到资源
    3. 虽然 HTTP 的请求方式有 8 种,但是我们在实际应用中常用的也就是 get 和 post,其他请求方式也都可以通过这两种方式间接的来实现。

     HTTP状态码

     所有HTTP响应的第一行都是状态行,依次是当前HTTP版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。

     常见状态码

    • 200 - 请求成功
    • 301 - 资源(网页等)被永久转移到其它URL
    • 404 - 请求的资源(网页等)不存在
    • 500 - 内部服务器错误

     状态码分类

    HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:

    • 1xx消息——请求已被服务器接收,继续处理
    • 2xx成功——请求已成功被服务器接收、理解、并接受
    • 3xx重定向——需要后续操作才能完成这一请求
    • 4xx请求错误——请求含有词法错误或者无法被执行
    • 5xx服务器错误——服务器在处理某个正确请求时发生错误

    虽然 RFC 2616 中已经推荐了描述状态的短语,例如"200 OK","404 Not Found",但是WEB开发者仍然能够自行决定采用何种短语,用以显示本地化的状态描述或者自定义信息。

     URL

    全称为Uniform Resource Location,中文翻译为统一资源定位符,也被称为网页地址(网址)

     URL将从Internet获取信息的五个基本元素包括在一个简单的地址中:

    • 传送协议。
    • 层级URL标记符号(为[//],固定不变)
    • 访问资源需要的凭证信息(可省略)
    • 服务器。(通常为域名,有时为IP地址)
    • 端口号。(以数字方式表示,若为HTTP的默认值“:80”可省略)
    • 路径。(以“/”字符区别路径中的每一个目录名称)
    • 查询。(GET模式的窗体参数,以“?”字符为起点,每个参数以“&”隔开,再以“=”分开参数名称与数据,通常以UTF8的URL编码,避开字符冲突的问题)
    • 片段。以“#”字符为起点

    以http://www.luffycity.com:80/news/index.html?id=250&page=1 为例, 其中:

    http,是协议;
    www.luffycity.com,是服务器;
    80,是服务器上的网络端口号;
    /news/index.html,是路径;
    ?id=250&page=1,是查询。


    大多数网页浏览器不要求用户输入网页中“http://”的部分,因为绝大多数网页内容是超文本传输协议文件。同样,“80”是超文本传输协议文件的常用端口号,因此一般也不必写明。一般来说用户只要键入统一资源定位符的一部分(www.luffycity.com:80/news/index.html?id=250&page=1)就可以了。

    由于超文本传输协议允许服务器将浏览器重定向到另一个网页地址,因此许多服务器允许用户省略网页地址中的部分,比如 www。从技术上来说这样省略后的网页地址实际上是一个不同的网页地址,浏览器本身无法决定这个新地址是否通,服务器必须完成重定向的任务。

    静态网页资源

    纯粹HTML格式的网页(可以包含图片、视频JS(前端功能实现)、CSS(样式)等)通常被称为“静态网页”

    静态资源特点:

    1. 纯文本类程序或文件,如.html、.htm、.xml、.shtml、.js、.css等;

        图片类文件或数据文档,如.jpg、.gif、.png、.bmp、.txt、.doc、.ppt等;

        视频类流媒体文件,如.mp4、.swf、.avi、.wmv、.flv等。

    2. 每个网页的内容都是保存在网站服务器文件系统上的,

        也就是说,静态网页是实实在在保存在服务器上的文件实体

    3. 网页内容是固定不变的,因此,容易被搜索引擎收录 (优点)

    4. 因为网页没有数据库的支持,所以在网站制作和维护方面的工作量较大,(缺点)

        当网站信息量很大时,完全依靠静态网页比较困难

    5. 网页的交互性较差,在程序的功能实现方面有较大的限制 (缺点)

    6. 网页程序在用户浏览器端解析

        当客户端向服务器请求数据时,服务器会直接从磁盘文件系统上返回数据(不做任何解析) (优点)

    动态网页资源

    所谓的动态网页是与静态网页相对而言的,也就是说,动态网页的URL后缀不是.html、.htm、.xml、.shtml、.js、.css等静态网页的常见扩展名形式,而是.asp、.aspx、.php、.js、.do、.cgi等形式的

    动态资源特点:

    1. 网页扩展名后缀常见为:.asp、.aspx、.php、.js、.do、.cgi等

       动态资源网页中会出现? &等特殊符号信息

    2. 网页一般以数据库技术为基础,大大降低了网站维护的工作量。

    3. 采用动态网页技术的网站可以实现更多的功能,

       如用户注册、用户登录、在线调查、投票、用户管理、订单处理、发博文等

    4. 动态网页并不是独立存在于服务器上的网页文件

    5. 动态网页资源不便于被搜索引擎收录

    6. 网页程序在服务架构端进行解析

     伪静态网页

    取长补短(伪静态资源实质是动态资源)

    HTTP消息结构

    HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。

    一个HTTP"客户端"是一个应用程序(Web浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个HTTP的请求的目的。

    一个HTTP"服务器"同样也是一个应用程序(通常是一个Web服务,如Apache Web服务器或IIS服务器等),通过接收客户端的请求并向客户端发送HTTP响应数据。

    HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。

    一旦建立连接后,数据消息就通过类似Internet邮件所使用的格式[RFC5322]和多用途Internet邮件扩展(MIME)[RFC2045]来传送。

    HTTP请求格式

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

    HTTP响应格式

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

    实例

    下面实例是一点典型的使用GET来传递数据的实例:

    客户端请求:

    GET /hello.txt HTTP/1.1
    User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
    Host: www.example.com
    Accept-Language: en, mi
    

    服务端响应:

    HTTP/1.1 200 OK
    Date: Mon, 27 Jul 2009 12:28:53 GMT
    Server: Apache
    Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
    ETag: "34aa387-d-1568eb00"
    Accept-Ranges: bytes
    Content-Length: 51
    Vary: Accept-Encoding
    Content-Type: text/plain
    

    输出结果:

    Hello World! My payload includes a trailing CRLF.

    HTTP content-type

    Content-Type,内容类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些Asp网页点击的结果却是下载到的一个文件或一张图片的原因。

    HTTP一次完整的请求

    1. 输入网址,浏览器请求DNS服务器解析该URL中域名对应的IP地址
    2. 得到IP地址后,通过IP和端口号(默认80)和服务端建立TCP连接(三次握手)
    3. 客户端发出访问相应页面的请求(HTTP请求报文)
    4. 服务端接收、处理、响应相应的请求(HTTP响应报文)
    5. 断开TCP连接(四次挥手)
    6. 浏览器渲染HTML文档

    HTTP结语

    HTTP是客户端(可以是浏览器、网络爬虫等等)与服务端之间的通讯协议。

    客户端发送HTTP请求报文,服务端接接收、处理、返回HTTP响应报文。

    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 .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
     

     

  • 相关阅读:
    剑指offer(14)链表中倒数第K个节点
    剑指offer(13)调整数组顺序使奇数位于偶数前面
    跨域资源共享CORS
    同源政策
    剑指offer(12)数值的整数次方
    剑指offer(11)二进制中1的个数
    面试金典——交点
    LeetCode——简化路径
    LeetCode——跳跃游戏 I-II
    LeetCode——最大矩形
  • 原文地址:https://www.cnblogs.com/lxfpy/p/10855091.html
Copyright © 2011-2022 走看看