当前位置: 移动技术网 > IT编程>开发语言>其他编程 > 详解HTTP协议简介

详解HTTP协议简介

2018年02月07日  | 移动技术网IT编程  | 我要评论

一、简介

http(hypertext transfer protocol, 超文本传输协议) 是访问互联网使用的核心通信协议,也是所有web应用程序使用的通信协议。

消息模型:客户端发送请求消息,服务器返回响应消息。传输层使用具有状态的tcp协议,但http协议本身不具有状态。

二、http请求

http请求消息分为消息头和消息主体(可选),消息头和消息主体用空白行分隔。实例:

get / http/1.1
 host: www.cnbeta.com
 user-agent: mozilla/5.0 (windows nt 6.3; wow64; rv:39.0) gecko/20100101 firefox/39.0
 accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
 accept-language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
 accept-encoding: gzip, deflate
 referer: https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&ch=&tn=baidu&bar=&wd=cnbeta&rn=&rsv_pq=917ee072000177b3&rsv_t=67c29bdcyxbklwxp5lmxvsvgqrswnkznmk4xghbaghkt7xqgt%2bfeup%2bmdo4
 cookie: hm_lvt_4216c57ef1855492a9281acd553f8a6e=1437836998; hm_lpvt_4216c57ef1855492a9281acd553f8a6e=1437836998; _ga=ga1.2.1311393193.1437836981; bfd_s=208385984.21594488.1437837000279; tma=208385984.15187292.1437837000282.1437837000282.1437837000282.1; tmd=1.208385984.15187292.1437837000282.; bfd_g=b56c782bcb75035d00000a500201ba8455b3a6ca
 connection: keep-alive

  说明:

1.消息头第一行由三个以空格分隔的元素组成,分别为http方法、请求的url和使用的http版本

http方法;

1). get:用于获取资源,参数通过url查下字符串方式提交给服务器,无消息主体

2). post:用于执行操作,参数可以通过url查下字符串方式和消息主体提交给服务

3). head:用于检测资源是否存在,与get类似,区别在于在响应消息中返回的消息主体为空

4). trace:用于诊断,可判断客户端和服务器之间是否存在代理服务器,原理:服务器在响应主体中返回收到的请求消息的具体内容

5). options:用于要求服务器报告对某一资源有效的http方法,服务器常返回allow消息头的响应,并列出所有有效的方法

6). put:使用请求主体中的内容向服务器上传指定的资源

7). delete:用于删除资源

8). connect:

请求url:用于指定请求的资源名称以及查下参数

使用的http版本:常用1.0和1.1版本,在1.1版本中请求消息中必须包含host请求头

2.其他

host:指定请求访问的主机名,当多个web站点部署在同一台主机上时需要使用host消息头

user-agent:指定客户端软件的信息,不如浏览器类型和版本、操作系统类型和版本等

referer:表示发出请求的原始url

cookie:提交服务器想客户端发布的其他参数

三、http 响应

http响应消息分为消息头和消息主体(可选),消息头和消息主体用空白行分隔。实例:

http/1.0 200 ok
 content-type: text/html
 last-modified: sat, 25 jul 2015 15:52:02 gmt
 vary: accept-encoding
 server: nginx/1.4.1
 date: sat, 25 jul 2015 15:53:04 gmt
 etag: "55b3b0a2-2539c"
 age: 74
 x-cache: hit from rj-zsbgp-cdn-7410  set-cookie: uuid=aqaaaex080znuwoajh3pdhcux+ok943s; path=/; expires=sat, 25-jul-15 17:09:08 gmt; httponly
12  <!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="content-type" content="text/html; charset=utf-8">
 <title>cnbeta.com™</title>
18  <body>
 hello, silence!
 </body>
 </html>

  说明:

1.消息头第一行由三个空格分开的元素组成,分别表示http版本、请求状态码(数字)、请求状态描述
2.其他:

server:旗标,指明使用的web服务器软件

set-cookie:设置cookie信息,在随后向服务器发送的请求中由cookie消息头返回

content-type:指定消息主体类型

content-length:指定消息主体的字节长度

url

url(uniform resource locator,统一资源定位符)是web资源的唯一标识,格式:

protocol: //hostname[:port]/[path/]file[?param=value]

rest

rest(表达性状态转移)是分布式系统的一个体系架构,rest风格url 指在url中使用文件路径方式替代查询字符串

四、http消息头

1.常用消息头

connection:用于指定告诉通信另一端传输完成后关闭tcp连接还是保持连接,http/1.1中默认为keep-alive,可设置为close

content-encoding:用于指定消息主体中编码格式

content-length;用于指定消息主体的字节长度

content-type:用于指定消息主体的内容类型

transfer-encoding:常指定为transfer-encoding:chunked,用于表示边产生数据边传输,在最后一块数据中0\r\n\r\n标识数据结束,在其他块数据中格式为\r\ncontent\r\n

