HTTP协议提要

简单来说,HTTP就是一个基于应用层的通信规范:双方要进行通信,大家就要遵守一个规范---HTTP协议。HTTP协议从WWW服务器超文本到本地浏览器 ,可以使浏览器更加高效。HTTP协议不仅能保证计算机正确快速地传输超文本文档,还能确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。

      HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP承载于TCP协议之上,有时也承载于TLS或SSL协议层上,这个时候,就成了常说的HTTPS。默认HTTP端口号为80,HTTP的端口号为443。
      HTTP协议就是客户端发起请求,服务器回送响应。HTTP协议是一个无状态的协议,同一个客户端的这次请求和上次请求没有对应关系。
      浏览器网页是HTTP协议的主要应用,但并不代表HTTP协议只能应用于网页的浏览,只要通信的双方都遵守HTTP协议,其就有用武之地。比如腾讯QQ、迅雷等软件都使用HTTP协议(当然还包括其他的协议)。
     那么,HTTP协议是如何工作的呢?
    首先,客户端发送一个请求给服务器,服务器在接收到这个请求后将生成一个响应返回客户端。一次HTTP协议称为一个事务,其工作过程可分为四步:
1)客户端与服务器需要建立连接。单击某个超链接,HTTP协议的工作开始。
2)建立连接后,客户端发送一个请求给服务器。格式为:前边是统一 资源标识符(URL)、中间是协议版本号,后边是MIME信息(包括请求修饰符、客户机信息和可能的内容)。
3)服务器接到请求后,给予相应的响应信息。格式为:首先是一个状态运行(包括信息的协议版本号、一个成功或错误的代码),然后是MIME信息(包括服务器信息、实体信息和可能的内容)。
4)客户端接收服务器返回的信息并显示在用户的显示屏上,然后客户端机与服务器断开连接
如果这四步的某一步出错产生错误的信息将返回到客户端,由显示屏输出。这些过程是由HTTP协议自己完成的,用户只需要单击鼠标,等待信息显示就可以了。
 
下面简单介绍HTTP协议中一些主要的概念。
1.请求
在发起请求前,需要先建立链接。
连接是一个传输层的实际环流,它建立在两个相互通信的应用程序之间。在HTTP1.1协议中,request和response头中都有可能出现一个connection的头,其决定当Client和Server通信时对于长链接如何处理。HTTP1.1协议中,Client和Server默认对方支持长链接,如果Client使用HTTP1.1协议,但又不希望使用长链接,需要在header指明connection的值为close;同理,Server端也一样。不论request还是responese的header中包含了值为close的connection,都表明当前正在使用的TCP连接在请求处理完毕后会被断掉,以后Client再进行新的请求时必须创建新的TCP连接。
 
HTTP请求由三部分组成:请求行消息报头请求正文
请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:
Method Request-URI HTTP-Version CRLF
上述格式中各参数说明如下:
Method:请求方法。
Request-URI:一个统一资源标识衔。
HTTP-Version:请求的HTTP协议版本。
CRLF:回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。
请求方法(所有方法全为大写)有多种,各个方法的解释如下:
GET:请求获取Request-URI所标识的资源。
POST:在Request-URI标识的资源后附加新的数据。
HEAD:请求获取由Request-URI的标识资源的响应消息报头。
PUT:请求服务器存储一个资源,并用Request-URI作为其标识。
DELETE:请求服务器删除Request-URI所标识的资源。
TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断。
CONNECT:保留以备将来使用。
OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和要求。
 
2.响应
在接收和解释请求消息后,服务器返回一个HTTP响应消息。HTTP响应也由三个部分组成,分别是:状态行、消息报头、响应正文。
状态行格式如下:
HTTP-Version Status-Code Reason-Phrase CRLF
上述格式中各参数说明如下:
HTTP-Version:服务器HTTP协议的版本。
Status-Code:服务器发回的响应状态代码。
Reasion-Phrase:状态代码的文本描述。
状态代码由三位数字组成,第一个数字定义了响应的级别,有五种可能取值:
1xx:指示信息---请求已接收,继续处理。
2xx:成功---请求已被成功接收、理解、接受。
3xx:重定向---要完成请求必须进行更进一步的操作。
4xx:客户端错误--请求有语法错误或请求无法实现。
5xx:服务器端错误---服务器未能实现合法的请求。
常见的状态代码、状态描述和说明如下:
200 OK:客户端请求成功。
400 Bad Request:客户端请求有语法错误,不能被服务器所理解
401 Uauthorize:请求未经授权,这个状态码必须和WWW-Authenticate报头域一起使用
403 Forbidden:服务器端收到请求,但是拒绝提供服务器。
404 Not Found:请求资源不存在,例如输出了错误的URL。
500 Internal Server Error:服务器发生不可预期的错误。
503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常。
例如,响应信息“HTTP/1.1 200 OK(CRLF)”,表示响应请求到达服务器后被成功识别成功标记。响应正文就是服务器返回的资源的内容。
 
