http:超文本传输协议,它允许将超文本标记(html)文档从web服务器传送到浏览器。目前版本HTTP/1.1
 
http请求过程
 
proxy:代理服务器,网络信息的中转站。功能如下:
             1.提高访问速度(缓存)
             2.突破限制(FQ)
             3.隐藏身份
 
URl:统一资源定位符
         基本格式:schema://host[:port#]/path/…/[;url-params][?query-string][#anchor]
                          schema--底层协议 http,https,ftp
                          host--web服务器的ip或域名
                          port#--web服务器的端口,默认是80,可以省略
                          path,url-params--访问资源路径及参数
                          query-string--发送到服务器的get数据
                          anchor--锚
http协议是有连接无状态,对于服务器来说,同一个客户端这次请求和上一次请求没有对应关系,它不知道两次请求来自同一个客户端。
 
http消息结构
        request消息包括3部分:1、请求行  2、请求 header 3、body  其中header和body之间有空行
         method--请求的方法,get或者post
         path-to-resource--请求的资源
         http/version-number--http协议的版本号
         当method为get时,body为空
response消息包括3部分:1、响应行 2、响应 header 3、body

http/version-number--http协议的版本号

                   status code & message--状态码及说明
get和post的区别
       http定义了4种基本的与服务器交互的方法GET、POST,PUT、DELETE,分别对应查、改、增、删
       区别如下:
               1.get提交的数据放在url上,post提交的数据放在request消息的body中
               2.get提交的数据有大小限制(浏览器对url长度有限制),post没有限制
状态码
      http/1.1中定义了5类状态码,状态码由三位数字组成,其中第一个数字定义响应的类别
              1XX  提示信息 -- 表示请求已被成功接收,继续处理 -- 100~101
              2XX  成功 -- 表示请求已被成功接收、理解、接受 -- 200~206
              3XX  重定向 -- 要完成请求必须做进一步的处理 -- 300~307
              4XX  客户端错误 -- 请求有语法错误或请求无法实现 -- 400~417
              5XX  服务器错误 -- 服务器未能实现合法的请求 -- 500~505
     状态码详解
