HTTP协议
1、URL
1)URL构成
wwwdj举例:www.baidu:80/index.php?search=苍老师
说明:
协议头:
主机名:www.baidu
主域名:baidu
端口号:80
访问的文件名:index.php
QueryString:search=苍老师
2)常见的协议头
ftp://
3)端口
1)端口号的常见分类:周知端口(1~1023),动态端口(1024~65535)
2)常见的端口:
ftp      服务  21  文件传输
ssh      服务  22  远程登录以便进行系统管理,telnet+ssl加密传输
telnet    服务  23  远程登录以便进行系统管理,以明文方式传输
smtp      服务  23  邮件服务协议
http      服务  80 
mysql    服务  3306
memcache  服务  11211
3)端口的安全:
对于需要安全保护服务,建议修改默认的端口号
2、HTTP请求方法
1)常用的请求方法:
GET  获取资源
POST  提交资源
HEAD  发送头信息
DELETE  删除资源
PUT  提交一条资源
2)get与post的区别:
1)get方式,将参数拼接在URL之后,参数之间使用&符分割。如果是英文字母、数字,直接传输,如果是中文,往往需要使用urlencode重新
编码后再传输。POST不是这样的
2)get传参的长度是有限的,它受到浏览器、操作系统的限制,不能太长,而post传参理论上是没有限制的,当然这也与服务器配置有关。
3)根据HTTP协议,get方式往往是获取某个资源,而不会改变服务端的数据;而post方式往往用于提交资源,将改变服务器的数据。
4)多个get请求采用不同的URL,但是访问的可能是同一个服务器文件;但是不同的post请求,往往访问的是不同的文件。
5)从安全考虑,get方式直接通过url进行明文传输,被认为是不够安全。因此对于比较重要的数据,往往推荐使用post方式进行传输。
常见的HTTP三位状态码
2xx成功
*200 OK,请求成功
201 OK
202 OK
3、状态码
常见的HTTP协议状态码
4、抓包分析请求头和返回头
5、url编码
1)当我们使用非英文传递数据时,建议都要进行UTL编码,这样才能保证数据正确传输。
2)常见的URL编码方案
(1)urlencode与urldecode
a、返回字符串此字符串中除了 -_.之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,
b、空格则编码为加号(+),+号本身变成了2B
c、此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded的媒体类型编码方式一样。
(2)rawurlencode与rawurldecode
rawurlencode与urlencode基本一致处理空格的方式不一样的由于历史原因,此编码在
将空格编码为加号(+)
方面与 RFC1738 编码(参见 rawurlencode())不同。
(3)base64_encode与base64_decode
a)base64_encode()使用 base64 对 data 进行编码。
b)设计此种编码是为了使二进制数据可以通过非纯 8-bit 的传输层传输,
例如的主体.Base64-encoded 数据要比原始数据多占用 33% 左右的空间。
c)base64_encode()数据要比原始数据多占用33%左右的空间
(4)base64_encod与urlencode区别
1)base64_encode 不但可以对URL中的参数进行编码,更重要的是,它支持二进制的编码
2)urlencode方式的URL,是被广泛应用的它的支持程度比base64_encode方式高很多
(5)js+php的应用中,该使用何种编码方式?
1)javascript中提供了encodeURIComponent方法,该方法可以将字符串进行与PHP的urlencode效果一致的编码方式
2)如果项目中既有JS又有php,并希望进行URL编码,最好的方案是:
前端在js中使用encodeURLCcmoponent对参数进行编码,而后端使用urldecode进行解码
建议
在php中接受的所有的与中文相关的参数,全部使用urldecode()解码一次,预防web没有自动urldecode()的情况
localhost/up/a.php?search=%23%E5%A4%A7%E5%8E%A6%23(浏览器自动解析的)
GBK  一个汉字占用2个字节
UTF-8  一个汉字占用3个字节
BIG5  繁体