1. 什么是HTTP协议

协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。

  当我们通过浏览器输入URL后,浏览器给WEB服务器发送了一个Request,然后进行处理,生成响应的Response,并发送给浏览器,浏览器解析Response的HTML,并显示为我们看到的网页。如果通过代理服务器,那么代理服务器就是个中间人的角色。
  
  
代理服务器的功能如下:

  1. 提高访问速度,大多数代理服务器由缓存功能
  2. 突破限制,就是翻墙
  3. 隐藏访问者的身份

2. URL详解

URL(Uniform Resource Locator) 地址用于描述一个网络上的资源, 基本格式如下:

schema://host[:port#]/path/…/[;url-params][?query-string][#anchor]
schema 指定底层使用的协议,比如http,https,ftp
host http服务器的ip地址或者域名
port# http服务器的默认端口是80,这种情况下可省略
path 服务器中资源的路径
url-params
query-string 发送给http服务器的数据
anchor- 锚

URL的一个例子

http://www.icourse163.org/learn/BIT-1001872001?tid=1001965001#/learn/testlist
schema:http
host:www.icource163.org
port:80
path:/learn/BIT-1001872001
query-string:tid=1001965001
anchor:/learn/testlist

3. HTTP消息的结构

先看Request消息的结构, Request 消息分为3部分,第一部分叫请求行, 第二部分叫http header, 第三部分是body. header和body之间有个空行。

    |       METHOD URL HTTP/Verson     |
| Header-key1: value1 |
| Header-key2: value2 |
| … |
| Request Body |

如果使用的Method是GET,则Body是空的。

再看看Response消息的结构,和Request消息的结构基本一样,status_code是状态码。

    |       HTTP/Verson  status——code message     |
| Header-key1: value1 |
| Header-key2: value2 |
| … |
| Request Body |

4. GET和POST方法的区别

二者都可以在发出请求的同时,提交一些数据,不过有以下几方面的不同:

1. 数据存放的位置不同

GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如

https://cn.bing.com/search?q=firebug+abaci&qs=n

POST方法是把提交的数据放在HTTP包的Body中。

2.数据大小的不同

GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制。

3. 数据结构不同

GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。

4. 安全性能不同

GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码。

5. PUT和PATCH方法的区别

二者都是向URL位置更新存储一个资源,不过Patch可以局部更新该资源。假设我们有一个UserInfo,里面有userId, userName, userGender等10个字段。可你的编辑功能因为需求,在某个特别的页面里只能修改userName,这时候的更新怎么做?

于是patch诞生,只传一个userName到指定资源去,表示该请求是一个局部更新,后端仅更新接收到的字段。而put虽然也是更新资源,但要求前端提供的一定是一个完整的资源对象。

6. 状态码

Response 消息中的第一行叫做状态行,由HTTP协议版本号, 状态码,状态消息三部分组成。

状态码用来告诉HTTP客户端,HTTP服务器是否产生了预期的Response。
HTTP/1.1中定义了5类状态码, 状态码由三位数字组成,第一个数字定义了响应的类别。
  

1XX 提示信息 - 表示请求已被成功接收,继续处理

2XX 成功 - 表示请求已被成功接收,理解,接受

3XX 重定向 - 要完成请求必须进行更进一步的处理

4XX 客户端错误 - 请求有语法错误或请求无法实现

5XX 服务器端错误 - 服务器未能实现合法的请求

  
最常见的就是成功响应状态码200了,这表明该请求被成功地完成,所请求的资源发送回客户端。

维基百科

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

 
 
 
 

