今日刷题总结14

http协议

(1)URL(universal resource locator,统一资源定位器)

URL用于标识因特网上的资源位置并给出访问这些资源的方法。由于访问不同资源对象需要的协议不同,URL指出了访问某个资源对象时需要用到的协议,其一般格式为:

<协议>://<主机名>:<端口>/<路径>

最左边的<协议>指出使用什么协议来获取万维网文档。一般最常用的协议是http,而HTTP URL的一般格式如下:

http://host[":"port][abs_path]

http表示要通过HTTP协议来定位网络资源,host表示合法的Internet主机域名或IP地址,port指定一个端口号,为空则使用默认端口80,abs_path指定请求资源的URI,如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成。例如http://www.scut.edu.cn会转换成http://www.scut.edu.cn/,此时URL指向了服务器的主页(home page)。

(2)http请求报文

http报文使用tcp协议传送,在客户端和服务器端建立tcp连接后,http客户端向服务器端发送http请求报文。请求报文由3个部分依次组成:请求行,请求消息报头和请求正文,如下图所示:

(图与说明有部分不符)

请求行的格式如下:

Method Request-URI HTTP-Version (CRLF)

其中Method表示请求方法,Request-URI表示统一资源标识符,HTTP-Version表示请求的http协议版本,CRLF表示回车换行。请求方法如下:

GET——请求获取Request-URL标识的资源。

POST——向Request-URI标识的资源后添加新数据。

HEAD——请求获取Request-URL标识的资源的响应消息报头。

PUT——请求服务器存储一个资源并用Request-URI标识。

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

TRACE——请求服务器回送收到的请求信息,主要用于测试或诊断。

CONNECT——保留将来使用。

OPTIONS——请求查询服务器的性能,或者查询与资源相关的选项和需求。

例如,在浏览器地址栏输入URL访问网页时,浏览器就使用GET方法获取服务器资源。

GET /index.html HTTP/1.1

POST方法要求被请求服务器接受附在请求后面的数据,常用于提交表单。

POST /register.jsp HTTP/ (CRLF)

Accept:image/gif,image/x-xbit,... (CRLF)

...

HOST:www.scut.edu.cn (CRLF)

Content-Length:22 (CRLF)

Connection:Keep-Alive (CRLF)

Cache-Control:no-cache (CRLF)

(CRLF)         //该CRLF表示消息报头已经结束,在此之前为消息报头

user=jeffrey&pwd=1234  //此行以下为提交的数据

HEAD方法跟GET方法相同,只不过服务器响应时不会返回响应正文(只有响应行与响应消息报头)。这种方法可以用来获取请求中隐含的元信息,而不用传输实体本身。也经常用来测试超链接的有效性、可用性和最近的修改。

请求报头在(4)中叙述。请求正文略。

(3)http响应报文

http服务器端接收到请求后,发送一个响应报文,报文的格式与请求报文相似,由响应行、响应消息报头和响应正文3个部分依次构成。响应行的格式如下:

HTTP-Version Status-Code Reason-Phrase (CRLF)

其中HTTP-Version表示服务器支持的HTTP协议版本,Status-Code表示响应状态码,Reason-Phrase是对状态码的简短说明。

状态码有5种,分别为:

1xx(临时响应)——表示请求已接收并需要请求者继续执行操作。

2xx (成功)——表示成功处理了请求。

3xx (重定向)——表示要完成请求需要进一步操作。

4xx(请求错误)——表示请求可能出错,妨碍了服务器的处理。

5xx(服务器错误)——表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。

常见的状态码有:

200 OK——客户端请求成功。

400 Bad Request——客户端请求有语法错误,不能被服务器理解。

401 Unauthorized——请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用

403 Forbidden——服务器收到请求,但是拒绝提供服务。

404 Not Found——请求的资源不存在,比如输入了错误的URL。

500 Internal Server Error——服务器发生不可预期的错误。

503 Server Unavaliable——服务器当前不能处理客户端的请求,需要过一段时间才能。

