什么是HTTP协议?
HTTP协议就是用于规定浏览器和服务器之间通信的方式、规则
主要规定了浏览器给服务器发送请求信息的格式
以及规定了服务器给浏览器发送响应信息的格式
** HTTP工作时遵循的基本原则(了解):
(1) 一次请求只对应一次响应
(2) 请求只能由浏览器发起, 服务器只能被动的等待请求, 根据请求作出回应/响应。
HTTP协议详解
HttpWatch: 针对IE浏览器提供的一个监听工具,用于监听浏览器和服务器通信的内容。
HTTP请求
1、请求行
GET /news/hello.html HTTP/1.1
GET: 表示请求的提交方式,在Http协议中一共规定了7种提交方式,但是常用的只有GET和POST。
/news/hello.html:请求资源路径,表示浏览器请求的是哪一个Web应用以及哪一个Web资源文件。
HTTP/1.1:请求所遵循的协议和版本。
2、若干请求(报)头
请求头都是Key-Value结构,例如:
Host: localhost – 通知服务器,浏览器请求的是哪一个主机。
Accept: text/html, application/xhtml+xml – 通知服务器,浏览器能接收的响应数据类型。
xxx: xxx
3、请求实体内容
如果请求方式为GET提交,请求实体中一定没有内容
如果请求方式为POST提交,并且请求中携带了数据,请求实体中才会有内容
HTTP响应
1、状态行
HTTP/1.1 200 OK
HTTP/1.1:响应所遵循的协议以及协议的版本
200:状态码,是一个三位的数字,表示服务器对请求处理的结果
200:表示请求处理成功
302:表示请求重定向(需要再进一步请求才可以获取到相应的资源)
304、307:表示通知浏览器使用缓存
404:表示浏览器请求的资源不存在(浏览器的问题,请求路径有误)
500:表示服务器在处理请求的过程中,程序抛出了异常。
OK:描述短语,表示请求处理的结果
200:OK
404:Not Found
500:Internal Server Error
…
2、若干响应头:
Content-Type: 表示服务器响应的数据类型,text/html, image/*…
Content-Length: 表示服务器响应的数据长度,例如:384 字节
Set-Cookie: 和cookie技术相关的一个头,后面会提到。
…
3、响应实体内容
响应实体就是浏览器所请求文件的内容。
例如:浏览器向服务器请求一个hello.html文件,服务器会找到hello.html文件,将文件的内容作为响应实体发送给浏览器
内容补充
问题1:请求方式什么时候是GET提交?什么时候是POST提交?
只有当使用表单(form),并且明确的在表单上通过method指定提交方式为POST时,才是POST提交,否则其他方式都是GET提交(AJAX除外)。
例如:
<form action="#" method="POST"></form>
判断以下请求方式是GET还是POST提交?
(1)<form action="#"></form> ——GET提交
(2)<form action="#" method="GET"></form> ——GET提交
(3)<form action="#" method="POST"></form> ——POST提交
(4)点击超链接访问服务器,例如:
<a href="http://www.baidu.com">百度一下</a> ——GET提交
(5)直接在浏览器的地址栏中书写URL地址访问服务器 ——GET提交
问题2:GET提交和POST提交有什么区别?
主要体现在请求参数传输过程的不相同
GET提交:
(1)将数据通过问号拼接在地址栏URL地址的后面,相对非常不安全。
(2)将数据拼接在地址栏URL地址的后面,数据量是有限制的,通常不能超过1KB或者4KB
POST提交:
(1)POST提交是通过请求实体将数据提交给服务器,不会显示在地址栏上,因此相对更加安全!
(2)POST提交是通过请求实体提交数据,数据量理论上是没有限制的!
3、总结:
(1)如果只是单纯的做一个跳转,请求中没有任何数据,尽量使用GET提交
(2)如果在请求中有携带数据,但数据量并不带,并且数据没有隐私性,也尽量使用GET提交。
(3)如果在请求中有携带数据,数据量比较大,或者数据较为隐私,此时推荐使用POST提交