00_HTTP协议介绍的更多相关文章

  1. TCP/IP 协议介绍

    转自http://blog.jobbole.com/104886/ 一.TCP/IP 协议介绍 在介绍 HTTP 协议之前,先简单说一下TCP/IP协议的相关内容.TCP/IP协议是分层的,从底层至应 ...

  2. 第二章 ZAB协议介绍

    ZAB ( ZooKeeper Atomic Broadcast , ZooKeeper 原子消息广播协议)是zookeeper数据一致性的核心算法. ZAB 协议并不像 Paxos 算法那样,是一种 ...

  3. JSON-RPC轻量级远程调用协议介绍及使用

    这个项目能够帮助开发人员利用Java编程语言轻松实现JSON-RPC远程调用.jsonrpc4j使用Jackson类库实现Java对象与JSON对象之间的相互转换.jsonrpc4j包含一个JSON- ...

  4. [转]流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls)

    [转]流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls) http://blog.csdn.net/tttyd/article/details/12032357 RTP       ...

  5. Python基础教程之udp和tcp协议介绍

    Python基础教程之udp和tcp协议介绍 UDP介绍 UDP --- 用户数据报协议,是一个无连接的简单的面向数据报的运输层协议.UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但 ...

  6. 常用音频协议介绍&&有关音频编码的知识与技术参数

    (转载)常用音频协议介绍 会议电视常用音频协议介绍及对比白皮书 一.数字化音频原理:声音其实是一种能量波,因此也有频率和振幅的特征,频率对应于时间轴线,振幅对应于电平轴线.通常人耳可以听到的频率在20 ...

  7. 各种开源协议介绍 BSD、Apache Licence、GPL V2 、GPL V3 、LGPL、MIT_转

    转自:各种开源协议介绍 BSD.Apache Licence.GPL V2 .GPL V3 .LGPL.MIT 现今存在的开源协议很多,而经过Open Source Initiative组织通过批准的 ...

  8. OSPF协议介绍及配置 (上)

    OSPF协议介绍及配置 (上) 一.OSPF概述 回顾一下距离矢量路由协议的工作原理:运行距离矢量路由协议的路由器周期性的泛洪自己的路由表,通过路由的交互,每台路由器都从相邻的路由器学习到路由,并且加 ...

  9. VRRP协议介绍--转

    http://www.cnblogs.com/jony413/articles/2697404.html VRRP协议介绍 参考资料: RFC 3768 1. 前言 VRRP(Virtual Rout ...

随机推荐

  1. roguelike地图的随机生成算法

    如果要想自己设计一个roguelike游戏,那么需要你有一个随机地图生成,我在indienova上看到一篇文章,描述了一个roguelike算法,然后自己用unity实现了一个下. 原文地址:随机生成 ...

  2. JAVA实现DIJKSTRA算法

    import java.util.Queue; import java.util.LinkedList; public class dijkstra{ public static void main( ...

  3. SQL Server知识详解

    1.SET NOCOUNT ON的作用: 作用:阻止在结果集中返回显示受T-SQL语句或则usp影响的行计数信息. 语法:SET NOCOUNT {ON | OFF} 详解:当SET ONCOUNT ...

  4. now code——处女座的期末复习

    题目描述 快要期末考试了,处女座现在有n门课程需要考试,每一门课程需要花ai小时进行复习,考试的起始时间为bi,处女座为了考试可以不吃饭不睡觉,处女座想知道他能否复习完所有的科目(即在每一门考试之前复 ...

  5. HDU2444 【二分图判定+最大匹配】

    套模板很好的题? #include<bits/stdc++.h> using namespace std; const int N=2e2+10; const int M=4e4+10; ...

  6. mysql项目实战经验

    一.项目的编码设置   目的:避免出现莫名其妙错误,笔者曾经就碰到因编码不对返回null而浪费大量时间:统一的编码可以减少解析的时间,提高效率 1.1修改my.ini文件 一般在C:\Program ...

  7. UVA10140 Prime Distance【素数/数论】By cellur925

    题目传送门 我们注意到,L,R是肥肠大的.........我们不可能在1s内筛出2^31内的全部质数. “上帝为你关上一扇门,同时为你打开一扇窗” 我们又注意到,R-L是肥肠比较小的,珂以从这入手解决 ...

  8. 字符串最小表示初探 By cellur925

    我们考虑有一个字符串,可以从这个字符串的不同位置出发,把这个字符串大声朗读出来,当到字符串末端的时候再从头开始读,直到回到"梦开始的地方". 设字符串长度为\(n\),那么有\(n ...

  9. PHP不重新编译,单独添加模块扩展的方法

    php自身提供了很多扩展,比如curl,gmp, mbstring等.我们在编译安装php时未必安装了所有扩展.那么在安装完php后,如果想单独安装某个php自身的扩展怎么办呢? 我们以curl扩展模 ...

  10. slice方法可以将“类似数组的对象”变成真正的数组 (遇到时候再研究一次)

    典型的“类似数组的对象”是函数的arguments对象,以及大多数 DOM 元素集,还有字符串. // arguments对象 function args() { return arguments } ...