文章目录
一、HTTP协议(重点概念)
1.协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定
2.超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器
3.目前我们使用的是HTTP/1.1版本
4.在HTTP/1.0版本中,只实现了Pragema:no-cache,没有实现Cache-Control
二、Web服务器、浏览器、代理服务器(重点概念)
1.在浏览器地址栏输入URL后,我们的浏览器给Web服务器发送了一个Request
2.Web服务器接到Request后进行处理,生成相应的Response(对象)
3.然后发送给浏览器,浏览器解析Response中的HTML
三、URL详解(重点概念)
URL(uniform resource locator):用于描述一个网络上的资源
格式:scheme://host[:port#]/path/…/[?query-string]
scheme:指定底层使用的协议(例如:http,https,ftp)
host:HTTP服务器的IP地址或者域名
port#:HTTP服务器的默认端口是80,若是80端口则端口号可省略,若是其他的则必须指明
path:访问资源的路径
query-string:发送给Web服务器的数据
http://www.mywebsite.com/sj/test/test.aspx?name=sviergn&x=true
schema:http
host:www.mywebsite.com
path:/sj/test/test.aspx
query string:name=sviergn&x=true
四、HTTP协议其他(重点概念)
(一)HTTP协议是无状态的
同一个客户端的这次请求和上次请求是没有对应关系的,对http服务器来说,它并不知道这两个请求来自同一个客户端,为了解决这个问题,web程序引入了cookie机制来维护状态
(二)打开一个网页需要浏览器发送很多次Request
1.当你在浏览器输入URL(例如http://www.cnblogs.com)的时候,浏览器发送一个Request去获取该URL的html,服务器把Response发送回给浏览器
2.浏览器分析Response中的HTML,发现其中引用了很多其他文件,比如图片,CSS文件,JS文件,浏览器会自动再次发送Request去获取图片,CSS文件,或者JS文件
3.等所有的文件都下载成功后,网页就被显示出来了
(三)Get和Post方法的区别
Http协议定义了很多与服务器交互的方法,最基本的是GET,POST,PUT,DELETE,对URL地址描述的网络资源尽心个增删查改
1.GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456。
Post方法是把提交的数据放在HTTP包的Body中
2.Get提交的数据大小有限制(因为浏览器对URL的长度有限制),而Post方法提交的数据没有限制
3.Get方式需要使用Request.QueryString来取得变量的值,而Post方式通过Request.Form来获取变量的值(在servlet中会说)
4.Get方式提交数据,会带来安全问题,比如一个登录页面,通过Get方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码
5.Get后退按钮/刷新无害,Post数据会被重新提交(浏览器应该告知用户数据会被重新提交
)
6.Get书签可收藏,Post为书签不可收藏(???)
7.Get能被缓存,Post不能缓存(???)
8.Get编码类型application/x-www-form-url,Post编码类型encodedapplication/x-www-form-urlencoded或multipart/form-data,为二进制数据使用多重编码
9.Get历史参数保留在浏览器历史中,Post参数不会保存在浏览器历史中
10.Get对数据长度有限制,当发送数据时,Get方法向URL添加数据,URL的长度是受限制的(最大长度2048个字符),而Post无限制
11.Get只允许ASCII字符。Post没有限制,也允许二进制数据
12.与Post相比,Get的安全性较差,因为所发送的数据是URL的一部分。在发送密码或其他敏感信息时绝不要使用Get。
Post比Get更安全,因为参数不会被保存在浏览器历史或web服务器日志中
(四)状态码
1.Response消息中的第一行叫做状态行,由HTTP协议版本号,状态码,状态消息三部分组成。状态码用来告诉HTTP客户端,HTTP服务器是否产生了预期的Response。
2.HTTP/1.1中定义了5类状态码,状态码由三位数字组成,第一个数字定义了相应的类别
1XX 提示信息 - 表示请求已被成功接收,继续处理
2XX 成功 - 表示请求已被成功接收,理解,接受
3XX 重定向 - 要完成请求必须进行更进一步的处理
4XX 客户端错误 - 请求有语法错误或请求无法实现
5XX 服务器端错误 - 服务器未能实现合法的请求
常见的状态码
200 OK(表示请求被成功地完成,所请求的资源发送回客户端)
302 Found(重定向,新的URL会在Response的Location中返回,浏览器将会自动使用新的URL发出新的Request)
304 Not Modified(代表上次的文档已经被缓存了,还可以继续使用)
400 Bad Request(客户端请求有语法错误,不能被服务器所理解)
403 Forbidden(服务器收到请求,但是拒绝提供服务,比如说服务端仅仅提供了处理get请求的方法,但是你发送的请求是post请求)
404 Not Found(输错了URL,请求资源不存在。一般404都是路径不对)
500 Internal Server Error(服务器发生了不可预期的错误)
503 ServerUnavailable(服务器当前不能处理客户端的请求,一段时间后可能恢复正常)
五、HTTP需要了解的知识点
(一)HTTP消息的结构
(可用Fiddle捕捉,在Inspectors tab下以Raw的方式看到)
1.Request消息的结构
(1)Request line:METHOD(表请求方法)/path-to-resource(表请求资源) HTTP/Version-number(表HTTP协议的版本号)
(2)Request header:Header-Name-1:value
Header-Name-2:value
(3)空行
(4)body:当使用的是Get方法时,body是空的
2.Response消息的结构
(1)Response line:HTTP/version-number(表HTTP协议版本号) status-code(表状态码) message()
(2)Response header
(3)空行
(4)body
(二)HTTP Request header(了解)
(Request各种头域)