HTTP协议学习笔记

熟悉HTTP/HTTPS 等网络基本知识

一 什么是协议

1.什么是协议?通信双方预先定义好的通信规范或规则

2.HTTP协议(超文本传输协议)的历史版本

HTTP / 0.9:
GET index.html

HTTP / 1.0
增加 POST
POST /index.html HTTP/1.0
If-Modified-Since 缓存相关
Authorization 身份认证
Connection 默认值close

HTTP/1.1
GET /index.html HTTP/1.1
Host 指定请求域名
Range 指定请求范围
Connection : 默认值 是 keep-alive
请求结束后,保持一段时间。默认keep-alive以便网页中嵌入的样式等继续使用连接。
Transfer-Encoding: chunked 分块传输

二 HTTP 通信交互流程

1.URL 规范
http://
username:passwd 一般不要
@www.un.org
/subdir/file.html
?var=value&var2=value2
#hash

2.HTTP工作流程 简要
1.输入域名,回车
2.解析域名,获取IP, 通过DNS
3.建立TCP连接
4.向服务器发送GET请求
5.返回内容
根据conection配置看是否断开连接。

一般是
客户端 —— 代理服务器 —— 应用服务器

三 常见的HTTP header 的含义及作用

1.fiddler 小工具 是一个http协议调试代理工具
浏览器抓包和调试工具

2.HTTP请求
①请求行
GET /dir/1.html HTTP/1.1

②请求头
通用header
请求header
实体header

③请求体

3.HTTP/1.1 规范中的8个请求方法
GET URL 规范最长是255个字符,实际支持1024字符

POST 提交大块数据 成功返回200

HEAD 检测服务器
PUT 类似post请求,目的是向服务器发送允许保存的数据 成功返回201 只能通过程序或工具发送

DELETE 删除服务器资源

TRACE 用于诊断网络

OPTIONS 查询指定资源有哪些请求方法可以使用
CONNECT 用于代理服务器和应用服务器之间
用于建立一个仅用于数据传输的隧道

4.请求头
Accept:
text/html,application/xhtml+xml,application/xml; q=0.9; /;q=0.8

浏览器接受的内容类型
参数为 Content Type
q 指定优先级[0-1] 0为不接受, 默认为1
如果不指定 / , 则其他类型优先级为0;

Accept-Charset: 浏览器接受的字符集
utf-8;q=0.66,*;0.6

Accept-Encoding:
gzip,deflate,sdch 浏览器接受的压缩格式

Accept-Language: zh-CN,zh;q=0.8,en;q=0.6
浏览器接受的语言

Authorization:发送身份验证信息的
Basic
QW….Q== 用户名和密码的basic64编码
如果响应指定的话
401 Unauthorized
浏览器就可以继续发送请求

Cookie :
version=1;skin=new

Cache-Control: 控制缓存策略
public,max-age=86400

Host:
www.xxx.com:8080
If-Match:
“aetaghash”
类似随机字符串,hash 仅在指定的值匹配
服务器已有内容的hash码,浏览器提交md5值,服务器检查该值,则进行操作。
如果匹配,则执行

If-Modified-Since:
Sun , 11 may
指定时间后,内容又被修改了,则请求git, 否则返回304

If-None-Match
“aetaghash”
如果不匹配,则执行

If-Range
“aetaghash”
Sun , 11 may
如果没有变化,则返回指定的
检查分段内容有没有变化,断点续传。如果没有变化,就发送请求的,如果变了就给全部内容

If-Unmoidified-Since:
没有变化,则给到

Range: 可以发送片段请求
bytes=0-499,1000-

Referer :
http:// xxx.com
点击页面的url,来源

Upgrade:
HTTP/2.0
客户端向服务器请求切换协议

2.0 规范已经出了,但是应用不广泛

Via:
192.168.11.22,ex.com
发送trace 请求时,追踪

