Javaweb学习笔记(http协议)
HTTP消息
当用户在浏览器中访问某个URL时、点击链接等操作,浏览器都会向服务器提交表单,即HTTP请求消息,服务器接受数据,将数据传回客户端,叫做HTTP响应消息。
HTTP请求消息
HTTP请求行
HTTP请求行包括三个部分:请求方式,资源路径,所使用的的HTTP版本
例:
GET /index.html HTTP/1.1
GET是请求方式, /index.html是资源路径,HTTP/1.1是HTTP版本
请求方式共有八种,每种方式都对应了操作服务器中指定的URL资源的方式。
GET方式
GET方式请求获取请求行的URI所标的资源。
如果网页上的form表单的method设置为GET或者不做设置,默认情况是GET。如果 浏览器的请求的URL中有参数部分,在浏览器生成的请求消息中,参数部分将附加在请求行中的资源路径后面。如果URL中有多个参数,会用&隔开。
GET方式传递的数据量有限,最高不能超过1KB
POST方式
POST向指定资源提交数据,请求服务器进行处理。
使用POST方式提交表单内容时,浏览器会将各个表单的元素及数据作为HTTP消息的实体内容发送给服务器,而不是作为URI地址进行传递。POST对比GET的优点:
(1)POST传输数据大小无限制
(2)POST比GET请求方式更安全
GET方式后面会有参数,而POST后面不会有参数
HTTP请求头
没个请求消息头是由一个头字段名称和一个值构成,头字段和值之间用冒号隔开和空格分隔,每个请求头之后使用换行符结束,头不分大小写。
(1)Accept
Accept用于指出客户端程序,能够处理的MINE类型。
(2)Accept-Charset
Accept-Charset头字段,用于告知服务器客户端所使用的的字符集,如果想要指定字符集可以在Accept-Charset头字段中指定多个字符集以逗号分隔,如果Accept-Charset没出现,就说明客户端能接受所有字符集的数据。
(3)Accept-Encoding
Accept-Encoding用于指定客户端能够进行解码的数据编码方式, 编码方式通常指的是某种压缩方式。
最常见的两种编码方式是gzip和compress。在传输实体前对其进行编码可以节省网络带宽和传输时间。
(4)Accept-Language
Accept-Language用于指定客户端期望服务器返回哪个国家的文档,它的值可以指定多个国家语言,语言之间用逗号分隔。Accept-Language会按照其中设置的国家语言的先后顺序,一次返回后面的国家语言的网页文档。
(5)Authorization与Proxy-Authorization
当客户端访问手口令保护的网页时,Web服务器会发送401相应状态码和www-Authorization响应头,要求客户端,使用Authorization请求头来应答,要求Authorization请求头来应答。跟据WWW-Authorization响应头,指定的认证方式有两种:BASIC和DIGEST。
使用BASIC编码格式很容易被解码,DIGEST相对于BASIC安全许多。
Proxy-Authorization头字段作用于Authorization作用相似,只不过Proxy-Authorization请求头是是服务器端先代理服务器发送的验证消息。
(6)Host
Host头字段用于指定资源所在的主机名和端口号,格式与资源的完整URL中的主机名和端口号部分相同。在HTTP1.1中,浏览器和其他客户端发送的没个请求消息中必须包含Host请求头字段,以便web服务器能够根据Host头字段中的主机名来区分客户端要访问的虚拟web站点。
(7)If-Match
浏览器和代理服务器可以缓存服务器送的网页文档。当服务器为客户端传送网页文件的内容时,可以传输一些代表的头字段,这些字段被称为实体标签。当客户端再次向服务器请求这个文件时,可以通过If-Match头字段附带以前缓存的实体标签内容时。服务器收到客户端的请求后,会检索If-Match头中实体标签内容,如果相同则表示网页内容没有更改。
(8)If-Modified-Since
If-Modified-Since作用和If-Match类似,不过它的值为GMT格式的时间,If-Modified-Since被视为一个请求条件,只有服务器中文档的修改时间比If-Modified-Since新才会返回文档时间。
(9)Range和If-Range
Range头字段用于指定服务器只需返回文档中的部分内容即内容范围,这对较大文档断电出川非常有用。
If-Range只能和Range一起使用,其设置值是实体标签和GMT格式的时间,如果是实体标签,且该标签,与服务器端代表当前网页内容特征的实体标签内容相同,则返回当前网页的所有内容。如果是GMT格式的时间,如果网页从此时开始,没有进行修改,则会按照Range头的要求返回网页的部分内容。
(10)Max-Forward
Max-Forward用于指定当前请求可以途径的代理服务器数量。
(11)Referer
浏览器享服务器发送请求,且是由单机一个网页上的超链接而发出,浏览器会使用Referer头字段标识发出请求的超链接所在网页的URL,Referer可以用来防止盗链,用来追踪网站访问者是如何进入网站的。
(12)User-Agent
User-Agent用于指定浏览器或者其他客户端程序使用的操作系统及版本等。
HTTP响应消息
HTTP响应消息头
(1)Accept-Range
Accept-Range用于说明服务器是否接收客户端Range请求头字段请求资源。
(2)Age
Age字段用于指出网页文档可以在客户端或代理服务器中缓存的有效时间设置值为一个为,秒为单位的时间数。
(3)Etag
Etag头字段用于向客户端传送代表实体内容特征的标记信息,这些标记信息称为实体标签。
(4)Location
Location头字段用于通知客户端获取请求文档的新地址,其值为一个使用绝对路径的URL地址,Location头字段和大多数3xx状态码配合使用,以便通知客户端自动重新连接到新的地址请求文档。
(5)Retry-After
Retry-After可以与503状态码配合使用,告诉客户端在什么时间发送请求。
(6)Server
Server头字段用于指定服务器软件产品的名称。
(7)Vary
Vary用于指定影响了服务器所生成的响应内容的那些请求头字段名。
(8)WWW-Authenticate和Porxy-Authenticate
当客户端访问手口令保护的网页文件时,服务器会在响应消息中回送401响应状态码,和WWW-Authenticate响应头,指示客户端应该在Authorization请求头中使用WWW-Authenticate响应头指定的认证方式提供用户名和密码信息。
Porxy-Authenticate和头字段是针对代理服务器的用户信息验证,其他的作用与用法与WWW-Authenticate。
(9)Refresh
Refresh头字段用于告诉浏览器自动刷新页面分时间,它的值是一个以秒为单位的时间数。
(10)Content-Disposition
如果服务器希望浏览器不是直接处理响应的实体内容,而是让用户选择将响应的实体内容,保存到一个文件中,这需要使用Content-Disposition。Content-Disposition指定接收程序处理数据内容的方式。