thể trùng lặp:
HTTP_HOST vs. SERVER_NAME
sự khác biệt giữa $_SERVER['HTTP_HOST']
và $_SERVER['SERVER_NAME']
là gì ??
thể trùng lặp:
HTTP_HOST vs. SERVER_NAME
sự khác biệt giữa $_SERVER['HTTP_HOST']
và $_SERVER['SERVER_NAME']
là gì ??
$_SERVER['SERVER_NAME']
cho giá trị của tên máy chủ theo quy định tại cấu hình máy chủ (nghĩa là cho Apache Apache conf tập tin).
$_SERVER['HTTP_HOST']
cung cấp cho bạn tên miền mà yêu cầu hiện tại đang được thực hiện và có liên quan trực tiếp hơn đến yêu cầu.
HTTP_HOST
thường hữu ích hơn trong hầu hết các ứng dụng liên quan đến yêu cầu, trong khi SERVER_NAME
có thể trả lại bất kỳ giá trị nào trong tệp conf và không cho bạn biết bất kỳ điều gì về yêu cầu.
Tôi sẽ cung cấp cho bạn một ví dụ về cách HTTP_HOST
có thể khác với SERVER_NAME
. Giả sử bạn có một máy chủ được xác định trong Apache với Tên máy chủ là domain.com
và địa chỉ IP là 1.2.3.4
.
Hãy nhìn vào hai yêu cầu URL đến và thấy sự khác biệt giữa các biến:
http://www.domain.com
HTTP_HOST = www.domain.com
SERVER_NAME = domain.com
http://1.2.3.4
HTTP_HOST = 1.2.3.4
SERVER_NAME = domain.com
Vì vậy, một lần nữa, HTTP_HOST được gắn hơn với yêu cầu, trong khi SERVER_NAME được xác định bởi cấu hình máy chủ.
HTTP_HOST
là tiêu đề Host:
do khách hàng gửi. Kết quả là, nó có thể là một chút ít đáng tin cậy hơn. SERVER_NAME
được xác định bởi cấu hình máy chủ của bạn
, bất kể nhập của người dùng.
Sự khác biệt về hành vi là tinh tế. Một số ví dụ tốt được thể hiện ở đây: http://shiflett.org/blog/2006/mar/server-name-versus-http-host
'SERVER_NAME' Tên của server host theo đó kịch bản hiện nay đang thực hiện. Nếu tập lệnh đang chạy trên máy chủ ảo, đây sẽ là giá trị được xác định cho máy chủ ảo đó.
'HTTP_HOST' Nội dung của Máy chủ: tiêu đề từ yêu cầu hiện tại, nếu có.
Kết luận của bạn sai. 'SERVER_NAME' được xác định bởi cấu hình máy chủ của bạn và [có thể được thực hiện (thực sự * đó là * hành vi mặc định) để phụ thuộc] (http://stackoverflow.com/a/28889208/632951) trên đầu vào của người dùng. – Pacerier
Một ví dụ điển hình về sự tinh tế của HTTP_HOST so với SERVER_NAME được thể hiện ở đây: http://shiflett.org/blog/2006/mar/server-name-versus-http-host –
Vâng, nó giống với một ví dụ từ http: // stackoverflow .com/a/1459794/632951. 'SERVER_NAME' được xác định bởi cấu hình của máy chủ và có thể được thực hiện tùy thuộc vào đầu vào của người dùng. – Pacerier
HTTP_HOST
Nội dung Host: tiêu đề từ các yêu cầu hiện tại, nếu có.
SERVER_NAME
Tên của server host theo đó kịch bản hiện nay đang thực hiện. Nếu tập lệnh đang chạy trên máy chủ ảo, đây sẽ là giá trị được xác định cho máy chủ ảo đó.
Tất nhiên đầu ra không giống nhau ........ – Pacerier
$ _SERVER ['HTTP_HOST'] "cung cấp cho bạn tên miền mà yêu cầu hiện tại đang được thực hiện và nó liên quan nhiều hơn đến yêu cầu." +1 THANKS !!!! Và nhờ những người liên kết với tài liệu chính thức, nhưng quá phức tạp đối với tôi;) – Eman
@ Tương tự, không chỉ 'SERVER_NAME' phụ thuộc vào cấu hình máy chủ. ['HTTP_HOST' cũng phụ thuộc vào nó.] (Http://stackoverflow.com/a/28889208/632951) – Pacerier