X-Requested-With: XML
Ajax 请求时会用到,判断AJAX请求

X-Forwarded-For:
client1,proxy1,192.168.2.125
经常用于代理服务器转发客户端ip地址

四 常见HTTP相应状态码的含义

响应行
HTTP/1.1 200 OK

响应头
通用header, 响应header,实体header
响应体
html代码等

响应状态码:
100-199 :参考信息
200-299:成功 成功获取或成功创建
300-399: 重定向
400-499:客户端错误
500-599:服务器错误

常见码
200 ok
201 已创建 通常put请求
206 片段内容 请求range
301 已永久移动到其他位置,通常配合Location使用
SEO适用,无结尾/请求目录时也会自动产生此响应,尽量戴上斜线
302 Found 找到了
按HTTP规范,
304 Not Modified
未修改,无变动(用缓存中的吧)

400 Bad Request 请求错误
401 Unauthorized 未被授权
浏览器收到此响应会弹出一个输入用户名、密码的对话框
403 禁止访问 验证失败或重试次数过多也会导致此响应
404 Not Found
405 Method Not Allowed
访问方法不对
服务器禁止以所请求的方法访问,同时一般会通过Allow 告知允许的方法:
Allow: GET ,POST,HEAD

406 Not Acceptable
无法接受
当请求中的Accept系列header 中列出的条件无法满足时,会产生此响应

408 Request timeout
请求超时
服务器一直没遇到 connection:close 会产生此响应并关闭连接
416 Request range not satisfiable
Range请求片段无法满足
418 i m a teapot
用茶壶煮咖啡的时候

愚人节的玩笑

500 服务器错误
502 bad gateway
网管错误。代理服务器从上游服务器收到一个无效响应时,会给客户端返回此响应

503 service unavailable 服务暂不可用

如上游服务器超载或暂时停机维护等,代理服务器则返回此响应。可附带retry-after头
通常网站访问压力大时

504 gateway timeout
网关超时 代理服务器无法在限定时间内从上游服务器收到一个有效响应
通常网站访问压力大时

响应header
ETag:”ab….sertag“
跟客户端配合,检查客户端缓存是否超时
Location: 指定新的位置
Refresh: 指定重新刷新的时间和地址
Set-Cookie:服务器让客户端设置cookie
Vary 客户端浏览器保存缓存时,根据这些header 存储缓存。

五 Cookie、Session 的原理

cookie 是什么?
cookie使用来跟踪用户会话的技术.cookie本身是一小段文本信息,它存在与http协议header头域里,通过http协议来传递.
cookie 用来干什么?
http协议是一种无状态协议,客户端和服务端完成一次会话后,服务器端不知道下次连接到服务端的是不是同一个客户端,需要有个标识能告诉服务端,是哪个客户端连接上了服务端.例如登录用户,需要有个东西标识,那就在客户端保存一个cookie,下次访问的时候随http header一起发到服务端,服务端根据cookie的内容知道了这是某个用户的请求,服务端根据cookie取到该用户的信息,返回给客户端

session是什么
Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。
session能干什么
cookie能做的他能做,cookie不能做的他也能做!
session是怎么工作的
用户请求login.php填写数据后提交
服务器收到提交的数据取得用户信息,将用户信息存入session,并将session_id通过cookie的形式发给客户端
客户端将session_id存入浏览器cookie文件
用户再次访问其他页面时,将有session_id的cookie通过header头发给服务端
服务端拿到session_id从session中取到用户信息并返回

问题1:session的有效期?
由php.ini 中的session配置决定(session.cookie_lifetime=0 session.gc_maxlifetime ==600 )
问题2:关闭客户端可以删除session或者使session失效吗?
不能删除session,但是有可能使session失效。使其失效的原因是如果配置的session有效期是cookie随浏览器失效。
问题3:
如果浏览器不支持cookie,session能正常使用吗?
可以,将session通过url传递