2.请求消息头

accept:用于告知服务器客户端接受哪些类型的数据

accept-encoding:用于告知服务器客户端接受哪些编码格式

authorization:用于内置http身份验证,用于提交用户名/密码给服务器

cookie:提交cookie

if-modified-since:用于告知服务器最后一次收到请求资源的响应时间,当资源未发生变化时服务器返回状态码304表示使用本地缓存

if-none-match:用于指定实体标签,说明主体内容的标识符,当最后一次收到所请求的资源时,浏览器提交服务器发布的实体标签。服务器可通过使用实体标签确定浏览器是否使用缓存副本

origin:用在ajax跨域请求,指定发出请求的域名

referer:指定发出请求额原始url

user-agent:用于指定客户端信息

3.响应消息头

access-control-allow-origin:用于指顶是否可通过跨域ajax请求获取资源

cache-control:用于向浏览器发送缓存指令(no-cache)

etag:指定实体标签,客户端可在后续提交实体标签获得与if-none-match消息头相同的资源,通知服务器浏览器当前缓存保存的是哪个版本的资源

expires:指定消息主体的有效时间,在时间内,浏览器可使用资源的缓存副本

location:重定向响应,说用重定向的目标

pragma:向浏览器传送缓存指令(no-cache)

server:告知浏览器服务器软件相关信息

set-cookie:向浏览器发布cookie

www-authenticate:用于401状态码响应,提供与服务器所支持的身份验证类型等信息

x-frame-options:指示浏览器frame是否及如何加载当前响应

五、cookie

服务器使用set-cookie响应消息头向浏览器发布cookie信息,可以使用多个响应消息头发布多个cookie,浏览器也可使用cookie请求消息头提交使用分号分隔的多个cookie信息给服务器

cookie具有名称、值、有效时间、有效域、有效路径、是否为https请求、是否可在客户端修改属性,可通过set-cookie响应消息头设置,参数列表如下:

expires:指定cookie有效时间,若未指定则表示只保存在当前浏览器回话中

domain:指定cookie有效域,必须和收到cookie的域相同或者是其父域

path:指定cookie的有效url路径

secure:仅仅在https请求中提交cookie信息

httponly:用于指定在客户端是否可以通过js修改cookie信息

六、状态码

状态码用于说明请求结果,分为5大类:

1xx:提供信息

2xx:请求成功

3xx:请求重定向

4xx:请求包含错误

5xx:服务器执行错误

常见状态码说明:

100 continue:当客户端提交一个包含主体的请求时,将发送该响应,表示已收到请求消息头,客户端继续发送主体

200 ok:请求成功,且响应主体中包含请求结果

201 created:put请求的响应返回状态码,表示请求成功提交

301 moved permanently:指示浏览器永久重定向到location指定的url,客户端使用新的url替换原始url

302 found:指示浏览器暂时重定向到location指定的url,客户端随后的请求恢复到原始url

304 not modified:指示浏览器使用缓存中保存的资源副本

400 bad request:表示发起无效http请求

401 unauthorized:服务器需要进行http身份认证

403 forbidden:禁止访问请求资源

404 not found:表示资源不存在

405 method not allowd:表示url不支持请求方法

413 request entity too large:表示请求主体过长,服务器无法处理

413 request uri too long:表示请求url过长,服务器无法处理

500 internal server error:表示服务器执行遇到错误

503 service unavailable:表示服务器运行正常,但无法做出响应

七、https

http使用非加密的tcp作为传输机制,缺点在网络适当位置的攻击者能够截获发送内容,https和http都属于应用层协议,当https通过安全传输机制-安全套接层(secure socket layer,ssl)传输数据,可保护通过网络传输数据的机密性和完整性

ssl已经由tls(transport layer security,传输层安全)代替.

八、http代理

代理服务器运行在客户端浏览器和web服务器之间,浏览器将所有请求提交给代理服务器,代理服务器将请求传送给相关web服务器,并将响应返回给浏览器

http代理服务器工作机制:

当浏览器向代理服务器发送http请求时,代理服务器将完整url插入请求中,代理服务器将提取主机名和端口,并使用这些信息将请求指向正确的目标web服务器

当浏览器向代理服务器发送https请求时,浏览器将代理作为tcp级中继,浏览器使用connect方法向代理服务器提交一个http请求,并指定url中的目标主机名称和端口号,从而建立中继。若代理允许该请求,则返回200状态码的http响应,一直开放tcp链接,从此以后作为目标web服务器的tcp级中继.

九、http身份认证

http具有自己的用户身份验证机制,主要方案由:

basic:在请求消息头中随每条消息以base64编码字符串的形式发送用户证书

ntlm:是质询-响应式机制,使用windows ntlm协议版本

digest:是质询-响应式机制,随同用户证书一起使用一个随机值的md5校验和

总结

以上所述是小编给大家介绍的http协议简介,希望对大家有所帮助

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网