zoukankan      html  css  js  c++  java
  • HTTP协议(4)

    HTTP  概括总结 方便以后使用、遗忘时有侧重点的去学习,方便查阅:

    开始看到webservice 和restful 有些不理解 现在可以简单理解为 :

    webservice = http协议+XML

    REST = http协议+json

    通过这篇文章:http://www.cnblogs.com/zswordsman/p/5782152.html  对互联网数据传输所需要的条件有了一定的认识 主机+端口)。

    (一)HTTP请求信息和响应信息的格式

    1. 请求

      1. 请求行     --->         请求方法  请求路径  所用的协议
      2. 请求头信息
      3. 请求主体信息

    请求方法: 有GET POST PUT DELETE TRACE  OPTIONS HEAD

    GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。

    参阅:http://www.ruanyifeng.com/blog/2011/09/restful 来理解下RESTful架构

    参阅:http://pan.baidu.com/s/1qXT0ATm来理解下webservice

    目前有些框架对RESTful 架构有很好的支持 如Yii2.x版本。

    HEAD与GET的功能基本一致 但是不返回内容,可以用来确认内容是否还正常存在。

    TRACE:比如你用代理上网 不放心代理是否篡改了你的信息 ,用TRACE来测试 ,服务器就会把最后收到的内容返回给你。

    OPTIONS:返回服务器可用的请求方法。(上述方法虽然是HTTP协议规定的方法,但是WEB SERVICE 未必允许或支持这些方法。)

    请求头信息包含的很多

    host:请求的域名,必须要有

    accept-encoding:可以接受的编码类型(不是字符编码,指的是文件格式),如果没有该头信息,说明浏览器可以接收任何类型

    referer:引用,当前请求是从哪个请求过来的

    connection:连接方式,1.0版本close,1.1版本keep-alive

    accept-language:可以接收的语言类型,zh-CN代表中文,如果没有该选项,那么代表浏览器可以接收任何语言类型

    cookie:服务器保存在浏览器的数据,浏览器提供了一个功能能够保存数据,服务器借助于浏览器的该能力,将数据保存在浏览器端

    user-agent:浏览器的信息

    clip_image002

    accept:浏览器可以接收的文件类型,如果没有指定,代表可以接收任何类型的数据

    clip_image004

    content-length:post请求时,浏览器给服务器发送是数据的长度,单位是字节

    if-modified-since:get方式,会在本地产生一个缓存文件,去判断缓存时间和服务器文件修改时间

    content-type:post向服务器提交数据的数据类型,比如说文件上传时候的enctype

    需要注意如果发送信息 则对信息的格式和信息的长度要有规定

    请求头和请求主题信息之间要有一个空行 来说明头信息结束 接下来为主体信息

    2.  响应

      1. 响应行  -------->   协议  状态码  状态文字  
      2. 响应头信息
      3. 响应主体信息

    响应头信息和响应主体信息之间也有空行 当然 响应主体信息也可能不存在

    状态码参考:http://note.youdao.com/yws/public/redirect/share?id=b3fb3998f4a02abbd5a7c35e4f7dd8fc&type=false 

    301/302 :永久/临时重定向

    如果在重定向过程中 要保留之前的传输的数据 可以用307如header(‘要重定向的路径’,true,307);

    常用的响应头信息

    server:服务器信息

    date:服务器响应的时间

    last-modified:当前请求文件最后被修改的时间

    content-length:响应体的数据长度,单位是字节

    content-type:响应体的类型

    location:重定向

    refresh:刷新,包含时间和指定的url

    content-encodeing:响应文件的编码(不是字符集,是格式)

    cache-control:缓存控制,no-cache,不使用缓存、

    keep-alive:保持连接,timeout表示超时时间,Max表示系统会自动判断连接次数,所以当一个浏览器向网站发出请求最长能够timeout*max的时间内

    =============================================================================

    下面是一些应用

    PHP模拟响应

    1. 设置浏览器解析的字符集编码

    header(‘Content-type:text/html;charset=utf-8’);

    2. 跳转

    header(‘Location:url’);

    demo02_location.php

    clip_image002[4]

    请求demo02_location.php的响应

    clip_image004[4]

    httpwatch效果

    clip_image006

    3. 刷新

    header(‘Refresh:time,url’)

    demo03_refresh.php

    clip_image008

    demo03_refresh.php的响应

    clip_image010

    刷新到其他界面

    clip_image012

    clip_image014

    refresh和location的区别

    1. location是立即跳转,不会等到页面显示数据,就立马跳转。浏览器在解析HTTP协议的时候,碰到了location,就会马上组织HTTP协议进行二次请求

    2. refresh是在浏览器端先休息一定时间之后,再跳转。浏览器解析HTTP协议的时候,碰到了refresh,发现需要停留一定时间,再组织HTTP协议进行二次请求

    3. refresh能够将脚本内的其他内容进行先输出后跳转,而location不能显示脚本内的其他数据。

    4. 发送图片

    header(‘Content-type:image/jpg’);

    demo04_image.php

    clip_image016

    demo04_image.php的响应及效果

    clip_image018

    注意:content-type:image/图片类型,该图片类型要与本身图片的类型一致。不同的浏览器在识别jpg等图片的时候,需要做成jpeg

    5. 文件下载

    header(‘Content-type:application/octet-stream’)

    header(‘content-disposition:attachment;filename’)

    demo05_download.php

    clip_image020

    demo05_download.php的响应

    clip_image022

    效果是以附件的形式来保存响应的东西。

    PHP模拟HTTP请求

    1. PHP能够与Apache进行连接

    fsockopen($domainname,$port,$errno,$errinfo,$timeout):连接Apache,发出一个请求,得到一个请求资源,得到一个连接资源

    clip_image024

    2. PHP模拟发送HTTP请求

    fwrite($handle,$string):向一个资源中写入指定内容

    clip_image026

    3. 获得响应,就是通过fsockopen这个连接来获得响应

    fgets():从一个资源中获取一行或者指定长度数据

    clip_image028

    4. 输出全部数据

    clip_image030

    效果

    clip_image032

    ========================================================================

    另外利用HTTP协议还可以进行socket编程 ,模拟登陆发帖等操作。

    (二)关于防盗链

    请求头的Referer信息 :可以标记从哪里来

    一般通过配置apache服务器来防盗链:

    1. 打开apache的重写模块:mod_rewrite
    2. 在需要防盗链的网站目录下写.htaccess文件,并制定防盗链规则

    另外也可在PHP中做处理 但是不推荐

    反防盗链的话 那就是去伪造Referer了 。

    (三)关于缓存

    缓存是个大话题,目前只是做一下了解 待深入研究

    我们可以在服务器端开启缓存模块 同时设置缓存的文件类型和缓存的缓存的时长

    也可以做信息的过滤 对某些信息不缓存

    我们都知道3xx表示重定向,其中缓存也是运用到这一点 符合条件 服务器返回304 重定向 让浏览器去缓存取

    浏览器缓存机制可参考文章:http://www.cnblogs.com/skynet/archive/2012/11/28/2792503.html 

    http://www.cnblogs.com/lyzg/p/5125934.html

    http://www.cnblogs.com/futan/archive/2013/04/21/cachehuancun.html

    http://www.imooc.com/article/1478

    (四)关于HTTP压缩

    在服务器端开启压缩功能

    如default或者gzip模块

    同时在conf文件中写下一些代码

    <ifmodule mod_deflate.c>
    DeflateCompressionLevel  6 # 压缩级别为6   可选1-9 
    AddOutputFilterByType DEFLATE text/plain #  压缩文本文件
    AddOutputFilterByType DEFLATE text/html #  压缩html文件
    AddOutputFilterByType DEFLATE text/xml #  压缩xml
    <ifmodule>

    为什么要指定压缩的文件类型 ?

    因为压缩也要消耗cpu资源,所以一般情况下 压缩文本型的比较多,而图片视频等不压缩。

    以上只是对HTTP的一个基本认识,做个笔记,写的比较乱 尴尬.

    想更深入的学习可以参考--HTTP权威指南:http://pan.baidu.com/s/1c16i3Os

  • 相关阅读:
    Hibernate 中 简便proxool连接池配置
    卸载oracle删除注册表脚本
    hibernate的@EmbeddedId嵌入式主键详解
    Activiti工作流学习(三)Activiti工作流与spring集成
    Activiti工作流学习(二)流程实例、执行对象、任务
    Activiti工作流学习(一)部署对象和流程定义
    Enum(枚举类型)的基本应用
    Activiti工作流引擎参考资料
    条形码参考资料
    推荐两款PC健康小软件
  • 原文地址:https://www.cnblogs.com/zswordsman/p/5782620.html
Copyright © 2011-2022 走看看