第三章Http协议(2)

来源:互联网 发布:手机淘宝登录没反应了 编辑:程序博客网 时间:2024/06/17 14:47

第 5 节5-为什么要研究Http协议

http协议

1.连接(Connection):浏览器和服务器之间传输数据的通道。 一般请求完毕就关闭,http不保持连接。不保持连接会降低处理速度(因为建立连接速度很慢),保持连接的话就会降低服务器的处理的客户端并发请求数,而不保持连接服务器可以处理更多的请求。

 

2.请求(Request):浏览器向服务器发送的“我要***”的消息,包含请求的类型、请求的数据、浏览器的信息(语言、浏览器版本等)

 

3.响应(Response):服务器对浏览器请求的返回的数据,包含是否成功、错误码等。浏览器不知道服务器内部发生了什么,也不知道服务器内部是简简单单输出一个静态文件还是经过了java代码的运算动态输出的(比如建立一个.html的映射)。

 

4、处理(Process)。

 

第 6 节6-Http协议之请求

第 7 节7-Http协议之状态码

 

http协议报文

 

1.请求(请求是可以伪造的)

GET / HTTP/1.1表示向服务器用GET方式请求首页,使用HTTP/1.1协议

User-Agent(简称UA)为浏览器的版本信息。通过这个信息可以读取浏览器是IE还是FireFox、支持的插件等。看看IE和Chrome的UserAgent不一样

Referer:来源页面、所属页面

Accept-Encoding:服务器支持什么压缩算法。Accept-Language:浏览器支持什么语言。

 

2.响应:

响应码:“200” : OK; 301;“302” : Found 暂时转移,用于重定向resp.sendRedirect("http://www.rupeng.com");会让浏览器再请求一次重定向的地址,重定向的请求是Get方式; "404" : Not Found 未找到。500 服务器错误(一般服务器出现异常),通过报错信息找出异常的点。403:客户端访问未被授权。

Content-Type: text/html; charset=utf-8 表示返回数据的类型,charset正文编码

 

3.服务器通过Content-Type告诉客户端响应的数据的类型,这样浏览器就根据返回数据的类型来进行不同的处理,如果是图片类型就显示,如果是文本类型就直接显示内容,如果用html类型就用浏览器显示内容.常用Content-Type:text/html、image/gif、image/jpeg、text/plain、text/javascript。这是为什么要的Servlet中设置contenttype的原因,试着改成text/plain,看输出html显示结果的不同。

 

【总结】

chrom浏览器发给服务器的请求包头

GET 发出请求

Host 一台服务器多个网站 虚拟技术

Connection 保持连接长远来说是短连接

Accept 浏览器端支持什么格式

Upgrade-Insecure-Requests 不知

User-Agent 浏览器版本 兼容性

Accept-Encoding 浏览器支持什么压缩算法

Accept-Language 浏览器支持什么语言

Cookie

 

404 not found

200 OK

302 临时重定向 临时被移动了 到location

301 永久重定向 SEO

 

 

【General】

RequestURL:http://127.0.0.1:8080/myweb1/showPerson

Request Method:GET

Status Code:200 OK

Remote Address:127.0.0.1:8080

【Response Headers】

Content-Length:1033

Content-Type:text/html;charset=UTF-8

Date:Fri, 12 Aug 2016 09:18:48 GMT

Server:Apache-Coyote/1.1

 

【Request Headers】

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

Accept-Encoding:gzip, deflate, sdch

Accept-Language:zh-CN,zh;q=0.8

Cache-Control:max-age=0

Connection:keep-alive

Host:127.0.0.1:8080

Upgrade-Insecure-Requests:1

