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:浏览器的信息

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

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

请求demo02_location.php的响应

httpwatch效果

3. 刷新

header(‘Refresh:time,url’)

demo03_refresh.php

demo03_refresh.php的响应

刷新到其他界面

refresh和location的区别

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

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

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

4. 发送图片

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

demo04_image.php

demo04_image.php的响应及效果

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

5. 文件下载

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

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

demo05_download.php

demo05_download.php的响应

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

PHP模拟HTTP请求

1. PHP能够与Apache进行连接

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

2. PHP模拟发送HTTP请求

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

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

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

4. 输出全部数据

效果

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

另外利用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

HTTP协议(4)的更多相关文章

  1. HTTP协议系列(1)

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

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

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

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

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

  4. 协议森林16 小美的桌号(DHCP协议)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. DHCP协议用于动态的配置电脑的网络相关参数,如主机的IP地址,路由器出口地址.DNS域名服务器地 ...

  5. 简约之美Jodd-http--深入源码理解http协议

    Jodd 是一个开源的 Java 工具集, 包含一些实用的工具类和小型框架.简单,却很强大! jodd-http是一个轻巧的HTTP客户端.现在我们以一个简单的示例从源码层看看是如何实现的? Http ...

  6. 【JavaScript】javascript中伪协议(javascript:)使用探讨

    javascript:这个特殊的协议类型声明了URL的主体是任意的javascript代码,它由javascript的解释器运行. 比如下面这个死链接: <a href="javasc ...

  7. SNMP简单网络管理协议

    声明:以下内容是学习谌玺老师视频整理出来(http://edu.51cto.com/course/course_id-861.html) SNMP(Simple Network Management ...

  8. 海鑫智圣:物联网漫谈之MQTT协议

    什么是MQTT协议 MQTT(消息队列遥测传输协议)是IBM在1999年专门针对物联网等应用场景来制订的轻量级双向消息传输协议,它主要是为了解决物联网上使用到的设备的互相通信的问题,以及这些设备与后端 ...

  9. linux-图形化远程管理协议

    远程管理控制方式: RDP(remote desktop protocol)协议: telnet: SSH(Secure Shell): RFB(Remote FrameBuffer)协议(图形化远程 ...

  10. RTP与RTCP协议介绍(转载)

    RTSP发起/终结流媒体.RTP传输流媒体数据 .RTCP对RTP进行控制,同步.RTP中没有连接的概念,本身并不能为按序传输数据包提供可靠的保证,也不提供流量控制和拥塞控制,这些都由RTCP来负责完 ...

随机推荐

  1. 如何实现XA式、非XA式Spring分布式事务

    Spring应用的几种事务处理机制 Java Transaction API和XA协议是Spring常用的分布式事务机制,不过你可以选择选择其他的实现方式.理想的实现取决于你的应用程序使用何种资源,你 ...

  2. mfc非模态对话框

    按照我们的之前的做法,先新建工程. 把基本的内容都添加上. 形成这样一个样子: 并且进行试运行,让程序能够完成加法运算. 值的注意的是,静态文本那里要改一下名字,否则无法将成员变量进行添加. 前期准备 ...

  3. 在Linux平台上用ASP.NET 5 连接Redis服务器

    最近在做一个Linux平台上基于ASP.Net 5 中间件+Redis+Mysql架构的系统,研究使用了 StackExchange.Redis 作为asp.net5连接redis的工具.作者在前几天 ...

  4. /lib /usr/lib /usr/local/lib 的区别

    /lib是内核级的,/usr/lib是系统级的,/usr/local/lib是用户级的. /lib/ — 包含许多被 /bin/ 和 /sbin/ 中的程序使用的库文件.目录 /usr/lib/ 中含 ...

  5. 关于Git和SVN的对比

    1.git的提交是一个DAG有向无欢图.可以看到哥哥分支之间的合并关系.SVN的提交是一条直线. 2.git的提交版本号不是一个简单递增的数字,而是一个长达40位的十六进制数字(哈希值) 但是可以适用 ...

  6. [转载][jQuery] Cannot read property ‘msie’ of undefined错误的解决方法

    参考 [jQuery] Cannot read property ‘msie’ of undefined错误的解决方法 ---------------------------------------- ...

  7. 通用安全字符串输入,彻底替换server.htmlencode

    Function HTMLEncode(Str) If Isnull(Str) Then HTMLEncode = "" Exit Function End If Str = Re ...

  8. android开发中R文件丢失

    R文件在android开发中,占据着中会在重要的地位,里面的内容有系统自动生成,不可随意修改,然而在开发过程中,总是不可知的丢失,这里总结一下修补方法   #.在Eclipse里可以         ...

  9. Webbrowers控件的小技巧

    我最近接触webbrowers 这个控件比较多,感觉用起来比较顺手吧.可以做很多操作. 貌似很多网络模拟有时候都内置这个控件或者类似的控件,但这样子速度就不能跟那些单纯用API 构建数据包比了. 我一 ...

  10. 启用Win8(中文版/核心版)中被阉割的远程桌面服务端

    Windows 8/8.1 标准版(中文版/核心版)中取消了远程桌面服务端,想通过远程连接到自己的电脑就很麻烦了,第三方远程桌面速度又不理想(如TeamViewer).通过以下方法可让系统恢复远程桌面 ...