100
Continue继续
收到了请求的起始部分,客户端应该继续请求
101
Switching Protocols切换协议
服务器正根据客户端的指示将协议切换成Update Header列出的协议
200
ok
服务器成功处理了请求
201
Created以创建
对于那些要服务器创建对象的请求来说,资源已创建完毕。
202
Accepted已接受
请求已接受, 但服务器尚未处理
203
Non-Authoritative Information非权威信息
服务器已将事务成功处理,只是实体Header包含的信息不
是来自原始服务器,而是来自资源的副本。
204 No Content无内容 Response中包含一些Header和一个状态行, 但不包括实体的主题内容
(没有response body
205 Reset Content重置内容 另一个主要用于浏览器的代码。意思是浏览器应该重置当前页面上
所有的HTML表单。
206 Partial Content部分内容 部分请求成功
300 Multiple Choices多项选择 客户端请求了实际指向多个资源的URL。这个代码是和一个选项列表一
起返回的,然后用户就可以选择他希望的选项了
301 Moved Permanently已移走 请求的URL已移走。Response中应该包含一个Location URL, 说明资源
现在所处的位置
302 Found已找到 与状态码301类似。但这里的移除是临时的。 客户端会使用Location中
给出的URL,重新发送新的HTTP request
303 See Other参见其他 类似302
304 Not Modified未修改 客户的缓存资源是最新的, 要客户端使用缓存
305 Use Proxy使用代理 必须通过代理访问资源, 代理的地址在Response 的Location中
306 未使用 未使用
307 Temporary Redirect临时重定向 类似302
400 Bad Request坏请求 告诉客户端,它发送了一个错误的请求。
401 Unauthorized未授权 需要客户端对自己认证
402 Payment Required要求付款 这个状态还没被使用, 保留给将来用
403 Forbidden禁止 请求被服务器拒绝了
404 Not Found未找到 未找到资源
405 Method Not Allowed不允许使用的方法 不支持该Request的方法
406 Not Acceptable无法接受  
407 Proxy Authentication Required请求
进行代理认证
与状态码401类似, 用于需要进行认证的代理服务器
408 Request Timeout请求超时 如果客户端完成请求时花费的时间太长, 服务器可以回送这个状态码并
关闭连接
409 Conflict冲突 发出的请求在资源上造成了一些冲突
410 Gone消失了 服务器曾经有这个资源,现在没有了, 与状态码404类似
411 Length Required要求长度指示 服务器要求在Request中包含Content-Length。
412 Precondition Failed先决条件失败  
413 Request Entity Too Large请求实体太大 客户端发送的实体主体部分比服务器能够或者希望处理的要
414 Request URI Too Long请求的url太长 客户端发送的请求所携带的URL超过了服务器能够或者希望处理的长度
415 Unsupported Media Type不支持的媒体类型 服务器无法理解或不支持客户端所发送的实体的内容类型
416 Requested Range Not Satisfiable所请求
的范围未得到满足
 
417 Expectation Failed无法满足期望  
500 Internal Server Error内部服务器错误 服务器遇到一个错误,使其无法为请求提供服务
501 Not Implemented未实现 客户端发起的请求超出服务器的能力范围(比如,使用了服务器不支持的请求
方法)时,使用此状态码。
502 Bad Gateway网管鼓掌 代理使用的服务器遇到了上游的无效响应
503 Service Unavailable未提供此服务 服务器目前无法为请求提供服务,但过一段时间就可以恢复服务
504 Gateway Timeout网关超时 与状态吗408类似, 但是响应来自网关或代理,此网关或代理在等待另一台
服务器的响应时出现了超时
505 HTTP Version Not Supported
不支持的http版本
服务器收到的请求使用了它不支持的HTTP协议版本。 有些服务器不支持HTTP
早期的HTTP协议版本,也不支持太高的协议版本

request header主要内容

        Cache头域
                        If-Modified-Since -- 发送浏览器缓存页面的最后修改时间
                        If-None-Match -- 与Etag一起使用,用于服务器辨别缓存文件是否过期。如果过期返回200及新的Etag,否则返回304告诉浏览器使用缓存
                       Pragma:no-cache -- 防止页面被缓存
                       Cache-Control:public(可以被任何缓存所缓存)、private内容只能被缓存至私有缓存中、no-cache(所有内容不会被缓存)
         Client头域
                       Accept -- 代表浏览器可以接受的媒体类型,如text/html
                       Accept-Encoding -- 浏览器申明自己接受的压缩方法,如gzip,defalte
                       Accept-Language -- 浏览器申明自己接受的语言
                       Accept-Charset -- 浏览器申明自己接受的字符集
                       User-Agent -- 告诉服务器客户端使用的操作系统和浏览器的名称和版本
         Cookie/Login头域
                       Cookie -- 将cookie值发送到服务器
         Entity头域
                       Content-Length -- 发送到服务器的内容长度
                       Content-Type -- 发送到服务器的内容类型
          Miscellaneous
                       Referer -- 告诉服务器我是从哪个链接过来的
          Transport头域
                       Connection -- keep-alive(内容传输完毕后保持tcp连接)、close(内容传输完毕后关闭tcp连接)
                       Host -- 指定被请求资源的 主机和端口号
response header主要内容

 
         Cache头域
                       Date -- 生成消息的具体时间和日期
                       Expires -- 本地缓存的过期时间
                       Vary -- 
          Cookie/Login头域
                       P3P -- 用于跨域设置cookie,可以解决iframe跨域访问cookie的问题
                       Set-Cookie -- 将cookie值放松到客户端浏览器
          Entity头域
                       ETag -- 与If-None_Match配合使用
                       Last-Modified -- 指示资源的最后修改时间
                       Content-Type -- 告诉浏览器响应的类型和字符集
                       Content-Length -- 只是响应正文的长度
                       Content-Encoding -- 告诉浏览器服务器使用的压缩方法
                       Content-Language -- 只是响应的语言
           Miscellaneous头域
                       Server -- 服务器的软件信息
                       X-AspNet-Version -- Asp.Net的版本
                       X-Powered-By -- 指示网站用什么技术开发的
           Transport头域
                       Connection --  keep-alive(内容传输完毕后保持tcp连接)、close(内容传输完毕后关闭tcp连接) 
            Location头域
                      Location -- 告诉浏览器需要重定向的新url
 
HTTP压缩的过程
           1. 浏览器发送http request给web服务器,request中有Content-Encoding:gzip/deflate,告诉浏览器支持压缩
           2. web服务器接受到request后,生成原始的response,其中有原始的Content-Type和Content-Length
           3. web服务器通过gzip,对response进行压缩编码,编码后的header中有压缩后的Content-Type和Content-Length,并且增加               Accept-Encoding,然后把response发送给浏览器
           4. 浏览器接到respon后,根据Content-Encoding来进行解码,获得原始response后显示网页
  
*内容编码类型(Content-Encoding)
            gzip -- 采用GNU zip压缩
            compress -- 采用unix的文件压缩程序
            deflate -- 采用zlib格式压缩
            identity -- 表明没有对实体进行编码

gzip,compress,deflate都是无损压缩算法,可以减少传输报文的大小,不会导致信息损失。其中gzip效率最高

          *压缩的好处
                     http压缩对纯文本可以压缩至原内容的40%,从而节省60%的数据传输

 

 
 
 
            

 
 
 

【积硅计划】http协议基础的更多相关文章

  1. 【积硅计划】html标签

    一.基础     在html中,标签通常是由开始标签和结束标签组成,开始标签用<标签名>,结束标签用</标签名>      元素是指包括开始标签和结束标签在内的整体,内容是指出 ...

  2. TCP/IP协议基础(转)

    转自 http://www.chinaunix.net 作者:Bernardus160  发表于:2003-12-03 17:33:15 TCP/IP协议基础 -------------------- ...

  3. 小白日记27:kali渗透测试之Web渗透-Http协议基础,WEB

    Http协议基础 Web技术发展[http://www.cnblogs.com/ProgrammerGE/articles/1824657.html] 静态WEB[网页] 动态WEB 属于一种应用程序 ...

  4. HTTP协议基础与实验

    一. HTTP协议(Hypetext Transfer Protoacal,超文本传输协议) HTTP协议规定了Web基本的运作过程,以及Web服务器之间的通信细节. Http协议采用客户端/服务器端 ...

  5. udp协议基础(转自疯狂java讲义)

    第17章  网络编程 17.4  基于UDP协议的网络编程 UDP协议是一种不可靠的网络协议,它在通信实例的两端各建立一个Socket,但这两个Socket之间并没有虚拟链路,这两个Socket只是发 ...

  6. UART串口协议基础1

    Louis kaly.liu@163.com 串口协议基础 1 串口概述 串口由收发器组成.发送器是通过TxD引脚发送串行数据,接收器是通过RxD引脚接收串行数据. 发送器和接收器都利用了一个移位寄存 ...

  7. 接口测试培训:HTTP协议基础

    接口测试培训:HTTP协议基础   引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展. ...

  8. 【RL-TCPnet网络教程】第41章 HTTP超文本传输协议基础知识

    第41章      HTTP超文本传输协议基础知识 本章节为大家讲解HTTP(HyperText Transfer Protocol,超文本传输协议),从本章节开始,正式进入嵌入式Web的设计和学习. ...

  9. 【RL-TCPnet网络教程】第35章 FTP文件传输协议基础知识

    第35章      FTP文件传输协议基础知识 本章节为大家讲解FTP(File Transfer Protocol,文件传输协议)的基础知识,方便后面章节的实战操作. (本章的知识点主要整理自网络) ...

随机推荐

  1. (整理)C#实现UDP广播

    (一) IP地址解析 IP地址的类型:XXX.XXX.XXX.XXXA类: 1.0.0.1--126.255.255.254 最高位是0: 1个字节的网络地址和3个地址的主机地址 测试地址:127.X ...

  2. Redis多机功能介绍

    Redis多机功能目的:以单台Redis服务器过渡到多台Redis服务器 Redis单机在生产环境中存在的问题 1.内存容量不足 Redis使用内存来存书数据库中的数据,但是对于一台机器来说,硬件的内 ...

  3. 实验比较python中的range和xrange

    1 结论: 全用xrange,除非你需要使用返回的列表 2 实验一:性能对比 实验环境:win7 ,64位系统 python2.7 import time StartTime=time.time() ...

  4. 使用Spring的Property文件存储测试数据 - 编写测试和调用测试数据

    准备好测试数据后,我们可以开始编写测试了,在测试用例中调用我们property文件中的测试数据. 我自己写了一个TestCase作为所有测试类基类,基类中定义了两个变量来代表之前建好的两个测试数据文件 ...

  5. Unity AssetBundles and Resources指引 (四) AssetBundle使用模式

    本文内容主要翻译自下面这篇文章 https://unity3d.com/cn/learn/tutorials/topics/best-practices/guide-assetbundles-and- ...

  6. Sublime Text 2/3中Autoprefixer失效解决方法

    ###Sublime Text 2/3中Autoprefixer失效解决方法: 相信每个前端er都会使用Subl这款工具吧,因为它有上千款开源的插件,而且功能各异,这里给大家带来的是标题中Autopr ...

  7. [翻译]AlphaGO留给我们的东西

    来源:http://headlines.yahoo.co.jp/hl?a=20160317-00000049-cnippou-krhttp://headlines.yahoo.co.jp/hl?a=2 ...

  8. opecv轮廓匹配,可以用于去噪

    一个跟轮廓相关的最常用到的功能是匹配两个轮廓.如果有两个轮廓,如何比较它们;或者如何比较一个轮廓和另一个抽象模板. 矩 比较两个轮廓最简洁的方式是比较他们的轮廓矩.这里先简短介绍一个矩的含义.简单的说 ...

  9. MySQL(二)

    一.外键 外键是设置当前表中的某一列与别一数据表中的主键列关联.主要目的是控制与外键表中的数据,保持数据一致性,完整性,也就是说:当前表中这一列的数据必须是关联外键列中的某一数据,而且相关联的两个数据 ...

  10. 是否连接VPN

    //需要导入ifadds头文件 //是否连接VPN - (BOOL)isVPNConnected{     struct ifaddrs *interfaces = NULL;     struct ...