一 概述
1.什么是HTTP协议?
HTTP协议是请求与响应共同遵守的规范。
2.协议构成
⑴Http协议包含请求协议与响应协议两部分。
⑵请求协议构成:
- 请求行(request-line):包括请求方式、uri、协议版本。
- 请求报头:主要包括浏览器类型、请求内容类型、可接收语言、可接收编码方式等。
- 空白行:用来分割请求报头与请求体。
- 请求体:指的是请求的主要内容,当采用post请求时,表单输入会显示在这里。
⑶响应协议构成:
- 状态行(status-line):协议版本号、状态码、状态文本描述。
- 响应报头:主要包括响应内容类型、长度、服务器类型、日期等。
- 空白行:用来分割响应报头与响应体。
- 响应体:服务器响应给浏览器的内容。
3.Header
在HTTP协议中,请求头与响应头中的头名不区分大小写,即Content-Dispositon与content-dispostion两种写法等效。
二 请求方式
1.HTTP请求中常用的请求方式是GET与POST.
2.两者的区别:
- 传输方式:GET请求将数据追加到请求URL后面,请求体为空;POST请求将数据存放到请求体中。
- 传输内容:GET请求只能传输字符串,POST请求可以传输任何数据类型,文件上传只能使用POST请求。
- 传输长度:GET请求传输长度首先,最大长度为4048个字节,POST请求长度没有限制。
- 是否缓存:使用GET请求时浏览器会响应内容,当请求未发生改变时,浏览器直接从缓存中获取内容,不再访问服务器,而POST请求不会缓存响应内容,每次都会访问服务器。
- 地址栏是否显示数据:get请求的请求参数会显示在地址栏中,post不会显示请求参数,比较安全。
- GET请求一般用于从服务器获取内容,POST请求一般用于修改服务器中的内容。
三 编码方式
1.在计算机中,数据在存储与运算时都以二进制形式。
2.在不同的编码系统中,同一字符对应的二进制码不同。
3.URI与请求体中的ASCII字符采用ISO-8859-1的编码方式,中文字符采用浏览器默认的编码方式,中文浏览器通常默认的编码方式是UTF-8。
4.中文乱码产生的根本原因
浏览器按照某种编码方式将中文字符转化为二进制码,发送给服务器,服务器再按照某种解码方式解析二进制码,如果浏览器端编码时采用的编码方式与服务器端解析时采用的解码方式不一致,就会出现中文乱码问题。乱码问题产生的根本原因是编码方式与解码方式不一致,同一二进制码在不同编码系统中对应的字符不同。
5.服务器默认采用ISO-8859-1的编码方式解析从浏览器获得数据,而ISO-8859-1编码方式不支持中文,因此导致乱码问题。解决乱码的关键就是改变服务器端解析时采用的解码方式。
1.request.setCharacterEnconding("UTF-8"):以UTF-8的编码方式解析请求体中的数据。
2.在服务器配置文件server.xml中设定解析URI的编码方式:
<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
6.请求报头与响应报头只支持ISO-8859-1的编码方式,即系统自动将报头中的内容转化为ISO-8859-1编码,因此文件下载时文件名包含在响应报头中,必须先通过UTF-8转化为字节码,然后再采用ISO-8859-1编码,最后将编码结果发给浏览器。