本文章只使用与小白初学HTTP协议的时候理解总结。其中包含很多第一次使用时的基本概念。
<?php
1.用途: 做webserver、 大型框架rest 都需要HTTP协议
http协议 + xml = webserver
HTTP协议 + json = Rest
http协议 + xml/json = API
做信息采集,小偷程序
学习ajax很容易理解
2.概念:协议就是双方或者多方共同遵守的一个规范,这个规范就是协议
HTTP协议 tcp/ip 协议 。。。。。
web服务器(可能是Apache、Nginx、...、iis)
客户端(浏览器)
3.格式
/**
telnet 窗口 发送GET POST
**/
HTTP协议不一样要浏览器发,用 telent 窗口发
1.telent IP 80
2.ctrl + ] //开启回显功能
/---------------------------------------------------------------------------------------/
telnet的GET请求
GET /HTTPxieyi/day1/02.php HTTP/1.1
Host: localhost
空行
请求方法 请求路径 所用的协议版本
请求头信息(头信息结束后有一个空行(必须要有),用来区分主体信息)
/---------------------------------------------------------------------------------------/
telnet的POST请求
POST /HTTPxieyi/day1/03.php HTTP/1.1
Host: localhost
Content-type:application/x-www-form-urlencoded
Content-length: 24
空行
空行
username=shangsan&age=28
1.POST 比GET多了主体信息
//GET的主体信息可以是空
2.头信息里POST要写主体的长度
//Content-length: 24
3.POST 必须要写一下代码
//Content-type:application/x-www-form-urlencoded
/---------------------------------------------------------------------------------------/
请求方法(GET/POST/HEAD/PUT/DELETE/TRACE/OPTIONS)
请求路径:url的一部分
协议版本:只有 HTTP/1.1
/---------------------------------------------------------------------------------------/
响应示例
HTTP/1.1 200 OK
Content-type:text/html
Content-length:5
hello
响应:
响应行
协议版本 状态码 状态文字
响应头信息
key: value
key: value
content-length: 主题长度
空行
相应主体
HELLO(内容)
/---------------------------------------------------------------------------------------/
/---------------------------------------------------------------------------------------/
5.请求方法讨论
请求方法(GET/POST/HEAD/PUT/DELETE/TRACE/OPTIONS)
虽然这些方法是HTTP协议的,但是外部的WEB SERVER 不一定支持(人家对面的服务器不一定让你用)
HEAD 和 GET 基本一样,只是不返回内容
比如,我们只是确认内容(判断照片还存在,不需要返回内容,用HEAD合适)
TRACE: 是使用了代理上网的时候,查看代理有没有修改我们的HTTP请求,我们用TRACE测试,该网站把最后的请求发送过来
OPTIONS:返回服务器可用的请求方法
6.响应头信息中的状态码和状态文字
状态码是用来放映服务器的响应情况
200 OK 404 NOT FOUND
1XX 请求被接受 实验环境下使用
2XX 成功 操作成功收到,理解并且接受
3XX 重定向 为了完成请求,必须采取进一步的措施
4XX 客户端错误 请求的语法有错误
5XX 服务端错误
200 成功返回网页
301/2 永久/临时重定向(做SEO的时候会用到)
304 Not Modified 未修改(说明取得是缓存)
307 重定向中保持原有的请求数据
404 请求的网页不存在( 可以为404找一个页面的美化 )
503 服务器暂时不支持
500 服务器内部错误
关于代码304的分析,表示的是浏览器中存在这个缓存,可以极大的减轻服务器的压力
当服务器传给浏览器数据的时候,会返回一个数据(在Response Headers)
Date:Wed, 19 Oct 2016 08:30:14 GMT
ETag:"1ce8-53f2f64e26493"
当浏览器刷新的时候,会发送给服务器我保存的缓存的信息(在Request Headers 中)
If-Modified-Since:Wed, 19 Oct 2016 03:27:52 GMT
If-None-Match:"1ce8-53f2f64e26493"
服务器就会返回304代码,缓存未修改
301/302 做SEO的明白
重定向 header('location: http://www.baidu.com');
header('location: http://www.baidu.com',true,301); //永久重定向,true表示使用301头信息替换原来的头信息
重定向可能会导致数据丢失,
比如 04.html通过POST传送数据到 05.php ,但是 05.php 302重定向 到 06.php了,导致数据丢失了
因为 04.html 到 05.php 是 post 请求,但是到了 06.php 就是 get 请求了
解决方法,使用307==>重定向中保存原有的请求数据