目录
一、https&http
HTTP
HTTP是“超文本传输协议”的首字母缩写。HTTP是万维网使用的基础协议,它定义了如何在Web服务器,网站,浏览器等之间传输和格式化消息。
HTTP协议运行在TCP之上,所传输内容是明文,是不安全的。
原理:1.客户端与服务器建立TCP连接(三次握手)
2.连接成功后,客户端发送请求给服务器
3.服务器接收到客户端发送的请求后作出相应,并将响应信息发送给客户端
4.服务器发送完响应信息后,就会断开TCP连接,因此HTTP是无状态的,下一次访问 的时候不会知道之前访问的过程
5.客户端接收到响应信息,浏览器进行解析,将html文件解析后呈现一个网页在浏览 器上
HTTPS
HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所传输内容都是经过加密的,有效地防止运营商劫持。
原理:
区别
HTTPS 协议需要到 CA 申请证书,一般免费证书较少,因而需要一定费用。
HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,HTTP:80,HTTPS:443
HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 SSL 加密传输协议。
HTTP 的连接很简单,是无状态的。HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。
二、request请求数据包格式
请求行
组成:请求方法、请求URL,HTTP版本。例:GET/index.html HTTP/1.1
Http规划了8种请求方法:
GET:请求获取URL页面信息及资源,返回实体主题
HEAD:类似于get请求,返回的响应中没有具体内容,用于获取报头
POST:向指定资源提交数据进行处理请求
PUT:从客户端向服务器传送的数据取代指定的文档的内容
DELETE:请求服务器删除指定页面
OPTIONS:允许客户查看服务器的性能
TRACE:回显服务器收到的请求,用于测试和诊断
CONNECT:已文档化,但未实现的一个方法
请求头
一些键值对,浏览器和web服务器之间都可以发送,特定的某种含义
HOST:主机或域名地址
Host:对应网址URL中的web名称和端口号
Accept:浏览器或客户可以接受的MIME文件格式。Servlet可以根据它判断并返回适当的文件格式
User_Agent:客户浏览器名称
Connection:告诉服务器是否可以维持固定的HTTP连接http是无连接的,HTTP/1.1使用Keep- Alive为默认值,这样当浏览器需要多个文件时(比如一个HTML文件和相关的图 形文件),不需要每次都连接
Accept-Langeuage::指出浏览器可以接受是语言种类
cookie:浏览器用这个属性向服务器发送Cookie,它可以记载和服务器相关的用户信息,也 可以用来实现会话功能
Referer:产生请求的网页URL
Accept-Charset:指出浏览器可以接受的字符编码
Accept-Encoding:指出浏览器可以接受的编码格式
空行
请求头和请求体之间用一个空行隔开
最后一个请求头标后是空行,发送回车符和推行,通知服务器以下不再有图标
请求体
要发送的数据(一般post提交会使用)例:user=123&pass=123
最常用Content-Type和content-length头标
三、response返回数据包数据格式
组成:状态行、响应头标、空行、响应数据
状态行:协议版本、数字形态的状态代码和状态描述,个元素之间以空格分隔
响应头标:包含服务器类型、日期、长度、内容类型
空行:响应头和响应体之间用空行隔开
响应数据:浏览器将实体中的数据取出来,生成相应的页面
四、HTTP响应码:
1xx:信息,请求收到,继续处理
2xx:成功,行为被成功接受、理解和采纳
3xx:重定向,为了完成请求,必须进一步执行的动作
4xx:客户端错误
5xx:服务器错误
200:存在文件
403:存在文件夹
3xx:均可能存在
404:不存在文件及文件夹
500:均可能存在
五、保持HTTP连接状态--Cookie和会话
Http有个基本的特点:无状态。HTTP的无状态是指HTTP协议对事物处理是没有记忆的。我们向服务器发送请求后,服务解析处理完这一过程后,并不会记住这一过程,意味着我们如果要继续向服务请求的话需要重新上传前面已经上传的信息。
1. 会话
在Web中,会话对象用来存储特定用户会话所需的属性及配置信息。当一个新用户访问页面的时候,Web服务器会自动创建一个会话对象,用户在网站的不用Web页面之间跳转的时候,存储在会话对象中的变量不会消失,而是在整个用户会话中一直存在。当会话过期或者被放弃时,服务器才会终止该对话。
2. Cookies
Cookies指网站为了辨别用户身份、进行会话跟踪而存储在用户本地终端上的数据。
cookie这个特性是用于解决HTTP协议“无状态”这个特点的。
(1)cookie的传送过程
1)在浏览器访问Web服务器某个资源的时候,Web服务器在响应报文头附带传送给浏览器一段数据(就是cookie),而且每个客户端每个浏览器的数据可以是各不相同的。
2)一旦浏览器保存了某个Cookie,那么以后每次访问服务器时,都会在HTTP请求头中将这个Cookie回传给服务器
3)Web服务器怎么给客户端发Cookie的呢?服务器通过在HTTP响应头中增加Set-Cookie:字段,而浏览器则通过HTTP请求头增加Cookie字段回传
(2)setcookie响应头字段
Setcookie()函数向客户端发送一个HTTP cookie。
cookie 是由服务器发送到浏览器的变量。cookie 通常是服务器嵌入到用户计算机中的小文本文件。每当计算机通过浏览器请求一个页面,就会发送这个 cookie。
cookie 的名称指定为相同名称的变量。例如,如果被发送的 cookie 名为 "name",会自动创建名为 $user 的变量,包含 cookie 的值。
必须在任何其他输出发送前对 cookie 进行赋值。如果成功,则该函数返回 true,否则返回 false。
语法:setcookie(name,value,expire,path,domain,secure)
参数 | |
name | 必选,规定了cookie的名称 |
value | 必选,规定了cookie的值 |
expire | 可选,规定了有效期 |
path | 可选,规定了服务路径 |
domain | 可选,规定了域名 |
secure | 可选,规定是否通过安全的 HTTPS 连接来传输 cookie |
可以通过 $HTTP_COOKIE_VARS["user"] 或 $_COOKIE["user"] 来访问名为 "user" 的 cookie 的值。
在发送 cookie 时,cookie 的值会自动进行 URL 编码。接收时会进行 URL 解码。如果你不需要这样,可以使用 setrawcookie() 代替。
设置并发送cookie:<?php
$value=”my cookie value”;
Setcookie(“TestCookie”,$value);
?>
检索cookie值:<?php
// 输出个别的 cookie
echo $_COOKIE["TestCookie"];
echo $HTTP_COOKIE_VARS["TestCookie"];
// 输出所有 cookie
print_r($_COOKIE);
?>
(3)Cookie请求头字段
Cookie请求头字段中的每个Cookie之间用逗号或分号隔开。
属性:name,value,version,path,domain,port等。
在这些属性名之前要增加$字符作为前缀。Version只能出现一次,且需要位于Cookie请求头字段设置值得最前面,但设置Path、Domain、Port等属性时,需要位于“名称=值”设置之后。
Eg:Cookie:Version=1;Course=Java;Version=1;Course=Java;Path=/hello/lesson;Course=vc;$Path=/hello
六、web应用程序编码
ASCII编码
到目前为止ASCII编码共定义了128个字符。
常见ASCII码的大小规则:0~9<A~Z<a~z。
几个常见字母的ASCII码大小: “0”为 48“、A”为65、“a”为97
一般汉字是由两个ASCII码表示的
URL编码
URL只能通过使用ASCII字符集(十六进制)将特殊字符在Web浏览器和服务器上显示。 如果URL包含ASCII集之外的字符,则必须转换为ASCII字符才可显示。
在URL编码中,非ASCII字符将会被替换为“%”,后跟十六进制数字的格式。
URL编码通常就会用加号(+)或%20替换空格。
URL编码就是把URL中的一些非ASCII码字符编码,转化为ASCII的字符,让服务器能更方便地识别出URL。
Unicode编码
unicode编码我们又可以叫做是统一码。在计算机科学领域中是一中业界标准,unicode编码还包含了字符集、编码方案等等。unicode编码给每个字符提供了一个唯一的数字。unicode编码的出现是为了更好的解决传统字符在编码产生的问题。并且unicode编码给每种语言中的每个字符设定了统一并且唯一的二进制编码。
编码方式:unicode是一种国际组织制定能容纳所有文字和符号的字符编码方案。Unicode用数字0-0x10FFFF来映射这些字符,最多可以容纳1114112个字符,或者说有1114112个码位。码位就是可以分配给字符的数字。UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。
ASCII编码是1个字节,而Unicode编码通常是2个字节。
UTF-8 是使用最广泛的一种 Unicode 编码方式,它是可以变长。它可以使用 1 - 4 个字节表示一个字符,根据字符的不同变换长度。UTF-8 的编码规则:(1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的 Unicode 码。因此对于英语字母,UTF-8 编码和 ASCII 码是相同的。(2)对于需要使用 N 个字节来表示的字符(N > 1),第一个字节的前 N 位都设为 1,第 N + 1 位设为0,剩余的 N - 1 个字节的前两位都设位 10,剩下的二进制位则使用这个字符的 Unicode 码点来填充。
HTML编码
HTml编码用于处理问题字符并将其安全并入HTML文档的方案。HTML编码定义了大量Html实体来表示特殊的字面量字符。
在 HTML 中,某些字符是预留的,例如在 HTML 中不能使用小于号<和大于号>,这是因为浏览器会误认为它们是标签。
实体名称对大小写敏感!
空格
" "
' '
& &
< <
> >
Base64编码
Base64 是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。Base64编码就是从二进制编码转化为64字符编码的具体过程。
如何编码的:
1.标准base64只有64个字符(英文大小写、数字和+、/)以及用作后缀等号;
2.base64是把3个字节变成4个可打印字符,所以base64编码后的字符串一定能被4整除(不算用作后缀的等号);
3.等号一定用作后缀,且数目一定是0个、1个或2个。这是因为如果原文长度不能被3整除,base64要在后面添加\0凑齐3n位。为了正确还原,添加了几个\0就加上几个等号。显然添加等号的数目只能是0、1或2;
4.严格来说base64不能算是一种加密,只能说是编码转换。使用base64的初衷。是为了方便把含有不可见字符串的信息用可见字符串表示出来,以便复制粘贴;