详解HTTP协议简介

一、简介

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协议简介,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

您可能感兴趣的文章:

  • HTTP协议简介_动力节点Java学院整理
  • Java获取http和https协议返回的json数据
  • Android使用http协议与服务器通信的实例
  • 网络传输协议(http协议)
  • Android通过HTTP协议实现上传文件数据
  • Linux下nginx配置https协议访问的方法
  • 全面了解Nginx中的HTTP协议相关模块配置
(0)

相关推荐

  • 全面了解Nginx中的HTTP协议相关模块配置

    要理解 HTTP 模块配置解析的过程,首先需要对 nginx 的配置文件结构做一个了解 nginx 的配置文件是用树状结构组织的,每个 NGX_CORE_MODULE 作为根统领着其下的所有配置项 而如下图所示,HTTP 模块的配置被分成了 main.server.location 三层 整个 nginx 配置解析的过程其实就是这棵树的深度遍历过程 而遍历 HTTP 子树的函数就是下面要介绍的 ngx_http_block 配置文件解析 -- http 配置块 当我们需要使用 http 模块的时

  • Java获取http和https协议返回的json数据

    现在很多公司都是将数据返回一个json,而且很多第三方接口都是返回json数据,而且还需要使用到http协议,http协议是属于为加密的协议,而https协议需要SSL证书,https是将用户返回的信息加密处理,然而我们要获取这些数据,就需要引入SSL证书.现在我提供两个方法,帮助各位如何获取http和https返回的数据. 获取http协议的数据的方法,如下: public static JSONObject httpRequest(String requestUrl, String requ

  • 网络传输协议(http协议)

    概述:指服务器和客户端间进行通信时的约束和规范,客户端与服务端的数据交互并不是杂乱无章的,需要遵照(基于)一定的规范进行 常见的协议: a) HTTP.HTTPS 超文本传输协议 b) FTP 文件传输协议 c) SMTP 简单邮件传输协议 本文主要介绍http超文本传输协议. 1.HTTP协议 即超文本传输协议,网站是基于HTTP协议的,例如网站的图片.CSS.JS等都是基于HTTP协议进行传输的.HTTP协议是由从客户机到服务器的请求(Request)和从服务器到客户机的响应(Respons

  • HTTP协议简介_动力节点Java学院整理

    TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性.Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求.Http会通过TCP建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,Http会立即将TCP连接断开,这个过程是很短的.所以Http连接是一种短连接,是一种无状态的连接.所谓的无状态,是指浏览器每次向服务器发起请求的时候,不是通过一个连接,而是每次都建立一个新的连接.如果是一个连接的话,服务器进程中就能

  • Linux下nginx配置https协议访问的方法

    一.配置nginx支持https协议访问,需要在编译安装nginx的时候添加相应的模块--with-http_ssl_module 查看nginx编译参数:/usr/local/nginx/sbin/nginx -V 如下所示: configure arguments: --prefix=/usr/local/nginx --with-google_perftools_module --without-http_memcached_module --user=www --group=www --

  • Android通过HTTP协议实现上传文件数据

    本文实例为大家分享了Android通过HTTP协议实现上传文件数据的具体代码,供大家参考,具体内容如下 SocketHttpRequester.java package cn.itcast.utils; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.InputStream; import java.io.Inp

  • Android使用http协议与服务器通信的实例

    网上介绍Android上http通信的文章很多,不过大部分只给出了实现代码的片段,一些注意事项和如何设计一个合理的类用来处理所有的http请求以及返回结果,一般都不会提及.因此,自己对此做了些总结,给出了我的一个解决方案. 首先,需要明确一下http通信流程,Android目前提供两种http通信方式,HttpURLConnection和HttpClient,HttpURLConnection多用于发送或接收流式数据,因此比较适合上传/下载文件,HttpClient相对来讲更大更全能,但是速度相

  • 详解HTTP协议简介

    一.简介 HTTP(HyperText Transfer Protocol, 超文本传输协议) 是访问互联网使用的核心通信协议,也是所有web应用程序使用的通信协议. 消息模型:客户端发送请求消息,服务器返回响应消息.传输层使用具有状态的TCP协议,但HTTP协议本身不具有状态. 二.HTTP请求 HTTP请求消息分为消息头和消息主体(可选),消息头和消息主体用空白行分隔.实例: GET / HTTP/1.1 Host: www.cnbeta.com User-Agent: Mozilla/5.

  • 详解HTTP协议(很经典)

    引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出. HTTP协议的主要特点可概括如下: 1.支持客户/服务器模式. 2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径.请求方法常用的有GET.HEAD.

  • 详解UDP协议格式及在java中的使用

    UDP是面向无连接的通讯协议,由于通讯不需要连接,所以可以实现广播发送.UDP通讯时不需要接收方确认,属于不可靠的传输,可能会出现丢包现象,实际应用中要求程序员编程验证. UDP适用于DNS.视频音频等多媒体通信.广播通信(广播.多播).例如我们常用的QQ,就是一个以UDP为主,TCP为辅的通讯协议. UDP报文格式如下: UDP首部有8个字节,由4个字段构成,每个字段都是两个字节, 源端口:数据发送方的端口号. 目的端口:数据接收方的端口号. 长度:UDP数据报的整个长度(包括首部和数据),其

  • 详解Http协议以及post与get区别

    一.什么是HTTP协议 HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程.客户端连上web服务器后,若想获得web服务器中的某个web资源,需遵守一定的通讯格式,HTTP协议用于定义客户端与web服务器通迅的格式. 二.HTTP协议的版本 HTTP协议的版本:HTTP/1.0.HTTP/1.1 三.HTTP1.0和HTTP1.1的区别 在HTTP1.0协议中,客户端

  • python3 shelve模块的详解

    python3 shelve模块的详解 一.简介 在python3中我们使用json或者pickle持久化数据,能dump多次,但只能load一次,因为先前的数据已经被后面dump的数据覆盖掉了.如果我们想要实现dump和load多次,可以使用shelve模块.shelve模块可以持久化所有pickle所支持的数据类型. 二.持久化数据 1.数据持久化 import shelve import datetime info = {'name': 'bigberg', 'age': 22} name

  • C++中运算符 &和&&、|和|| 的详解及区别

    C++中运算符 &和&&.|和|| 的详解及区别 简介: &&是逻辑与运算符,||是逻辑或运算符,都是逻辑运算符,两边只能是bool类型 &与| 既可以进行逻辑运算,又可以进行位运算,两边既可以是bool类型,又可以是数值类型 区别: if (A && B) 如果 A 为 false ,整个表达式就为 false,不再计算 B 的值了. if (A & B) 如果 A 为 false ,整个表达式就为 false,但还要计算 B 的值

  • http协议进阶之Transfer-Encoding和HttpCore实现详解

    Transfer-Encoding简介 transfer-eccoding所描述的是消息请求(request)和响应(response)所附带的实体对象(entity)的传输形式,规范定义格式如下: Transfer-Encoding = "Transfer-Encoding" ":" 1#transfer-coding 举个例子:Transfer-Encoding: chunked transfer-encoding的可选值有:chunked,identity ;

  • Java的jps命令简介及使用示例详解

    目录 jps命令简介 jps命令参数 jps命令示例 结尾 jps命令简介 jps(Java Virtual Machine Process Status Tool)是JDK提供的一个可以列出正在运行的Java虚拟机的进程信息的命令行工具,它可以显示Java虚拟机进程的执行主类(Main Class,main()函数所在的类)名称.本地虚拟机唯一ID(LVMID,Local Virtual Machine Identifier)等信息.另外,jps命令只能显示它有访问权限的Java进程的信息.

  • HTTP协议详解_动力节点Java学院整理

    一.概念 协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器. HTTP协议,即超文本传输协议(Hypertext transfer protocol).是一种详细规定了浏览器和万维网(WWW = World Wide Web)服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议. HTTP协议是用于从WWW服务器传输超文本到本地浏览器的传送协议.

  • CAMediaTiming ( 时间协议)详解及实例代码

    CAMediaTiming ( 时间协议)详解 有一种通过CAAnimation实现的协议叫做CAMediaTiming,也就是CABasicAnimation和CAKeyframeAnimation的基类(指CAAnimation).像duration,beginTime和repeatCount这些时间相关的属性都在这个类中.大体而言,协议中定义了8个属性,这些属性通过一些方式结合在一起,准确的控制着时间.文档中每个属性只有几句话,所以很有可能在看这篇文章之前你都已经读过了,但是我觉得使用可视

随机推荐