响应报头在(4)中叙述。响应正文就是服务器返回的资源内容。

(4)消息报头

HTTP消息报头包括普通报头、请求报头、响应报头、实体报头。每一个报头域都是由名字+“:”+空格+值 组成,消息报头域的名字是大小写无关的。

a)普通消息报头

在普通报头中,有少数报头域用于所有的请求和响应消息,但并不用于被传输的实体,只用于传输的消息。例如Cache-Control用于指定缓存指令,缓存指令是单向的(响应中出现的缓存指令在请求中未必会出现),且是独立的(一个消息的缓存指令不会影响另一个消息处理的缓存机制),HTTP1.0使用的类似的报头域为Pragma。

请求时的缓存指令包括:no-cache(用于指示请求或响应消息不能缓存)、no-store、max-age、max-stale、min-fresh、only-if-cached;

响应时的缓存指令包括:public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age、s-maxage.

比如为了指示IE浏览器(客户端)不要缓存页面,服务器端的JSP程序可以编写如下:response.sehHeader("Cache-Control","no-cache")。这句代码将在发送的响应消息中设置普通报头域:Cache-Control:no-cache。

Date普通报头域表示消息产生的日期和时间。Connection普通报头域允许发送指定连接的选项。例如指定连接是连续,或者指定“close”选项,通知服务器,在响应完成后,关闭连接。

b)请求消息报头

请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。

常用的请求报头如下:

Accept——Accept请求报头域用于指定客户端接受哪些类型的信息。eg:Accept:image/gif,表明客户端希望接受GIF图象格式的资源;Accept:text/html,表明客户端希望接受html文本。

Accept-Charset——Accept-Charset请求报头域用于指定客户端接受的字符集。eg:Accept-Charset:iso-8859-1,gb2312.如果在请求消息中没有设置这个域,缺省是任何字符集都可以接受。

Accept-Encoding——Accept-Encoding请求报头域类似于Accept,但是它是用于指定可接受的内容编码。eg:Accept-Encoding:gzip.deflate.如果请求消息中没有设置这个域,服务器假定客户端对各种内容编码都可以接受。

Accept-Language——Accept-Language请求报头域类似于Accept,但是它是用于指定一种自然语言。eg:Accept-Language:zh-cn.如果请求消息中没有设置这个报头域,服务器假定客户端对各种语言都可以接受。

Authorization——Authorization请求报头域主要用于证明客户端有权查看某个资源。当浏览器访问一个页面时,如果收到服务器的响应代码为401(未授权),可以发送一个包含Authorization请求报头域的请求,要求服务器对其进行验证。

Host——Host请求报头域在发送请求时是必需的,主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的,例如在浏览器中输入:http://www.scut.edu.cn/index.html,浏览器发送的请求消息中,就会包含Host请求报头域Host:www.scut.edu.cn,此处使用缺省端口号80,若指定了端口号,则变成:Host:www.scut.edu.cn:指定端口号。

User-Agent——上网登陆论坛的时候往往会看到一些欢迎信息,其中列出了客户端操作系统的名称和版本以及使用的浏览器的名称和版本。实际上,服务器应用程序就是从User-Agent这个请求报头域中获取到这些信息。User-Agent请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器。不过,这个报头域不是必需的。

请求消息报头示例:

GET /form.html HTTP/1.1 (CRLF)
Accept:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,*/* (CRLF)
Accept-Language:zh-cn (CRLF)
Accept-Encoding:gzip,deflate (CRLF)
If-Modified-Since:Wed,05 Jan 2017 11:21:25 GMT (CRLF)
If-None-Match:W/"80b1a4c018f3c41:8317" (CRLF)
User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF)
Host:www.guet.edu.cn (CRLF)
Connection:Keep-Alive (CRLF)
(CRLF)

c)响应消息报头

响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。常用的响应报头如下:

Location——Location响应报头域用于重定向接受者到一个新的位置。Location响应报头域常用在更换域名的时候。

Server——Server响应报头域包含了服务器用来处理请求的软件信息。与User-Agent请求报头域是相对应的,例如Server:Apache-Coyote/1.1。

WWW-Authenticate——WWW-Authenticate响应报头域必须被包含在401(未授权的)响应消息中,客户端收到401响应消息时候,并发送Authorization报头域请求服务器对其进行验证时,服务端响应报头就包含该报头域。例如WWW-Authenticate:Basic realm="Basic Auth Test!"  //可以看出服务器对请求资源采用的是基本验证机制。

d)实体报头

请求和响应消息都可以传送一个实体。一个实体由实体报头域和实体正文组成,但并不是说实体报头域和实体正文要在一起发送,可以只发送实体报头域。实体报头定义了关于实体正文(比如有无实体正文)和请求所标识的资源的元信息。

常用的实体报头如下:

Content-Encoding——Content-Encoding实体报头域被用作媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容的编码,因而要获得Content-Type报头域中所引用的媒体类型,必须采用相应的解码机制。Content-Encoding这样用于记录文档的压缩方法,例如Content-Encoding:gzip

Content-Language——Content-Language实体报头域描述了资源所用的自然语言。没有设置该域则认为实体内容将提供给所有的语言阅读者。例如Content-Language:da

Content-Length——Content-Length实体报头域用于指明实体正文的长度,以字节方式存储的十进制数字来表示。

Content-Type——Content-Type实体报头域用语指明发送给接收者的实体正文的媒体类型。例如Content-Type:text/html;charset=ISO-8859-1和Content-Type:text/html;charset=GB2312

Last-Modified——Last-Modified实体报头域用于指示资源的最后修改日期和时间。

Expires——Expires实体报头域给出响应过期的日期和时间。为了让代理服务器或浏览器在一段时间以后更新缓存中(再次访问曾访问过的页面时,直接从缓存中加载,缩短响应时间和降低服务器负载)的页面,我们可以使用Expires实体报头域指定页面过期的时间。例如Expires:Thu,15 Sep 2006 16:23:12 GMT。HTTP1.1的客户端和缓存必须将其他非法的日期格式(包括0)看作已经过期。eg:为了让浏览器不要缓存页面,我们也可以利用Expires实体报头域,设置为0,jsp中程序如下:response.setDateHeader("Expires","0");

参考http://www.cnblogs.com/li0803/archive/2008/11/03/1324746.html

时间: 2024-12-12 08:18:03

今日刷题总结14的相关文章

今日刷题集合

月考没考,最皮的是刷题效率低的可怕,搜索中的那些回溯用的还是很水,不如总结一下. codevs 题号:1501 1506 1842 1983 2549 2806 3143 3145 1008 1294 1295 1501 二叉树的最大宽度和高度(没加using namespace std ;会过不去编译,max.min函数封装在#include<iostream>里,所以没有using namespace std ;不行.) 1 #include<bits/stdc++.h> 2

今日刷题总结3

稳定排序 (1)冒泡排序:冒泡排序就是把小的元素往前调或者把大的元素往后调.比较是相邻的两个元素比较,交换也发生在这两个元素之间.如果两个元素相等,不用进行交换:所以冒泡排序是一种稳定排序算法. (2)归并排序 :归并排序是把序列递归地分成短序列,递归出口是短序列只有1个元素或者2个序列(1次比较和交换),然后把各个有序的短序列合并成一个有序的长序列,不断合并直到原序列全部排好序.在1个或2个元素时,1个元素不会交换,2个元素如果大小相等也不进行交换.在短的有序序列合并的过程中可以保证如果两个当

今日刷题总结21

C++的内存分配方式 之前有说过C++的内存分为5部分,即栈.堆.全局/静态存储区.自由存储区以及常量存储区. 栈:栈由编译器自动分配与释放,它用来存储函数的参数值以及局部变量. 堆:堆由应用程序分配与释放,应用程序使用malloc在堆上获取内存,使用free释放内存.如果应用程序获取内存后没有释放,就会造成内存泄漏,在应用程序终止时泄漏的内存才会被操作系统回收. 自由存储区:自由存储区是C++中基于new和delete的抽象概念.当应用程序使用new分配内存时,就说该内存是自由存储区.C++编

今日刷题总结9

数据存取路径 数据存取是指数据库数据存贮组织和存贮路径的实现和维护.在计算机中,数据一般以文件形式保存或存放在数据库中.在数据库,数据存取路径分为主存存取路径与辅存存取路径,前者主要用于主键检索,后者用于辅助键检索.在系统中,路径一般分为相对路径和绝对路径. 数据存取路径是指存取数据的位置,由于程序运行具有局部性,不可能把所有数据都调入内存,在内存中只有一部分数据,其余数据都在外存,因此数据存取路径分为辅存存取路径和内存存取路径,不同的路径,查找的方法是不同的,一般分为内存查找和辅存查找. 内存

今日刷题总结7

内联函数 内联函数是由inline关键字修饰.在类内定义的函数默认为内联函数.从源代码的层面上看,内联函数有函数的结构,而在编译后,却不具备函数的性质.内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处,这类似于宏替换,使用函数体替换调用处的函数名.能否形成内联函数,需要看编译器对该函数定义的具体处理. 内联函数的主要作用是用来消除函数调用时的时间开销.它通常用于频繁执行的函数,对于小内存空间的函数非常受益. 使用内联函数的时候要注意: (1)递归函数不能定义为内联函数 (

今日刷题总结17

拥塞控制方法 (1)慢开始和拥塞避免 发送方维持一个拥塞窗口cwnd的状态变量,开始时cwnd的大小为一个最大报文段长度MSS.发送方发送完窗口内所有报文段后,每收到一个新的对已发送报文段的确认,就把cwnd增加至多一个MSS.以下说明了慢开始与拥塞避免的原理,其中cwnd的大小用MSS的个数来衡量. 最初发送方设置cwnd=1,发送第一个报文段M1,收到对M1的确认后,cwnd从1增大为2,然后发送方接着发送cwnd中的M2和M3两个报文段,接收方接收后对M2和M3确认.发送方每接收到一个对已

今日刷题总结19

共享区域与私有区域 每个进程都有自己的私有虚拟地址空间,避免了受到其他进程的错误读写.但是,通常的c程序几乎都使用到标准库函数,例如printf或者scanf,如果每个进程都要为这些常用库函数在物理内存保留一份拷贝,这样对内存就非常浪费了. 为了解决上述问题,可以将常用库函数设定为共享对象,共享对象在物理内存上只有一份拷贝,多个进程可以把自身虚拟内存的一个区域映射到该共享对象上,这些区域就叫共享区域,如果一个进程在自己的共享区域进行写操作,在其他进程的共享区域内能看到相应的改变,并且这种改变也会

今日刷题总结15

TCP滑动窗口 假设A向B发送数据,A收到了B的确认报文,报文首部的窗口值为20,确认号ack=31,这表示B已经收到了截止序列号30的所有数据,根据窗口值和确认号,A构造出自己的发送窗口,如下图所示. A的发送窗口表示在没有收到B的确认下可以联系把窗口内的数据发送出去.对于已经发送出去的数据,在没有接到确认时,必须暂时驻留在发送窗口内以便在超时重传时使用.发送窗口后沿的后面部分是已经发送并得到确认的数据,这些数据不再保留到发送窗口内.发送窗口前沿的前面部分是不允许发送的数据,因为接受方B的接收

今日刷题总结2

度 在无向图中每个节点所连边的条数就是该节点的度数. 在有向图图中,指向该节点的边的条数称为入度,反之称为出度.有向图的度是出度与入度之和. 在树中,节点的子女个数称为节点的度. DHCP协议 dhcp是一个局域网的网络协议,是基于udp协议工作的,主要用于集中管理和分配ip地址,使网络中的主机动态地获得ip地址.网关地址.dns服务器地址等,提升地址的使用率.dhcpv4有2个端口,67号和68号端口分别为dhcp server和dhcp client服务端口. dhcp协议采用c/s模型,当