User-Agent:Mozilla/5.0 (Windows NT 6.3;WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.21 Safari/537.36

 

第 8 节8-Http协议之缓存

 

=============================

A:学生

B:老师

 

A→B:老师我排行第几?

B→:你排行第五。最后一次考试时间是1月7日

 

A→B:老师我排行第几?上次你告诉我的时候最后一次考试时间是1月7日

 

B→A:排名没变。

 

Ctrl+F5(主流浏览器都支持):强制刷新,不让浏览器发送

 

=================-----

1.html

 

HTTP/1.1 200 OK

Server: Apache-Coyote/1.1

ETag: W/"310-1452062918929"

Last-Modified: Wed, 06 Jan 2016 06:48:38GMT

Content-Type: text/html

Content-Length: 310

Date: Thu, 07 Jan 2016 07:26:44 GMT

 

==========

Request:

If-None-Match:W/"310-1452062918929"

If-Modified-Since: Wed, 06 Jan 201606:48:38 GMT   上次我管你要1.html的时候,你返回给我的文件内容的修改时间是“Wed, 06 Jan 2016 06:48:38 GMT”

 

 

Response

HTTP/1.1 304 Not Modified   这次1.html的内容还没变,跟上次一样。报文体就不需要传递1.html的内容了。

Server: Apache-Coyote/1.1

Date: Thu, 07 Jan 2016 07:27:22 GMT

<!DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">

 

================

If-Modified-Since:Wed, 06 Jan 2016 06:48:38GMT

If-None-Match:W/"310-1452062918929"

 

304 缓存:没变。(*)  知道即可。

 

第 9 节9-Get和Post的区别

 

1.get(默认值)是通过URL传递表单值,post传递的表单值是隐藏到http报文体中,url中看不到。

区别(常考):get是通过url传递表单值,post通过url看不到表单域的值;get传递的数据量是有限的,如果要传递大数据量不能用get,比如type=“file”上传文章、type=“password”传递密码或者<textarea>发表大段文章,post则没有这个限制。

 

2.post区别:无法把网址发给其他人;只要当前页面请求是POST请求,那么刷新就是重新发出POST,部分浏览器会提示“是否重复提交”。

 

3.只要在地址栏中输入一个网址回车访问,那么就是GET。

 

4.数据格式。服务端文件名后跟着“?”,由于客户端可能向服务器端提交多个键值对,键值对之间用“&”进行分割,如果URL中有汉字、特殊符号等(尽量避免),则需要对URL进行编码。

 

【总结】

Http协议中:"." 当前目录;".."上一级目录;"/"根目录。注意Http协议中用"/"不用"\"。

通过如右图的结构去演示。

客户端不知道服务器端真实的文件结构,所以html中访问servlet的时候不要用磁盘中的真实路径,而是用客户端访问时候的“虚拟的路径”。

form的action路径需要注意的问题

如果要使用"/"从根目录开始的话,要使用request.getContextPath()拿到上下文路径。.

 

Get和Post区别:

Get参数数据是放到Http协议请求的第一行,长度有限;

Post参数是放到Http协议报文体重,长度不限;

GET /myweb1/test2?name=abc HTTP/1.1

POST /myweb1/test2 HTTP/1.1

 

如果传输少量数据,用Get;如果传输大量数据(大篇文章、文件),用Post。

Get:浏览器可能会缓存。Post则一定不会利用缓存。

 

第 10 节10-相对路径和绝对路径

 

1.Http协议中:"." 当前目录;".."上一级目录;"/"根目录。注意Http协议中用"/"不用"\"。

 

2.资源管理显示的结构。

 

3.客户端不知道服务器端真实的文件结构,所以html中访问servlet的时候不要用磁盘中的真实路径,而是用客户端访问时候的“虚拟的路径”。

 

4.form的action路径需要注意的问题

根目录/是网站地址如:127.0.0.1/

写相对路径时候要注意比较

 

5.如果要使用"/"从根目录开始的话,要使用request.getContextPath()拿到上下文路径。.

 

【总结】

虽然咋服务器上Html2.html和Test2Servlet不在一个文件件下,但是在浏览器查看的角度来说,是在同一目录下。

 

目录!=文件夹

 

http://yzk-pc:8888/myweb1/china/Html2.html

http://yzk-pc:8888/myweb1/aa/test2

 

../aa/test2

 

http://yzk-pc:8888/myweb1/aa/Html2.html

http://yzk-pc:8888/myweb1/aa/test2

 虽然在服务器上Html2.html和Test2Servlet不在一个文件夹下,但是在浏览器查看的角度来说,是在同一个目录下。

0 0
原创粉丝点击