http协议基础

今天学了一下《java Web程序设计》——黑马程序员编程   第4章部分,先做一下总结。

概述

http协议全称HtypeText Transfer Protocol 超文本传输协议,是一种应用层协议。http协议是专门用于定义浏览器(客户端)与服务器之间交换数据以及数据本身的格式。

特点

  1. 基于TCP协议。

  2. 简单快速。浏览器(客户端)向服务端发送请求,只需传送请求方式和请求路径。

  3. 灵活。允许传送任意类型的数据,正在传输的数据类型由Cont-Type标记。

  4. 无状态。无状态是指对事物处理没有记忆,如果后续处理需要前面的信息,则必须重新传输,可能导致每次传输的数据量增大。

http消息

  • 当用户在浏览器中访问某个URL地址、单击某个链接、提交网页上的form表单时,浏览器都会向服务器发送请求数据,即http请求消息

  • 服务器接收到请求数据后,会将处理后的数据发送个客户端,即http响应消息

http请求消息

一个完整的请求消息由请求行请求头实体内容三部分组成,每个部分有各自的作用。

请求行

http请求行位于请求消息的第一行,包括三个部分,分别时是请求方式资源路径http版本

例:

GET /index.html HTTP/1.1

其中GET是请求方式,index.html为请求资源路径,HTTP/1.1为协议版本

http的8种请求方式

请求方式 含义
GET 请求获取请求行的URL所标识的资源
POST 向指定资源提交数据,请求服务器处理
HEAD 请求获取URL所标识资源的响应消息头
PUT 将网页放置指定URL位置上(上传、移动)
DELETE 请求服务器删除URL所标识的资源
TRACE 请求服务器回送收到的请求信息,(主要用于测试和诊断)
CONNECT 保留供将来使用
OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求

最常用的是GET和POST请求

GET请求

在以下情况

  1. 浏览器地址栏直接输入某个URL时

  2. 单击网页链接时

  3. 将form表单的method属性设置为GET(默认为GET,可以不设置),提交表单时

  4. 其他自定义为GET请求时,

浏览器将使用GET方式发送请求

特点

  1. 请求参数传递数据

如果请求的URL中有参数部分,在浏览器生成的请求消息中,参数部分将附加在请求行的资源路径后面

提示后面的参数部分,参数由参数名=参数值组成,多个参数用&隔开

带参URL示例

wwww.index.cn/javaForum?name=lee&psd=hnxy

发送请求消息时,上述参数部分附加在要访问的资源后面,具体如下

GET /javaForum?name=lee&psd=hnxy HTTP/1.1
  1. GET方式传输数据量有限,最多不能超过2KB。

POST请求

在以下情况

  1. 将form表单的method属性设置为POST,提交表单时

  2. 其他自定义为POST请求时

浏览器将使用POST方式发送请求

当用户提交POST请求类型表单时,浏览器会把form表单元素和数据作为http消息的实体内容发送给服务器,而不是作为URL地址的参数传递。

另外在使用POST方式发送请求时

Content-Type消息头自动设置为“application/x-www-form-urlencoded”

Content-Length消息头会自动设置为实体内容的长度

服务器会采用与获取URL后面参数相同的方式来获取表单各个段的数据。

POST请求与GET请求区别

  1. POST传输数据大小无限制,GET最多可传递2KB数据

  2. POST比GET更加安全

    GET请求方式的参数信息都会在URL地址栏显示,而POST请求方式传递的参数隐藏在实体内容中,用户看不到。

请求头

请求头主要向服务器传递附加消息,例如浏览器(客户端)可以指定接收的数据类型、压缩方法、语言、发送请求所属页面的URL地址信息等。

  1. 每个请求头都是由头字段名称和值构成

  2. 头字段名称和值之间用冒号加空格(:)隔开

  3. 多个请求头之间用换行隔开

  4. 头字段名称不区分大小写,习惯上将单词的第一个字母大写

常用的请求头字段

