文章目录
6.7 HTTP协议概述
6.7.1 什么是HTTP协议?
<mark>HTTP是用于规定浏览器和服务器通信的方式</mark>。
<mark>规定</mark>两方面内容:
- 浏览器向服务器发送的<mark>请求信息的格式</mark>,
- 服务器向浏览器做出的<mark>响应信息的格式</mark>。
HTTP工作时遵循的基本原则:
- <mark>一次请求对应一次响应</mark>
- <mark>请求只能由浏览器发起</mark>,服务器只能被动的等待请求,根据请求作出回应
文章目录
6.8 HTTP协议详解
6.8.1 HTTP - 请求
1、请求行 - GET .... HTTP/1.1
GET /news/hello.html HTTP/1.1
-
GET
:
提交方式,在HTTP协议中一共规定了7种提交方式,其中5种都不常用,只用GET和POST。 -
/news/hello.html
:
请求的资源路径,用于通知服务器浏览器访问的是服务器中哪个Web应用以及应用下的哪一个资源文件。 -
HTTP/1.1
:
请求所遵循的协议和版本
2、若干请求头/若干请求报头
请求头 - 浏览器发送给服务器,为了让服务器更好解析请求,比处理请求。
请求头都是Key-Value结构,
例如:
Host
: localhost – 表示浏览器请求的是服务器中的<mark>哪一台虚拟主机</mark>。Cookie
: xxx=xxx; ( 重点) – <mark>cookie技术中的一个头</mark>(后面讲)- xxx : xxx
- …
3、请求实体内容
- 如果请求方式是
GET
提交,请求实体不会有内容。 - 如果请求方式是
POST
提交,并且请求中携带了数据,请求实体才会有内容
6.8.2 HTTP - 响应
1、状态行
HTTP/1.1 200 OK
HTTP/1.1
:<mark>表示响应信息所遵循的协议和版本</mark>200
:是一个三位是数字,叫做<mark>状态码</mark>,表示请求处理的结果。
常见的状态码有:
- 200:表示服务器处理请求的结果是<mark>成功</mark>的!
- 304/307:表示服务器通知浏览器<mark>使用缓存</mark>
- 400:表示请求<mark>参数类型不匹配</mark>
- 404:表示客户端请求的<mark>资源不存在</mark>
- 500:表示服务器端在处理<mark>请求</mark>的过程中出现了错误或<mark>异常</mark>
OK
:<mark>描述短语</mark>,也表示请求处理的结果
常见描述语:
- 200 OK
- 404 NOT FOUND
- 500 Internal Server Error
2、若干响应头
响应头的格式也是Key-Value结构:
Content-Type: text/html
– 通知浏览器,服务器响应的数据类型是什么
text/html
– 表示服务器响应是一个html格式的网页,如果响应是一个网页,还可以在值的后面加上一个编码,例如: text/html;charset=utf-8text/css
– 表示服务器响应是一个css文件image/gif
– 表示服务器响应的是一个gif格式的图片...
Content-Length
: 服务器响应的数据长度,单位是字节Set-Cookie
: <mark>Cookie技术中的一个头</mark>(后面讲解)Refuresh: 5 ; url=http://www.baidu.com/index.html
: 自动转跳…(如:下载时)...
3、响应实体内容
如果浏览器向服务器请求的是一个文件,服务器会将这个文件的内容作为响应实体发送给浏览器。
比如:
浏览器请求是 hello.html文件,
服务器就会将hello.html文件的内容作为响应实体发送给浏览器
localhost/news/hello.html,
HTTP总结:
- <mark>HTTP</mark>: 用于规定浏览器和服务器之间<mark>通信的方式</mark>
- <mark>请求信息</mark>中包含哪几部分内容:
- 请求行、
- 请求报头、
- 请求实体
- <mark>响应信息</mark>中包含哪几部分内容:
- 状态行、
- 响应报头、
- 响应实体
- <mark>请求行</mark>中包含什么内容:
- 请求方式、
- 请求资源路径、
- 协议和版本
- <mark>状态行</mark>中包含什么内容:
- 协议和版本、
- 状态码、
- 描述短语
6.8.3 内容补充
问题1:请求方式什么时候是GET
提交?什么时候是POST
提交?
只有使用表单(
<form>
),并且再表单上明确的通过method
指定提交方式为POST
时,才是POST
提交。
其他方式都是GET
提交(AJAX
除外)
例子:
判断以下请求方式是GET还是POST?(1)<form action="#"></form> -- GET提交 (2)<form action="#" method="GET"></form> -- GET提交 (3)<form action="#" method="POST"></form> -- POST提交 (4)点击超链接访问服务器,例如: -- GET提交 <a href="http://www.baidu.com">百度一下</a> (5)直接在浏览器的地址栏中书写URL地址访问服务器 -- GET提交
问题2:GET
提交和POST
提交有什么区别?
GET
提交:
- 会将请求参数<mark>拼接在URL地址的后面</mark>,<mark>显示在地址栏中</mark>,<mark>相对不安全</mark>
- 将参数显示在地址栏中,<mark>数据量不能太大</mark>,不能超过1K或者是4K
POST
提交:
- 不会将参数拼接在地址栏后面, 而是通过请求实体将参数发送给服务器, <mark>相对来说更加安全</mark>!
- 通过请求实体传数据给服务器, <mark>数据量理论上没有限制</mark>!
当向服务器<mark>传输大量</mark>的数据或者传输的数据较为<mark>隐私</mark>,<mark>才会使用
POST
提交</mark>。
<mark>更多情况下,还是使用GET
提交</mark>!!