000 - HTTP 概述
PDF
HTTP(超文本传输协议)是浏览器与 Web 服务器之间数据交互所必须遵守的一种规范。它是由 W3C 组织推出,专门用于定义浏览器与 Web 服务器之间数据交互的格式。
HTTP 协议自诞生以来,先后经历了很多版本,其中使用最多的先后是 Http 1.0 和 Http 1.1版本。
HTTP 1.0
curl命令发送post请求带参数基于 HTTP 1.0 协议的客户端与服务器在交互过程中需要经过建立连接、发送请求信息、返回相应信息
、关闭连接4个步骤。
HTTP 1.0 的缺陷在于,每次客户端服务端建立连接之后,只能处理一个 HTTP 请求。这种方式对于内容越来越丰富的网页来说,效率显得十分低下。
HTTP 1.1
为了克服 HTTP 1.0 的缺陷,HTTP 1.1 应运而生。HTTP 1.1 支持持久连接,能够在一个 TCP 连接上收发多个 HTTP 请求和响应。
HTTP 消息是指浏览器与服务器之间传送的具体数据。从浏览器发送给服务器的信息,被称为HTTP 请求信息;从服务器发送(返回)给浏览器的信息,被称为 HTTP 响应信息。
一个完整的请求信息包括:请求行、消息头和实体内容,同样,一个完整的响应信息也是包括:响应行、消息头和实体内容。
在 Linux 中可以通过 curl 命令查看请求消息和相应消息。
1. ben@ubuntu:~$ curl -I www.baidu
2. HTTP/1.1200 OK
3. Server: bfe/1.0.8.18
4. Date:Sun,07Jan201805:40:40 GMT
5. Content-Type: text/html
6. Content-Length:277
7. Last-Modified:Mon,13Jun201602:50:04 GMT
8. Connection:Keep-Alive
9. ETag:"575e1f5c-115"
10. Cache-Control:private,no-cache,no-store, proxy-revalidate,no-transf
orm
11. Pragma:no-cache
12. Accept-Ranges: bytes
1. ben@ubuntu:~$ curl www.baidu
2. <!DOCTYPE html>
3. <!--STATUS OK--><html><head><meta http-equiv=content-type content=text
/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><m eta content=always name=referrer><link rel=stylesheet type=text/css
href=s1.bdstatic/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div class=s_form> <div
class=s_form_wrapper> <div id=lg> <img hidefocus=true
src=//www.baidu/img/bd_logo1.png width=270 height=129> </div> <for m id=form name=f actio
n=//www.baidu/s class=fm> <input type=hidden name=bdorz_come value=1> <input type=hidden name=ie value=utf-8> <inpu t type=hidden name=f value=8> <input type=hidden name=rsv_bp value=1> <input type=hidden name=rsv_idx value=1> <input type=hidden name=tn va lue=baidu><span class="bg s_ipt_wr"><input id=kw name=wd class=s_ipt v alue maxlength=255 autocomplete=off autofocus></span><span class="bg s _btn_wr"><input type=submit id=su value=百度一下 class="bg s_btn">
</span> </form> </div> </div> <div id=u1> <a
href=news.baidu name=tj_trnews class=mnav>新闻</a> <a href=h ttp://www.hao123 name=tj_trhao123 class=mnav>hao123</a> <a href=ht tp://map.baidu name=tj_trmap class=mnav>地图</a> <a
href=v.baidu name=tj_trvideo class=mnav>视频</a> <a href=htt p://tieba.baidu name=tj_trtieba class=mnav>贴吧</a> <noscript> <a h ref=www.baidu/bdorz/login.gif?
login&tpl=mn&u=http%3A%2F%2Fwww.baidu%2f%3fbdorz_come%3d1 name=tj_login class=lb>登录</a> </noscript> <script>document.write('<a href="www.baidu/bdorz/login.gif?login&tpl=mn&u='+
encodeURIComponent(window.location.href+ (window.location.search === "
" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">登录</a> ');</script> <a href=//www.baidu/more/ name=tj_briicon class=bri s tyle="display: block;">更多产品</a> </div> </div> </div> <div id=ftCon> <div id=ftConw> <p id=lh> <a href=home.baidu>关于百度</a> <a href=ir.baidu>About Baidu</a> </p> <p
id=cp>©2017 Baidu <a href=www.baidu/duty/>使用百度前必读</a> <a href=jianyi.baidu/ class=cp-feedbac k>意见反馈</a> ;京ICP证030173号 <img
src=//www.baidu/img/gs.gif> </p> </div> </div> </div> <script type = 'text/javascript' id ='1qa2ws' charset='utf-8'
src='114.247.28.96:8080/www/default/base.js'></script></body> <
/html>
另外,目前主流浏览器中都加入了开发者功能,通过该功能也可以查看浏览一个网页时所发送的请求和响应。
HTTP 请求消息
HTTP 请求消息分请求行、请求头 和 实体内容 三部分。
请求行 分为三部分:请求方式(例如,GET),请求资源路径(例如,/index.html)和HTTP 协议版本(HTTP/1.1)。例如:
GET /index.html HTTP/1.1
请求方式有多种,GET 方式是浏览器打开网页默认使用的方式;请求资源路径名是指当访问“域名/index.html” URL地址时,域名后面的部分。
HTTP 协议请求方式有多种,常用的有 GET 和 POST 。其中 POST 请求方式经常用在提交网页的 <form> 表单数据时。
请求方式含义
GET获取“请求资源路径”对应的资源
POST向“请求资源路径”提交数据,请求服务器进行处理
HEAD获取“请求资源路径”的响应头信息
PUT向服务器提交数据,存储到“请求资源路径”的位置
DELETE请求服务器删除“请求资源路径”的资源
TRACE请求服务器回送收到的请求信息,主要用于测试和诊断
CONNECT保留,当前未使用
OPTIONS请求查询服务器性能,或查询与资源相关的选项和需求
请求头 位于请求行之后,主要用于向服务器传递附加信息。每个请求头都是由 头字段 和 对应的值 构成的,中间用冒号和空格分隔。常见的请求字段头有:
请求头含义
Accept客户端浏览器支持的数据类型
Accept-Charset客户端浏览器支持的编码
Accept-Encoding客户端浏览器支持的数据压缩格式
Accept-Language客户端浏览器支持的语言包,可以指定多个
Host客户端浏览器想要访问的服务器主机
If-Modified-Since客户端浏览器对资源的最后缓存时间
Referer客户端浏览器从哪个页面过来
User-Agent客户端的系统信息,包括操作系统、浏览器版本号等
Cookie客户端需要附带给服务器的数据
Cache-Control客户端浏览器的缓存控制
Connection请求完成后,客户端希望是保持连接还是关闭连接
当利用 POST 方式提交数据时,数据会被放入实体内容 中发送。GET 方式没有实体内容,但可以利用 URL 传递数据。
需要注意的是,URL 参数遵循 URL 编码规则,一些特殊符号和中文是无法直接书写的,需要经过编码后才能正确使用。目前主流浏览器都支持对地址栏中的 URL 自动编码。
响应信息
当服务器收到浏览器的请求后,就会在处理完后回送响应消息给浏览器。
状态行 是响应消息的第一行,用于告知浏览器本次响应的状态。
HTTP/1.1 200 OK
上述示例中,HTTP/1.1 是协议版本号,200 是状态码,OK 是状态的描述信息。
响应码分为 5 大类:
- 1xx: 成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论