HTTP协议相关笔记
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
HTTP协议
客户端浏览器和服务器Tomcat要进行基本的请求和响应的处理。
其实浏览器和服务器通信的数据的格式已经使用协议进行固定好了,只要双方发送固定格式的数据,那么就可以完成基本的通信。
如果开发者需要查看这样的数据格式,那么就需要安装一个浏览器的HTTP协议相关的插件。
如果要深入的学习浏览器和服务器通信的数据,那么需要详细的掌握他们之间发送的数据内容。
◆请求信息
GET / HTTP/1.1 →请求行
Accept: */*
Accept-Language: zh-cn,en-US;q=0.5 →请求头
User-Agent: Mozilla/4.0
Accept-Encoding: gzip, deflate
Host:
Connection: Keep-Alive
→空白行
uname=jack&upsw=zs →请求体提交的POST数据
1. 请求行
请求方式GET和POST
请求资源一般是以/开头就是需要访问的网站名和页面的名
协议信息协议名/版本
2. 请求头
请求头是浏览器发送给服务器,那么就是浏览器想通知服务器做一些事情。
MIME类型指定是的什么样的文件格式需要使用什么样的应用打开。
Accept: text/html,image/* →通知服务器浏览器接收的数据类型MIME Accept-Charset: ISO-8859-1 →通知服务器提交数据的编码方式
Accept-Encoding: gzip,compress →通知服务器浏览器支持数据的压缩
Accept-Language: en-us,zh-cn →通知服务器浏览器当前的语言信息
Host: :80→通知服务器要请求的主机名
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 →通知服务器资源的最新修改时间
Referer: /index.jsp→通知服务器本次请求来自于哪一个URL User-Agent: Mozilla/4.0 →通知服务器客户端使用的浏览器内核
Cookie →通知服务器请求中带有Cookie数据Connection: close/Keep-Alive →通知服务器可以保持建立好的连接
Date: Tue, 11 Jul 2000 18:23:51 GMT →通知服务器发送请求的时间
请求是由浏览器发送的。
那么我们程序员一般是修改不了这些请求头数据。
但是在特定的情况下需要修改请求的头信息,那么此时就需要使用到JavaSE的网络编程知识的一些基础。
URL 主要使用该类来描述浏览器地址栏中的地址信息。
HttpURLConnection 主要描述的是客户端和服务器建立的连接对象
setRequestProperty() 可以设置请求头信息
3. 请求体
主要包含的是POST提交的数据。
☺多学一招:HTTP1.0和1.1的区别是什么。
HTTP1.0 该协议在发送请求的时候没有Host字段,浏览器为每一次请求建立独立的连接。
思考:如果需要浏览的页面中有3个图片。
那么请问发送了几次请求?
4 = 1次文本+3次图片
HTTP1.1 提供了一个必须的Host字段,而且建立好一次连接之后可以重复使用。
提高用户的上网体验。
◆响应信息
HTTP/1.1 200 OK →响应行
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=A8FB52…; Path=/day04→响应头
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 620
Date: Fri, 11 Jan 2013 07:42:39 GMT
→空白行
This is my JSP page. →响应体
1. 响应行
协议和版本
响应状态码200 处理成功302和304需要细化请求404资源不存在500服务器失败
状态码说明信息OK
2. 响应头
Location: /index.jsp→通知浏览器需要进一步细化请求的路劲Server:apache tomcat →通知浏览器服务器的名
Content-Encoding: gzip →通知浏览器响应数据类型是压缩格式
Content-Length: 80 →通知浏览器数据的长度
Content-Language: zh-cn →通知浏览器语言
Content-Type: text/html; charset=GB2312 →通知浏览器内容类型
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT →通知浏览器资源最后一次修改的时间Refresh: 1;url= →通知浏览器自动定时刷新
Content-Disposition: attachment; filename=a.zip →通知浏览器数据的处理方式
Transfer-Encoding: chunked →通知浏览器数据是否切块
Set-Cookie:SS=Q0=5Lb_nQ; path=/search →通知浏览器需要使用Cookie存储数据Expires: -1 →通知浏览器不要缓存页面
Cache-Control: no-cache
Pragma: no-cache
Connection: close/Keep-Alive →通知浏览器服务器已经保持了连接Date: Tue, 11 Jul 2000 18:23:51 GMT →通知浏览器服务器处理的时间
3. 响应体
服务器发送给浏览器需要的资源数据
案例一: 使用动态网页开发技术实现图片的下载
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
// 通知浏览器以下载的方式打开美女
response.setHeader("content-disposition",
"attachment;filename=mv.jpg");
// 获取图片资源
InputStream in =
this.getServletContext().getResourceAsStream("/0001.jpg");
// 获取输出到页面的输出流对象
OutputStream out = response.getOutputStream();
byte [] bs = new byte[1024];
int len = 0;
while((len = in.read(bs)) != -1){
out.write(bs, 0, len);
}
// 释放资源
in.close();
out.close();
}
总结:HTTP协议本身在传递数据的时候,数据时明码传输的。
如果用户需要传输一些隐私的数据,那么需要进行加密。
方式1:使用各种语言支持的加密方式。
方式2:建立客户端和服务器端加密的通信连接。
HTTPS协议
加密的HTTP协议,客户端浏览器和服务器之间会建立一个加密的通道,在该通道下传递的数据都是安全的。
如:在线交易、网上银行。
那么我们就需要在Tomcat中实现HTTPS的搭建。
1. 生成证书
keytool -genkey -alias tomcat -keyalg RSA -keystore d:/tomcat.keystore
2. 在tomcat中引入证书
配置server.xml文件如下
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="d:\tomcat.keystore"
keystorePass="123456"
/>
3. 使用浏览器建立安全的连接https://localhost:8443
扩展:Android的应用中都默认有一个调试级别的keystore文件。
学生疑惑解答
1.tomcat启动的时候一闪而过。
没有配置java_home环境变量。
java_home=D:\jdk6.0
2.如果启动直接报错。
如果启动的时候发现错误信息后直接关闭了窗口,那么请查看日志信息文件。
如果发现时地址冲突了,那么修改server.xml文件中的8080端口即可。
总结
大家需要数量掌握网站的各种发布方式。
对于常见的响应头字段以及响应状态码值需要记忆。