问题4:
如果服务器有多台服务器,session如何共享?
nfs 将多台服务器所在的session存储目录设为mount挂载的目录
memcache session.save_handle=memcache并设置路径session_path = ‘tcp://192.168.1.101:11211’

mysql session.save_handler=user ,然后建立session表,建立php文件用于对数据库表操作session数据,最后用session的都引入上一步中的php文件

六 HTTP缓存策略

性能优化

缓存 Cache-control、 If-Modified-Since、ETag

Cache-Control: max-age=600, no-cache="Set-Cookie"

no-cache="xxx":缓存,但在发回客户端前先作检查,传值则表示不缓存指定的header
no-store:不缓存任何内容,在IE中=no-cache。
max-age=120: 缓存最大有效期,秒(Age response header)
max-stale=600:在缓存过期后还可以继续保存600秒,不赋值则表示可一直有效
no-transform:禁止缓存代理修改内容
only-if-cached: 禁止缓存代理访问应用服务器,仅在有缓存时返回内容。
public: 任何客户端(代理服务器或浏览器)均可缓存
private: 仅限私有客户端(一般是浏览器)可缓存内容
must-revalidate: 必须重新验证缓存有效性(默认行为),此指令目的在于显式指明
proxy-revalidate:代理服务器需要重新验证缓存有效性,浏览器不需要
s-maxage:指定public客户端上的maxage,private 上忽略。

第一次请求,服务器响应:
Last-Modified: 时间A

第二次请求,附加 header,检查是否从上次修改时间点后又有过新的修改:
If-Modified-Since: 时间A

ETag:
If-None-Match:

Vary: Accept-Encoding
告知缓存代理服务器,客户端请求中发送了不同的 Accept-Encoding 就要缓存不同的版本
Vary: User-Agent 合理吗? back

连接

Connection: keep-alive
Keep-Alive: 10

压缩

Accept-Encoding、Content-Encoding
ob_start("ob_gzhandler");

片段请求

Range: bytes=0-1023

分块传输

Transfer-Encoding: chunked

七 HTTP安全、常见攻击方式及防范策略

XSS 跨站脚本共计

被攻击的网站上注入了可执行的js,通过js盗取cookie,发送到第三方网站

CRSF 跨站请求伪造

在用户不知情的情况下,通过第三方网站插入图片或JS提交POST请求的方式执行有害操作
POST 请求带hash值来防止

Sniffer 嗅探

各种监听、假冒

HTTP和HTTPS

HTTP原先 直接建立在tcp协议上
HTTPS 建立在ssl协议上,当然ssl协议也是建立在tcp协议上
SSL协议的工作流程
客户端向服务器请求获取证书+公钥
客户端通过CA验证收到证书的合法性
客户端通过收到的公钥加密一个字符串,作为后续通信密钥,发送给服务器
服务器通过私钥解密,得到通信密钥
后续HTTP协议通过通信密钥加密进行

八 PHP中HTTP相关应用实战

使用 fsockopen 函数来模拟实现HTTP协议
或curl扩展

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • http协议有http0.9,http1.0,http1.1和http2三个版本,但是现在浏览器使用的是htt...
    一现_阅读 1,855评论 0 3
  • 本文整理自MIN飞翔博客 [1] 1. 概念 协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或...
    HoyaWhite阅读 2,634评论 2 20
  • 深入浅出HTTP协议(WEB开发和面试必备) 1.基础概念篇 a.简介 HTTP是Hyper Text Trans...
    半世韶华忆阑珊阅读 1,211评论 0 7
  • HTTP协议 请求部分 --- 说白了就是浏览器发送给服务器的数据格式请求行 --- 提交方式,HTTP版本号et...
    kk爱自由阅读 223评论 0 0
  • 作为一个前端,了解下 HTTP 协议是很有必要的。 先说个题外话,从《跃迁》一书中提到,高手获取信息的方式 —— ...
    VioletJack阅读 818评论 1 20