头字段 说明
Accept 指出浏览器(客户端)能处理的MIME类型
Accept-Charset 告知服务器客户端所使用的字符集
Accept-Encoding 指定客户端能够进行解码的数据编码方式,这里指的是某种压缩方式
Accept-Language 指定客户端期望服务器返回哪个国家语言的文档
Authoriztion 当访问受口令保护时,服务器会发送401响应状态码和WWW-Authenticate请求头,要求浏览器(客户端)使用Authoriztion请求头应答
Host 指定资源所在主机名和端口号
If-Match 当客户再次向服务器请求这个网页文件时,可以使用If-Match头字段附带以前缓存的实体标签内容,这个请求被视为一个条件请求
If-Match-Since 与If-Match类似,不过它的值为GMT格式的时间
Range 指定服务器只需返回文档的部分内容及内容范围,(常用于较大文件的断点续传)
If-Range 伴随Range出现,其值可以是实体标签或GMT格式时间
Max-Forward 指定当前请求可以途径的代理服务器数量,每经过一个服务器,其值减一
Refere 追踪网站访问者是如何导航进入网站的,同时Refere头字段还可以用于防盗链(非常有用)
User-Agent 用户代理,指定浏览器(客户端)使用操作系统及版本、浏览器版本、浏览器渲染引擎、浏览器语言等,以便服务器针对不同类型的浏览器返回不同内容

部分头字段详解

1.Accept

指出浏览器(客户端)能处理的MIME类型

例,浏览器和服务器同时能处理png类型图片,则浏览器可以发送image/png的Accept头字段。

MIME类型有多种,

Accept:text/html,表明可以接收HTML文本

Accept:image/gif,表明可以接收gif格式图像文件

Accept:image/*,表明可以接收所有image格式文件

Accept:*/*,表明可以接收任意格式内容

2.Accept-Encoding

指定客户端能够进行解码的数据编码方式,这里指的是某种压缩方式。

在Accept-Encoding头字段中,可以指定多种数据解码方式,它们之间用逗号隔开

示例

Accept-Encoding: gzip,compress

上述头字段中,gzip和compress是最常见的数据编码方式。在传输较大实体内容时,对其进行压缩编码,可以节省网络带宽和传输时间。

服务器在收到这个请求头后,使用其中指定的一种格式对原始文档内容进行压缩编码,然后将其作为响应消息的实体内容发送给客服端,并且在Content-Encoding响应头中指出实体内容所使用的压缩编码格式。浏览器接收到这样的实体内容后,要对其进行反向解压缩。

3.Host

指定资源所在主机名和端口号

示例

Host: www.itcast.cn:80

上述示例中,因为浏览器连接服务器时默认使用的是80端口,所以“:80”可以省略

注意:

在HTTP1.1中,浏览器和其他客户端发送的每个请求消息中必须Host请求头

当浏览器访问Web站点时,会根据地址栏中的URL自动生成相应的Host请求头

4.If-Modified-Since

与If-Match类似,不过它的值为GMT格式的时间

If-Modified-Since请求头被视作一个请求条件,只有服务器中文档的修改时间比If-Modified-Since请求头指定的时间新,服务器才会返回文档内容。否则服务器返回一个304状态码表示浏览器缓存的文档是最新的,而不向浏览器返回文档内容,这时浏览器任然使用以前缓存的文档。

5.Refere

浏览器向服务器发出的请求,可能是直接在浏览器中输入URL地址发出的,也可能是单击一个链接发出的。

对于第一种情况,浏览器不会发出Refere请求头。而对于第二种情况,会发出Refere请求头.

示例

Refere: http://locahost:8080/chapter/GET.html

后面值的内容只是原来所处的位置

Refere头字段非常好用,常被网站管理者用于追踪网站的访问者是如何导航进网站的。

同时Refere头字段还用于网站的防盗链

什么是防盗链?

假设一个网站想显示一些图片,而该网站的服务器并没有这些资源(或不想公开),它通过标签链接到其他网站的图片资源,将其展现给浏览者,这就是盗链。

盗链的网站提高了自己网站的访问效率,却加重了链接网站服务器的负担,损害了其合法利益。所以可以通过Refere头检测出从哪里链接到当前网页或资源,一旦检测到不是本站的链接进行访问的,可以阻止访问或跳转到指定页面。

6.User-Agent

User-Agent(UA,用户代理)用于指定浏览器(客户端)程序使用的操作系统及版本、浏览器版本、浏览器渲染引擎、浏览器语言等。

