欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

详解HTTP协议简介

程序员文章站 2022-04-29 16:34:43
一、简介 http(hypertext transfer protocol, 超文本传输协议) 是访问互联网使用的核心通信协议,也是所有web应用程序使用的通信协议。...

一、简介

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协议简介,希望对大家有所帮助