3.报头
HTTP消息报包括普通报头、请求报头、响应报头、实体报头。每个报头域的组成如下:
名字+:+空格+值
1)普通报头中有少数报头域用于所有的请求和响应信息,但并不用于被传输的实体,只用于传输的消息(如缓存控制、连接控制)。
2)请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息(如UA头、Accept等)。
3)响应报头允许客户端向服务器端传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息(如Location)。
4)实体报头定义了关于实体正文和请求所标识的资源的元信息,例如有无实体正文。
比较重要的几个报头如下。
Host:头域指定请求资源的Internet主机和端口号,必须表示请求URL的原始服务器或网关的位置。HTTP1.1请求必须包含主机头域,否则系统会以400状态码返回。
Use-Agent:简称UA,内容包含发出请求的用户信息。通常UA包含浏览者的信息,主要是浏览器的名称版本和所用的操作系统。这个UA头不仅仅是否使用浏览器才存在,只要使用使用了基于HTTP协议的客户端软件都会发送这个请求,无论是手机端还是PDA等。这个UA头是辨别客户端所用设备的重要依据。
Accept:告诉服务器可以接受的文件格式通常这个值在各种浏览器中都差不多。不过WAP浏览器所能接受的格式要少一些,这也是用来区分WAP和计算机浏览器的主要依据之一。随着WAP浏览器的升级,其已经和计算机浏览器越来越接近,因此这个判断所起的作用也变得越来越弱。
Cookie:Cookie分两种,一种是客户端向服务器端发送的,使用Cookie报头,用来标记一些信息;别一种是服务器发送给浏览器的,报头为Set-Cookie.二者的主要区别是Cookie报头的value里可以有多个Cookie值,并且不需要显式指定domain等。而Set-Cookie报头里一条记录只能一个Cookie的value,需要指明domain、path等。
Cache-Control:指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时缓存指令包括:no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached;响应消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。
Referer:头域允许客户指定请求URI的源资源地址,这可以允许服务器生成回退链表,可用来登录、优化缓存等。也允废除的或错误的连接由于 维护的目的被追踪,如果请求的URI没有自己的URI地址,Referer不能被发送。如果指定的是部分URI地址,则此地址应该是一个相对地址。Referer通常是流量统计系统用来记录来访者地址的参数。
Content-Length:内容长度。
Content-Range:响应的资源范围。可以在每次请求中标记请求的资源范围,在连接断开重连时,客户端只请求该资源未下载的部分。而不是重新请求整个资源,实现断点续传。迅雷就是基于这个原理,使用多线程分段读取网络上的资源,最后再合并。
Accept-Encoding:指定所能够接受的编码方式。通常服务器会对页面进行GZIP压缩后再输出以减少流量,一般浏览器均支持对这种压缩后的数据进行处理。但对于我们来说,如果不想接收到这些看似“乱码”的数据,可以指定不接受任何服务器端压缩处理,要求其原样返回。
自定义报头:在HTTP消息中,也可使用一些在HTTP1.1正式规范里没有定义的头字段,这些头字段统称为自定义的HTTP头或者扩展头。比如sever字段,这个报头一般是由服务器发送的。也可以定义一些“不正规”的报头,如“WEBMASTER:chenqionghe@qq.com”。在PHP里,使用header即可实现 。
转自朋友--http://www.cnblogs.com/chenqionghe/p/4753655.html
 
 
抓包软件--(fiddler)
使用方法--参考(http://blog.csdn.net/ohmygirl/article/details/17846199)

Http协议提要的更多相关文章

  1. CNN 美国有线电视新闻网 wapCNN WAP 指无线应用通讯协议 ---- 美国有线电视新闻网 的无线应用

    wapCNN  wap指无线应用通讯协议  CNN美国有线电视新闻网   固, wapCNN 美国有线电视新闻网的无线应用 -------------------------------------- ...

  2. 【HTTP 2】HTTP/2 协议概述(HTTP/2 Protocol Overview)

    前情提要 在上一篇文章<[HTTP 2.0] 简介(Introduction)>中,我们简单介绍了 HTTP 2. 在本篇文章中,我们将会了解到 HTTP 2 协议概述部分的内容. HTT ...

  3. iOS开发人员程序许可协议

    请细致阅读以下的许可协议条款和条件之前下载或使用苹果软件.   这些条款和条件构成你和苹果之间的法律协议.   iOS开发人员程序许可协议   目的 你想使用苹果软件(例如以下定义)来开发一个或多个应 ...

  4. Tcp协议介绍

    前情提要:根据域名建立tcp链接之前要做两件事情,1 根据arp协议找到网管mac地址 2 通过dns服务器解析出域名的Ip地址,解析出域名的Ip地址之后就可以建立tcp链接了. tcp协议三个特点: ...

  5. CTFhub-WEB前置-http协议闯关

    前情提要: 在渗透学习过程中,web的基础知识很重要,在这里通过long long ago之前学习的http基础,并结合网上的CTFhub--WEB前置之http协议闯关,对web基础知识进行加固并查 ...

  6. MQTT协议 - arduino ESP32 通过精灵一号 MQTT Broker 进行通讯的代码详解

    前言 之前研究了一段时间的 COAP 协议结果爱智那边没有测试工具,然后 arduino 也没有找到合适的库,我懒癌发作也懒得修这库,就只能非常尴尬先暂时放一放了.不过我在 爱智APP -> 设 ...

  7. HTTP协议系列(1)

    一.为什么学习Http协议       首先明白我们为什么学习HTTP协议,也就是说明白HTTP协议的作用.HTTP协议是用于客户端与服务器之间的通讯.明白了HTTP协议的作用也就知道了为什么要学习H ...

  8. 重温Http协议--请求报文和响应报文

    http协议是位于应用层的协议,我们在日常浏览网页比如在导航网站请求百度首页的时候,会先通过http协议把请求做一个类似于编码的工作,发送给百度的服务器,然后在百度服务器响应请求时把相应的内容再通过h ...

  9. 协议森林17 我和你的悄悄话 (SSL/TLS协议)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. TLS名为传输层安全协议(Transport Layer Protocol),这个协议是一套加密的 ...

随机推荐

  1. 在Debian上用Bind 配置DNS服务器

    1 什么是DNS 初学者可能不理解DNS到底是什么,干什么用.我是在1998年大学毕业时才听说这个词的.那时我在聊天室碰到潍坊信息港的一个网管,我恬不知耻地说我也是个网管,他说也维护DNS吗?我说,D ...

  2. Binary String Matching

    问题 B: Binary String Matching 时间限制: 3 Sec  内存限制: 128 MB提交: 4  解决: 2[提交][状态][讨论版] 题目描述 Given two strin ...

  3. codeforces 581C. Developing Skills 解题报告

    题目链接:http://codeforces.com/problemset/problem/581/C 题目意思:给出 n 个数:a1, a2, ..., an (0 ≤ ai ≤ 100).给出值 ...

  4. hdu 1896.Stones 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1896 题目意思:给出 n 块石头的初始位置和能到达的距离.对于第奇数次遇到的石头才抛掷,偶数次的就忽略 ...

  5. HTML中表格元素TABLE,TR,TD及属性的语法

    table:表格元素及属性 <table width="80%" border="1" cellspacing="1" cellpad ...

  6. WCF错误:413 Request Entity Too Large

    在我们用WCF传输数据的时候,如果启用默认配置,传输的数据量过大,经常会出这个错误. WCF包含服务端与客户端,所以这个错误可能出现在服务端返回数据给客户端,或客户端传数据给服务端时. 1. 服务端返 ...

  7. 把Tomcat做成系统服务自动启动

    用Tomcat的bin目录下的service.bat,cmd,命令:进入到Tomcat的bin目录 service.bat install可以把tomcat做成系统服务;修改下计算机管理里面的服务,找 ...

  8. 3ds max画曲线 设置摄像机的起始位置

    参考 http://www.3dmax8.com/3dmax/2013/0916/5661.html 如果想创建曲线段,可以在单击下一个点时按住鼠标不放,继续拖曳,再拖到另一个点上,单击鼠标右键,即可 ...

  9. 将rabbitmq整合到Spring中手动Ack

    如果要手动ack,需要将Listener container 的 acknowledge 设置为manul,在消费消息的类中需实现ChannelAwareMessageListener接口. over ...

  10. hdu 2034人见人爱A-B

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2034 解题思路:set的基本用法 #include<iostream> #include& ...