目录
HTTP协议
请求消息的数据格式---Request
数据格式:分为4部分
1.请求行
格式:
请求方式(类型) /请求url(请求资源的路径) 请求协议的版本 他们用空格隔开
GET /login.html HTTP/1.1
特点:
行和头之间没有任何分隔,请求行下面就连着请求头
请求方式:
1.HTTP协议有8种请求方式,常用的有两种
get:
1.请求参数在请求行中,url后
2.请求的url有长度限制
3.不安全,信息都在url后
2.post:
1.请求参数在请求体中
2.请求的url长度没有限制
3.相对安全,信息在请求体中
文件的上传只能用post方式,文件大,超出了get请求的url限制
2.请求头
(告诉服务器浏览器的一些信息)一些键值对,每行一对,浏览器与Web服务器之间都可以发送,服务器和客户端的功能和标识
请求头名称:请求值
多个值用,分隔开
常见的请求头
Host:请求主机的地址
1.User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息,可以在服务器端获取该头的信息,用来解决浏览器的兼容性问题
2.Accept:告诉服务器,浏览器可以接收什么样响应信息(MIME)的文件格式。Servlet可以根据它判断并返回适当的文件格式
3.Accept-Language:浏览器可以支持的语言环境
4.Accept-Encoding:可以接收的压缩格式
5.Referer:
Referer: http://localhost:8080/login.html
告诉服务器(当前请求)从哪里来?如果是直接访问就是为空。
1.防盗链:
2.统计工作:
6.Connection:一直活着的。表示连接可以被复用,用来告诉服务器是否可以维持固定的HTTP连接。http是无连接的,HTTP/1.1使用Keep-Alive为默认值,这样当浏览器需要多个文件时(比如一个HTML文件和相关的图形文件),不需要每次都建立连接
Connection: keep-alive
Upgrade-Insecure-Requests: 1是升级的信息
7.Cookie:浏览器用这个属性向服务器发送Cookie。Cookie是在浏览器中寄存的小型数据体,他可以记载和服务器相关的用户信息,也可以用来实现会话功能
8.Content-Type:用来表明request的内容类型,可以用HttpServletRequest的getContentType()方法取得
9.Accept-Charset:指出浏览器可以接受的字符编码。英文浏览器默认是ISO_8859-1.
10.Accept-Encoding:指出浏览器可以接受的编码方式。编码方式不同于文件格式,他是为了压缩文件并加速文件传递速度,浏览器在接受到Web相应之后先解码,然后再检查文件格式。
1.防盗链:
2.统计工作:
3.请求空行
空行:分隔作用,分隔post请求头和请求体,最后一个请求头标之后是空行,发送回车和换行,通知服务器以下不在有头标
4.请求体(正文)
封装post请求消息的请求参数,是要发送的数据
get方式没有请求体
post就会出现请求体,最常用就是Content-Type和Content-Length头标
响应消息的数据格式---Response
数据格式:分为4部分
1.响应行
响应行:HTTP/1.1 200 OK
组成:协议/版本 响应状态码 响应状态码描述(OK表示成功)各元素之间用空格分隔
响应状态码:描述一个状态的,服务器告诉客户端浏览器本次请求和响应的一个状态
1.状态码都是三位数字
2.分类:五类,每一类都有很多,但是代表的含义是相似的
1xx:服务器接收客户端消息,没有接收完成,等待一段时间后发送1xx状态码,询问客户端还要不要发消息,请求收到,继续处理
2xx:表示成功。代表:200:存在文件
3xx:重定向。代表:302(重定向),资源跳转的方式。敲一次回车访问两次资源。304(访问缓存)[例如访问图片的时候,浏览器会缓存],3xx:均可能存在
4xx:客户端错误,代表:404:不存在文件或文件夹,或403:存在文件夹
5xx:服务器错误,代表:500:均可能存在,服务器内部异常
2.响应头
包含服务器类型,日期,长度,内容类型等
像请求头一样,他们指出服务器的功能,标识出响应数据的细节
格式:头名称:值
常见的相应头:
1.Content-Type: text/html;charset=UTF-8
Content-Type:服务器告诉客户端,本次响应体数据格式,以及编码格式。
text:表示文本内容
html:表示html格式
charset:编码格式。浏览器会根据反馈的内容改变当前页面的字符集
2.Content-Length:字节个数
3.Date:日期
4.Content-disposition:服务器告诉客户端浏览器,以什么格式打开响应体数据值:
in-line:默认值在当前页面内打开
attchment;filename=xxx:以附件的形式打开响应体。文件下载
3.响应空行
响应头和响应体之间用空行隔开
4.响应体
传输的数据,页面展示信息的内容,即HTML代码
URL与URI的区别
什么是URI? 统一资源标识符。代表网络中某个资源的名字。但是通过URI是无法定位资源的。
什么是URL?统一资源定位符。代表网络中某个资源,同时,通过URL是可以定位到该资源的。
URI和URL什么关系,有什么区别?
-
URL包括URI
-
/index.html 这是URI。
GET请求与POST请求的区别?
-
get请求发送数据的时候,数据会挂在URI的后面,并且在URI后面添加一个“?”,"?"后面是数据。这样会导致发送的数据回显在浏览器的地址栏上。(get请求在“请求行”上发送数据)
-
http://localhost:8080/getSetvlet?key1=value1&key2=value2
-
-
post请求发送数据的时候,在请求体当中发送。不会回显到浏览器的地址栏上。也就是说post发送的数据,在浏览器地址栏上看不到。(post在“请求体”当中发送数据)
-
get请求只能发送普通的字符串。并且发送的字符串长度有限制,不同的浏览器限制不同。这个没有明确的规范。
-
get请求无法发送大数据量。
-
post请求可以发送任何类型的数据,包括普通字符串,流媒体等信息:视频、声音、图片。
-
post请求可以发送大数据量,理论上没有长度限制。
-
get请求比较适合从服务器端获取数据。 post请求比较适合向服务器端传送数据。
-
get请求支持缓存。
- 任何一个get请求最终的“响应结果”都会被浏览器缓存起来
- 只要发送get请求,浏览器做的第一件事都是先从本地浏览器缓存中找,找不到的时候才会去服务器上获取。
-
一个get请求的路径 对应 一个资源。
-
如果不希望get请求进行缓存。则只需要更换不同的URL即可,一般来说是使用时间戳来进行URL的生成(在URL后面来添加),这样浏览器每次都回去服务器拿最新的资源。
-
post请求不支持缓存。(POST是用来修改服务器端的资源的。)
-
post请求之后,服务器“响应的结果”不会被浏览器缓存起来。因为这个缓存没有意义。
-
不管你是get请求还是post请求,发送的请求数据格式是完全相同的,只不过位置不同,格式都是统一的: name=value&name=value
-
name是什么?以form表单为例:form表单中input标签的name。
-
value是什么?以form表单为例:form表单中input标签的value。
-