邢栋博客
邢栋博客,Action博客,记录工作和生活中的点点滴滴
http的request和response介绍
标签:
http
http请求
http request
1.request line
GET /dir/1.html HTTP/1.1
请求方法 资源位置 协议版本
2.HTTP HEADERS
通用header 请求header 实体 header
3.Content
request method
HTTP/1.1规范中的8个请求方法
1.GET url长度有限制
2.POST
3.HEAD
4.PUT //201
5.DELETE
6.TRACE
7.OPTIONS
8.CONNECT
request headers
Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
参数为 Content Type
q指定优先级[0-1],为不接受,默认为1
如果不指定*/*,则其他类型优先级为0
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Authorization:
Basic
%%%%%%%%%%%%%%%%%
401 Unauthorized
Cookie:
version=1;skin=new;
Cache-Control:
max-age=0
Host:
www.xingdong365.com
If-Match:
"aetaghdsfsdaf"
If-Modified-Since:
Sun,11 May 2018 08:30:44 GMT
If-None-Match:
"aetaghdsfsdaf"
If-Range:
"aetaghdsfsdaf"
If-Unmodified-Since:
Sun,11 May 2018 08:30:44 GMT
Referer:
http://xingdong365.com
Range:
bytes=0-499,1000-
Upgrade:
HTTP/2.0
Via:
192.168.0.26,example.com
X-Requested-With: //是否是ajax请求
XMLHttpRequest
X-Forwarded-For: //代理服务器转发
client1,proxy1,192.168.0.128
http response
1.Status line
HTTP/1.1 200 OK
100-199:参考信息
200-299:成功
300-399:重定向
400-499:客户端错误
500-599:服务器错误
200 OK 一切ok
GET /index.html HTTP/1.1
201 Created 已创建 通常伴随 Location Header 返回
PUT /a-new-doc.html HTTP/1.1
206 Partial Content 片段内容
GET /large.zip HTTP/1.1
Range:bytes0-500
301 Moved Permanently 永久重定向 已永久移动到其他位置,配合location使用
seo适用,无结尾/请求目录时也会自动产生此响应
GET /beauty HTTP/1.1
302 Found 找到了 临时跳转
按HTTP规范,客户端此时应使用和导致产生此响应的请求方法 同样的方法再次请求Location指定位置的资源
在实践中,绝大多数浏览器都一律使用get请求location中指定的资源
304 Not Modified 未修改,无变动(用缓存中的)
Date:..........
ETag:"........"
GET /beauty HTTP/1.1
If-None-Match:"......."
If-Modified-Since:............
400 Bad Request 请求错误 打开的方式不对
401 Unauthorized 未被授权 浏览器收到此响应弹出一个输入用户名 密码的对话框
403 Forbidden 禁止访问
404 not found
405 Method not Allowed
访问方法不对 服务器禁止以所请求的方法访问,同时一般会通过allow告知允许的方法
Allow:GET,POST
406 Not Acceptable 无法接受
当请求中的accept系列header中列出的条件无法满足时,会产生此响应
GET / HTTP/1.1
Accept:application/json
408 Request timeout 请求超时 服务器一直没遇到 connection:close 会产生此响应并关闭连接
500 Internal Server Error 服务器错误
502 Bad Gateway 网关错误 代理服务器从上游服务器收到一个无效响应时,会给客户端返回此响应
503 service Unavailable 服务暂时不可用
504 Gateway Timeout 网关超时。代理服务器无法在限定时间内从上游服务器收到一个响应
2.HTTP headers
通用header 响应header 实体header
ETag:"aetaghdsfsdaf"
Location:http://xingdong365.com
Refresh:3;url=http://xingdong365.com
Set-Cookie:........
Vary:Accept-Language,User-Agent
3.Content
<html>....</html>
http性能优化 performance
缓存
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就要缓存不同的版本
http request
1.request line
GET /dir/1.html HTTP/1.1
请求方法 资源位置 协议版本
2.HTTP HEADERS
通用header 请求header 实体 header
3.Content
request method
HTTP/1.1规范中的8个请求方法
1.GET url长度有限制
2.POST
3.HEAD
4.PUT //201
5.DELETE
6.TRACE
7.OPTIONS
8.CONNECT
request headers
Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
参数为 Content Type
q指定优先级[0-1],为不接受,默认为1
如果不指定*/*,则其他类型优先级为0
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Authorization:
Basic
%%%%%%%%%%%%%%%%%
401 Unauthorized
Cookie:
version=1;skin=new;
Cache-Control:
max-age=0
Host:
www.xingdong365.com
If-Match:
"aetaghdsfsdaf"
If-Modified-Since:
Sun,11 May 2018 08:30:44 GMT
If-None-Match:
"aetaghdsfsdaf"
If-Range:
"aetaghdsfsdaf"
If-Unmodified-Since:
Sun,11 May 2018 08:30:44 GMT
Referer:
http://xingdong365.com
Range:
bytes=0-499,1000-
Upgrade:
HTTP/2.0
Via:
192.168.0.26,example.com
X-Requested-With: //是否是ajax请求
XMLHttpRequest
X-Forwarded-For: //代理服务器转发
client1,proxy1,192.168.0.128
http response
1.Status line
HTTP/1.1 200 OK
100-199:参考信息
200-299:成功
300-399:重定向
400-499:客户端错误
500-599:服务器错误
200 OK 一切ok
GET /index.html HTTP/1.1
201 Created 已创建 通常伴随 Location Header 返回
PUT /a-new-doc.html HTTP/1.1
206 Partial Content 片段内容
GET /large.zip HTTP/1.1
Range:bytes0-500
301 Moved Permanently 永久重定向 已永久移动到其他位置,配合location使用
seo适用,无结尾/请求目录时也会自动产生此响应
GET /beauty HTTP/1.1
302 Found 找到了 临时跳转
按HTTP规范,客户端此时应使用和导致产生此响应的请求方法 同样的方法再次请求Location指定位置的资源
在实践中,绝大多数浏览器都一律使用get请求location中指定的资源
304 Not Modified 未修改,无变动(用缓存中的)
Date:..........
ETag:"........"
GET /beauty HTTP/1.1
If-None-Match:"......."
If-Modified-Since:............
400 Bad Request 请求错误 打开的方式不对
401 Unauthorized 未被授权 浏览器收到此响应弹出一个输入用户名 密码的对话框
403 Forbidden 禁止访问
404 not found
405 Method not Allowed
访问方法不对 服务器禁止以所请求的方法访问,同时一般会通过allow告知允许的方法
Allow:GET,POST
406 Not Acceptable 无法接受
当请求中的accept系列header中列出的条件无法满足时,会产生此响应
GET / HTTP/1.1
Accept:application/json
408 Request timeout 请求超时 服务器一直没遇到 connection:close 会产生此响应并关闭连接
500 Internal Server Error 服务器错误
502 Bad Gateway 网关错误 代理服务器从上游服务器收到一个无效响应时,会给客户端返回此响应
503 service Unavailable 服务暂时不可用
504 Gateway Timeout 网关超时。代理服务器无法在限定时间内从上游服务器收到一个响应
2.HTTP headers
通用header 响应header 实体header
ETag:"aetaghdsfsdaf"
Location:http://xingdong365.com
Refresh:3;url=http://xingdong365.com
Set-Cookie:........
Vary:Accept-Language,User-Agent
3.Content
<html>....</html>
http性能优化 performance
缓存
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就要缓存不同的版本
php实现http401授权
<?php //unset($_SERVER['PHP_AUTH_DIGEST']); $username = 'xingdong'; //用户名 $userpass = '123456'; //面膜 $secret = 'xingdong365'; //秘钥 $realm = '401test'; $opaque = md5($secret.$_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR']); if (!isset($_SERVER['PHP_AUTH_DIGEST']) || empty($_SERVER['PHP_AUTH_DIGEST'])) { header('HTTP/1.1 401 Unauthorized'); header('WWW-Authenticate: Digest realm="'.$realm.'",qop="auth",nonce="'.uniqid().'",opaque="'.$opaque.'"'); die; } $needed_parts = array( 'nonce' => 1, 'nc' => 1, 'cnonce' => 1, 'qop' => 1, 'username' => 1, 'uri' => 1, 'response' => 1 ); $data = array(); $keys = implode('|', array_keys($needed_parts)); preg_match_all('/('.$keys.')=(?:([\'"])([^\2]+?)\2|([^\s,]+))/', $_SERVER['PHP_AUTH_DIGEST'], $matches, PREG_SET_ORDER); foreach ($matches as $m) { $data[$m[1]] = $m[3] ? $m[3] : $m[4]; unset($needed_parts[$m[1]]); } //检测用户名 if ($data['username'] != $username){ header('HTTP/1.1 401 Unauthorized'); header('WWW-Authenticate: Digest realm="'.$realm.'",qop="auth",nonce="'.uniqid().'",opaque="'.$opaque.'"'); die('Invalid username.'); } $password = md5($username.':'.$realm.':'.$userpass); $response = md5($password.':'.$data['nonce'].':'.$data['nc'].':'.$data['cnonce'].':'.$data['qop'].':'.md5($_SERVER['REQUEST_METHOD'].':'.$data['uri'])); if ($data['response'] != $response) { header('HTTP/1.1 401 Unauthorized'); header('WWW-Authenticate: Digest realm="'.$realm.'",qop="auth",nonce="'.uniqid().'",opaque="'.$opaque.'"'); die('Invalid password.'); } echo "success";