例,服务器检查User-Agent,发现其是一个无线手持终端,就返回一个WML文档;如果客户端是一个普通浏览器,就返回一个HTML文档。

实体内容

附带的自定义或参数信息。

http响应消息

当浏览器收到浏览器(客户端)请求后,会发送响应消息个浏览器(客户端)。一个完整的响应消息包括响应状态行响应头实体内容

响应状态行

http响应状态行位于响应消息第一行,它包括三个部分,HTTP版本、状态码(一个代表响应状态的整数代码)、对状态码进行描述的文本信息。

示例

HTTP/1.1 200 OK

HTTP/1.1表示版本,200是状态码,OK是状态描述,说明客户端请求成功。

状态码由三个数字组成,表示请求是否被理解或满足。第1个数字有5种取值

  1. 1XX:表示请求已接收,需要继续处理

  2. 2XX:表示请求已成功接收、理解并接受

  3. 3XX:为完成请求,客户端需进一步细化请求

  4. 4XX:客户端的请求有错误

  5. 5XX:服务器出现错误

常见状态码
状态码 说明
200 服务器成功处理了客户端请求。响应消息返回正常的请求结果
302 请求的资源临时从不同的URL响应请求,但请求者应继续使用原位置来进行以后得请求。
304 表示客户端缓存版本是最新的,客户端应继续使用它。
404 服务器找不到请求的资源。
500 服务器发生错误,无法处理客户端的请求。
响应头

服务器向客服端传递附加信息。

常见响应头字段

头字段 说明
Accept-Range 标识服务器自身支持的范围请求,具体值用于定义范围请求的单位,单位值可以是none/bytes
Age 当前网页文档可以在客户端/代理服务器中缓存的有效时间,单位:秒
Etag 向客户端传送代表实体内容特征的标记信息,这些标记信息称为实体标签
Location 通知客户端获取请求文档的新地址,其值为一个使用绝对路径的URL
Retry-After 可与503状态码配合使用,告诉客户端在什么时间可以重新发送请求。也可以和一个3XX状态码配合使用,告诉客户端处理重定向的最小延时时间。其值可以是一个GMT格式时间,也可以是一个以秒为单位的时间数。
Server 指定服务器软件产品名称
Vary 指定影响了服务器所生成的响应内容的那些请求头字段名
WWW-Authenticate 当客户端访问受口令保护的网页文件时,服务器会在响应消息中回送01(Unauthorized)响应状态码和WWW-Authenticate响应头,指示客服端应该在Authenticate请求头中使用指定的认证方式提供用户名和密码
Proxy-Authenticate 用于代理服务器的用户信息验证,用法与WWW-Authenticate类似
Refresh 告诉浏览器自动刷新时间,以秒为单位的时间数
Content-Disposition 指示浏览器(客户端)不直接处理响应的实体内容,而是让用户将响应的实体内容做其他处理
1.Location

告知客户端获取请求文档的新地址,其值为一个使用绝对路径的URL

常与3XX状态码配合使用,以便通知客户端自动重新连接到新的地址请求文档。

因为当前响应并没有内容返回,所以使用Location响应头的HTTP消息不应有实体内容

可见在HTTP消息头不能同时出现Location和Content-Type这两个头字段。

2.Server

指定服务器软件产品名称

3.Refresh

告诉浏览器自动刷新时间,以秒为单位的时间数

Refresh: 3

注:在Refresh头字段的时间值后可以加一个URl参数(用“;”隔开),告诉客户端在指定时间后跳转到其他网页。

4.Content-Disposition

指示浏览器(客户端)不直接处理响应的实体内容,而是让用户将响应的实体内容保存在某个文件中

Content-Disposition头字段没有在HTTP的标准规范中定义,它是从RFC2183中借鉴而来。

指示接收程序处理数据方式,有inline和attachment两种标准方式。

inline表示直接处理

attachment要求用户干预并控制接收程序处理数据内容的方式。后面可指定filename参数,表示服务器建议浏览器保存实体内容的文件名称,浏览器应该忽略filename参数的目录部分,只取最后部分为文件名。

在Content-Disposition前,一定要设置Content-Type头字段

Content-Type: application/octet-stream
Content-Disposition: attachment;filename=lee.zip

你可能感兴趣的:(http,网络协议,网络)