您现在的位置是:首页 >其他 >nginx(七十六)nginx与HTTP请求行的深入探讨网站首页其他

nginx(七十六)nginx与HTTP请求行的深入探讨

wzj_110 2024-06-17 10:43:10
简介nginx(七十六)nginx与HTTP请求行的深入探讨

一   nginx与请求行相关

nginx处理来自客户端的HTTP请求行和请求头

①  关于请求行的变量

   

$request= '$request_method' SP '$request_uri' SP '$server_protocol'

++++++++++++++ "案例讲解" ++++++++++++++

  

②  nginx作为服务端接收关于method控制

1) 请求方法和'支持的协议版本'包含如下:  -->'协议协商导致的'

 [1] GET、HEAD、POST 它们都支持HTTP'1.0/1.1'

 [2] PUT、DELETE、CONNECT、OPTIONS、TRACE、PATCH 它们'只支持HTTP1.1'

2) ngx_http_core_module.c看nginx支持'哪些method'

说明:'没有'限制,默认'全支持',与'RFC HTTP'协议跟随

limit_except

3) 案例: 限制'除了'GET HEAD POST'外'的所有'谓词(method)' --> 只'允许'GET HEAD POST

limit_except GET POST {
    deny  all;
}

4) if和$request_method的'结合'限制'请求'方法 --> "作用域更广"

if ($request_method !~* 'GET|POST|HEAD|PUT|OPTIONS') {
         return 404;
}

 301、302、307、308重定向

5) '302|302'重定向导致非'GET'请求变成'GET'请求,并且'request_body'丢失

   推荐使用:'307临时'、'308永久'

③  nginx作为反向代理转发proxy相关的请求行

修改发往上游的请求

1) proxy_method        --> 改变作为'反向代理角色nginx'的转发'请求'方法

proxy_method

2) 通过'location、proxy_pass、rewrite'改变作为'反向代理角色nginx'转发'request_uri'

  [1]、如果带proxy_pass带'attach_url',nginx会'解码后'进行透传,而不是'编码'原样透传

  [2]、通过rewrite的'?'可以进行'args'参数调整

proxy_pass  rewrite

​3) proxy_http_version  --> 改变作为'反向代理角色nginx'的转发'请求'协议

 

4) proxy_next_upstream non_idempotent --> 关于'幂等请求方法'的

解释: 为什么默认'GET'请求会'重试与上游另外服务器'建立连接,'POST'不会

proxy_next_upstream 

  

proxy_cache_methods 

 

proxy_cache_key

proxy_cache_convert_head 

+++++++++++++++ "以下与缓存相关的" +++++++++++++++

1) proxy_cache_methods --> 哪些请求方法的响应'会被缓存'

2) proxy_cache_key     --> 默认'没有指明'请求方法,所以不同请求方法都'命中' 'GET|HEAD'

3) proxy_cache_convert_head on

解读: 会将'HEAD请求'变成GET请求,并且缓存的是GET的response,而'不是'HEAD的response

补充: 这个配置'默认开启',即默认情况下会启用'HEAD方法转换为GET方法'进行缓存

④  跨域涉及请求方法

预检请求是'浏览器'行为,所以F12可以直接看到,Chrome浏览器中type为'preflight'

nginx 跨域踩坑及解决--OPTIONS请求处理

OPTIONS方法细讲

nginx源码分析  nginx子请求的源码分析

⑤  题外话

lvs配置persistence_timeout 参数导致lvs的rr负载不生效,负载不均衡

nginx官网配置websocket

CDN开启回源跟随导致301跳转地址栏没有发生变化 -->没有返回预期的Location

nginx使用keepalive复用tcp连接,提升性能

漫谈获取客户端真实ip

nginx运维开发宝典

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。