HTTP 请求头里的一些含义
http header 消息通常被分为4个部分:general header, request header, response header, entity header。
General
Request URL:请求url
Request Method:get
Status Code:请求状态
Remote Address:远程ip和端口号
Referrer Policy: origin 发送只包含 host 部分的 Referrer
Response Headers
accept-ranges: bytes头域可以请求实体的一个或者多个子范围
cache-control: max-age=86400 设置静态资源缓存时间
content-length: 43 获取文件大小
content-type: image/gif 返回内容的MIME类型
Content-Type: text/html; charset=utf-8
application/x-www-form-urlencoded 编码类型的发送和接收 中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)
multipart/form-data : 需要在表单中进行文件上传时,就需要使用该格式
application/json : JSON数据格式
date: Sat, 01 Jun 2019 07:42:51 GMT 原始服务器消息发出的时间
last-modified: Sun, 03 Feb 2013 07:03:36 GMT 请求资源的最后修改时间
server: Tengine web服务器软件名称
status:200 请求状态
Request Headers
同上
Accept: text/plain, text/html 指定客户端能够接收的内容类型
Accept-Charset: iso-8859-5 浏览器可以接受的字符编码集
Accept-Encoding: compress, gzip 指定浏览器可以支持的web服务器返回内容压缩编码类型。
Accept-Language: en,zh 浏览器可接受的语言
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== HTTP授权的授权证书
Cache-Control: no-cache 指定请求和响应遵循的缓存机制
Connection: close 表示是否需要持久连接。(HTTP 1.1默认进行持久连接)
Cookie: $Version=1; Skin=new; HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。
Host: www.zcmhi.com 指定请求的服务器的域名和端口号
Pragma: no-cache 用来包含实现特定的指令
Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== 连接到代理的授权证书
Referer: http://www.zcmhi.com/archives/71.html 先前网页的地址,当前请求网页紧随其后,即来路
User-Agent: Mozilla/5.0 (Linux; X11) User-Agent的内容包含发出请求的用户信息 一种向访问网站提供你所使用的浏览器类型及版本、操作系统及版本、浏览器内核、等信息的标识
注意的几个问题
如何使浏览器缓存静态资源的指定时间?
在respons header中设置
cache-control: max-age=86400
request中的content-type比较重要:
下面两个典型的post请求,内容分别如下:
name=longgege&age=26
和 {name:“longgege”, age: 26}
application/x-www-form-urlencoded 这是第一个的
application/json; charset=UTF-8; 这个是解析第二个的
301和302的区别
1.301是永久重定向
2.302是临时重定向
要做301重定向的原因:http://www.shenhuangji.com/html/105.html
- 集权。如果一个网站绑定带www和不带www两个域名,百度会认为这是两个不同的站点。这样不利于SEO优化,所以要做301集权,就可以有效避免权重分散。
- 网站换域名
PHP怎么做重定向:
header('HTTP/1.1 301 Moved Permanently'); 14 15 header('Location:http://www.'.$_SERVER['SERVER_NAME']); //301跳转到www 16 17 exit();
HTTP和HTTPS
HTTP协议中有可能存在信息窃听或身份伪装等安全问题。使用HTTPS通信机制就可以有效地防止这些问题。
- HTTP的缺点
(1) 通信使用明文(不加密),内容可能被窃听
- HTTP 本身不具备加密的功能
- 按TCP/IP协议族的工作机制,通信内容在所有的通信线路上都有可能遭到窥视。可以通过抓包嗅探工具(Fidder,Wireshark、sniffer、nmap等工具)来解析内容。
(2) 不验证通信方的身份,因此有可能遭遇伪装
(3) 无法证明报文的完整性,所以有可能已遭篡改
- 加密分为通信的加密和内容的加密
1) 通信的加密
HTTP协议中没有加密机制,但可以通过和SSL(Secure Socket Layer, 安全套接层)或TLS(Transport Layer Security, 安全传输协议)的组合使用,加密HTTP的通信内容。用SSL建立安全通信线路之后,就可以在这条线路上进行HTTP通信了。与SSL组合使用的HTTP被称为HTTPS(HTTP Secure,超文本传输安全协议)
(2) 内容的加密
由于HTTP协议中没有加密机制,那么就对HTTP协议传输的内容本身加密。即将HTTP报文中所含内容进行加密处理。
- HTTPS 就是 HTTP加上SSL。
- HTTPS采用混合加密机制
加密分为对称密钥加密(也叫共享密钥加密、加密和解密同用一个密钥的方式)、非对称密钥加密(也叫公开密钥加密,私钥是自己保留用来解密,公钥可以随意发布,任何人都可以获得将自己要传递的消息通过公钥加密传送给你,你用私钥解密,常见的如RSA加密,采用大质数加密原理加密)
公开密钥处理起来比共享密钥加密方式更为复杂,因此若在通信时使用公开密钥加密方式,效率很低,因此采用混合加密
(1) 使用公开密钥加密方式安全地交换在稍后的共享密钥加密中要使用的密钥
(2) 确保交换的密钥是安全的前提下,使用共享密钥加密方式进行通信
-------------
- 如果正准备和某台服务器建立公开密钥加密方式下的通信时,如何证明收到的公开密钥就是原本预想的那台服务器发行的
公开密钥,或者可能传输中被篡改了?
可以使用由数字证书认证机构(CA, Certificate Authority)和其相关机构颁发的公开密钥证书
(1) 服务器生成公钥和私钥,把自己的公开密钥登陆至数字证书认证机构
(2) 数字证书认证机构用自己的私有密钥向服务器的公开密码部署数字签名并颁发公钥证书
(3) 数字证书认证机构的公开密钥已事先植入到浏览器里了(浏览器选项->Internet选项->内容->证书)
客户端拿到服务器的公钥证书后,使用数字证书认证机构的公开密钥,向数字证书认证机构验证公钥证书上的数字签
名,以确认服务器的公开密钥的真实性
(4) 使用服务器的公开密钥对报文加密后发送
(5) 服务器用自己的私有密钥对报文解密
---------------------
- SSL为什么大多只有在银行、电商等网站才使用?
(1) 节约购买证书的开销
(2) HTTPS建立加密通信消耗更多的CPU和内存资源,建立连接也慢,因此非敏感信息则使用HTTP通信,只有包含个人信息等敏感数据时,才利用HTTPS加密通信。
HTTP状态码
http(超文本传输协议)是一个基于请求与响应模式的、无状态的、短连接、灵活、应用层的协议,常基于TCP 的连接方式
状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
常见状态代码、状态描述、说明:
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
502 Bad Gateway //php-cgi进程数不够用、php执行时间长、或者是php-cgi进程死掉,都会出现502错误
503 Server Unavailable //服务器超时 //可能恢复正常
504 错误是(网关超时)
304 Not Modifed //自从上次请求后,请求的网页未修改过。
//服务器返回此响应时,不会返回网页内容。